Hermoso
Server Details
681 tools, all usable alone: ad research, video ads, publishing, campaigns. Meta, Google, TikTok.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- hermoso-ai/hermoso
- GitHub Stars
- 0
- Server Listing
- Hermoso
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.5/5 across 293 of 293 tools scored. Lowest: 3.4/5.
With 293 tools, the surface is enormous and many tools have overlapping purposes—multiple posting tools (post_to_meta, post_to_linkedin, schedule_post, etc.), multiple analytics tools per channel, and several search tools (search_meta_ads, search_instagram, search_reddit...). While each description is detailed, the volume makes it difficult for an agent to reliably distinguish between similar tools without careful reading, leading to frequent misselection.
The naming is largely consistent with a verb_noun pattern (post_to_*, list_*, create_*, delete_*, update_*, manage_*). There are clear families for major operations. A few outliers like 'google_business_account', 'hermoso_capabilities', and 'store_get' break the pattern, but the overwhelming majority follow a predictable structure, making navigation somewhat easier.
293 tools is far beyond any reasonable scope for a single MCP server, even for a comprehensive marketing platform. The calibration guide flags 50+ as an extreme mismatch, and this is nearly six times that threshold. Such a large surface overwhelms context windows, increases the probability of misselection, and makes it impractical for agents to learn or use effectively.
The tool set covers a vast domain: ad creation and rendering, posting across nine+ social channels, analytics and reporting, file management (Drive/OneDrive), competitor research, brand management, and more. It appears to provide CRUD and lifecycle coverage for most resources. While there may be minor gaps given the immense scope, the overall coverage is impressively comprehensive.
Available Tools
301 toolsanalyze_videoAnalyze videoARead-onlyInspect
Break a video ad down into its structure: the verbatim transcript (voiceover + on-screen text) with a beat list, plus duration and sampled frame timestamps. Use to study a reference/competitor ad before remixing its structure. Costs ~a transcription call; no ScrapeCreators credits.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | the video URL (a served /generated/ path or a public http(s) video) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds valuable behavioral context beyond the annotations: it mentions the cost model (a transcription call, no ScrapeCreators credits) and details the output contents (transcript, beat list, timestamps). This transparency helps the agent gauge resource usage and expected results without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and outputs, followed by use case and cost. Every sentence earns its place: no fluff, clear structure, and easily scannable by an agent. It avoids repetition of the title and name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description fully covers what the agent needs: it specifies inputs, outputs, use case, and cost. It does not require additional context about errors or pagination because it is a one-shot analysis. The description is complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the single param 'url' is described in the schema). The description does not add extra parameter detail beyond the schema, so it relies on the schema's explanation. This aligns with the baseline of 3 when schema covers everything; the description's mention of 'a served /generated/ path or a public http(s) video' is repeated from the schema, adding no new semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Break a video ad down') and the resource (video ad), then specifies the exact outputs: verbatim transcript, beat list, duration, and sampled frame timestamps. This distinguishes it from editing tools like clip_video or reframe_video and from research tools like competitor_teardown, which could be related but are explicitly differentiated by the phrase 'study a reference/competitor ad before remixing its structure.'
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 a direct use case: 'Use to study a reference/competitor ad before remixing its structure.' It also provides cost context ('Costs ~a transcription call; no ScrapeCreators credits'), which helps the agent decide when to invoke it. It does not explicitly list alternatives or when not to use, but the purpose is specific enough that the intended scenario is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
answer_google_business_questionAnswer a question on a Google Business listingADestructiveIdempotentInspect
Post the business’s answer to a public question on the brand’s Google Business Profile listing, or delete the answer already there. THIS IS AN UPSERT — one answer per account, so answering again REPLACES the previous one rather than adding a second. Deleting is public and immediate and is confirm-gated. Needs Google Business Profile connected and the project approved.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | the answer — required unless deleting | |
| delete | No | ||
| confirm | No | required for delete:true | |
| locationId | No | ||
| questionId | Yes | from list_google_business_questions |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that it is an upsert (replaces previous answer), that deleting is public, immediate, and confirm-gated. It also mentions the connectivity and approval requirements. This adds meaningful behavioral context that the annotations alone (destructiveHint, idempotentHint) do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the primary actions and then explaining the upsert and delete gating. The 'THIS IS AN UPSERT' emphasis is effective for clarity, though the sentence structure is a bit verbose with the repeated 'one answer per account' phrasing. Overall it is concise and well-ordered.
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 tool with no output schema, the description covers the key operational details: what it does, the upsert behavior, delete confirm-gating, and prerequisites. It does not mention error handling or return values, but those are not essential given the description and schema. The tool's behavior is sufficiently clear 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 coverage is 60% (text and confirm have descriptions, delete and locationId do not). The description adds context about delete and confirm ('Deleting is public and immediate and is confirm-gated') and the upsert behavior, but does not clarify locationId or explicitly state that text is omitted when deleting. It partially compensates for the coverage gap but leaves some parameters under-explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Post the business’s answer... or delete the answer') on a specific resource ('Google Business Profile listing'). It distinguishes this tool from siblings like list_google_business_questions and reply_to_google_business_review by focusing on answering public questions, and from delete_google_business_post by addressing answers rather than posts.
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 clear context for when to use the tool (to answer or delete an answer on a Google Business listing) and includes prerequisites ('Needs Google Business Profile connected and the project approved'). However, it does not explicitly name alternative tools or state conditions when not to use it, though the upsert and delete-confirm behavior implicitly guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_to_docAppend text to a Google DocAInspect
Append text to the end of a Google Doc Hermoso can reach — one it created (pass the documentId from create_doc) or one the user handed over with the Google file picker in the app (find its id with list_drive_files).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | text to append at the end of the doc | |
| documentId | Yes | the document id from create_doc |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds the reachability constraint (only docs Hermoso can access), which is useful behavioral context beyond annotations. It does not cover error handling or side effects, but the append action is straightforward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary purpose and then explains scope. It is concise but manages to pack essential usage detail without redundancy.
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 append tool with clear schema and annotations, the description adequately covers how to obtain the documentId and what scope is allowed. With no output schema, the description doesn't need to detail return values. It misses explicit mention of alternatives (e.g., append_to_sheet) but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the documentId's provenance (from create_doc or list_drive_files), which is not in the schema. The text parameter is self-explanatory in the schema, so no further semantics 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 clearly states the action ('Append text to the end of a Google Doc') with a specific verb and resource. It also distinguishes scope by specifying which documents are reachable, setting it apart from related tools like update_doc and append_to_sheet.
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 clear context on when to use: it targets documents Hermoso can access (created via create_doc or user-provided via file picker, found via list_drive_files). This guides the agent on sourcing the documentId. It does not explicitly mention alternatives like update_doc for other modifications, but the append-at-end scope is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_to_sheetAppend rows to a Google SheetAInspect
Append rows to a Google Sheet Hermoso can reach — one it created (pass the spreadsheetId from create_sheet) or one the user handed over with the Google file picker in the app (find its id with list_drive_files). rows = array of row arrays.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | rows to append — array of row arrays | |
| range | No | range to append at (default A1 / first sheet) | |
| spreadsheetId | Yes | the spreadsheet id from create_sheet |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds the behavioral constraint that it only operates on sheets Hermoso can reach, which is useful scoping. However, it does not disclose side effects, error conditions, or reversibility beyond what annotations imply. Given the annotations, the description adds moderate value but not rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose, then provides sourcing guidance. It is concise, with no wasted words, and each sentence earns its place. It could arguably be a single sentence, but the structure is clear and efficient.
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 append tool with no output schema, the description covers how to get the ID and the row format. It does not mention the optional range parameter, but that is documented in the schema. It also doesn't specify return behavior (e.g., success/failure indicators), but given the operation's simplicity, this is a minor gap. Overall, the description is adequate but could mention error scenarios or result expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all parameters described (rows, range, spreadsheetId). The description reiterates the rows format ('array of row arrays') and adds context on how to source spreadsheetId (from create_sheet or list_drive_files), which is beyond the schema's plain description. This adds marginal but non-critical value, so it sits at the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool appends rows to a Google Sheet, specifying the verb (append), resource (rows to a Google Sheet), and the scope (sheets Hermoso can reach). It distinguishes from siblings like update_sheet by implying it adds new rows rather than modifying existing cells. Also, it explains how to identify the target sheet (via create_sheet or list_drive_files), making the purpose 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?
The description gives clear context on when to use this tool: when appending rows. It explains how to obtain the spreadsheetId, either from create_sheet or list_drive_files, which guides the agent on prerequisite steps. However, it does not explicitly mention alternatives like update_sheet for modifying existing cells, nor list any exclusions. The context is sufficient for an agent to decide when this tool is appropriate, though explicit comparisons are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backfill_postsImport a channel’s past postsAIdempotentInspect
Import this brand's PAST posts from a channel into the performance record, so 'which hook works' can draw on history rather than only on what was published since Hermoso started recording. Supports facebook, instagram, threads, youtube, tiktok and pinterest; the others say plainly why they cannot (LinkedIn and Reddit have no enumerate-my-posts endpoint on our grant, and X bills per read so it is excluded from bulk import). BOUNDED, RESUMABLE AND QUOTED: it runs as a DRY RUN by default and tells you how many posts it found and what reading them will cost — pass confirm:true to import, and pass the returned cursor to continue. AN IMPORTED POST IS WEAKER EVIDENCE THAN A RECORDED ONE and is labelled 'backfilled': its hook is recovered ONLY where the post matches a Hermoso creation by asset or caption. A post made outside Hermoso stays UNATTRIBUTED — it counts toward channel and format totals but never votes on which hook works. Never guess a hook from a caption. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many posts this page (default 50, max 200) | |
| cursor | No | resume from a previous run | |
| channel | Yes | which channel to import from | |
| confirm | No | actually import — omit for a dry run that only quotes the cost | |
| accountRef | No | which Page / account, when the brand has more than one |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing the dry-run default, cost quoting, confirm flag, cursor continuation, and the nuanced evidence quality of backfilled posts (weaker evidence, unattributed posts don't vote on hooks). It also warns against guessing hooks from captions. This is comprehensive behavioral disclosure that the annotations (readOnlyHint: false, idempotentHint: true) only hint at. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-organized, with key terms (BOUNDED, RESUMABLE, QUOTED) highlighted and critical behavioral details emphasized. It front-loads the primary purpose and then proceeds logically through channels, exceptions, execution mode, and data quality caveats. While dense, every sentence earns its place given the complexity of the tool. A slightly tighter structure would improve it, but it's not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential aspects: supported channels, reasons for exclusions, dry-run behavior, confirmation requirement, cursor for pagination, cost implications, and the data-quality implications of backfilled posts. It even advises against guessing hooks from captions. There is no output schema, but the description describes what the tool returns (count, cost, cursor). An agent has everything needed 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 coverage is 100% with descriptions for all parameters. The description adds meaning beyond the schema by explaining the confirm flag ('omit for a dry run'), the cursor mechanism ('pass the returned cursor to continue'), and the purpose of limit and accountRef. It clarifies the interaction between confirm and the dry-run behavior, which the schema alone doesn't convey. This adds value above the structured definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: importing a brand's past posts from a channel into the performance record to support hook analysis. It specifies the exact verb, resource, and scope, and distinguishes it from siblings that list current posts or post new content. The level of detail makes the tool's function 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?
The description explicitly explains when to use the tool (to draw on historical posts) and why certain channels are excluded (LinkedIn/Reddit lack endpoints, X has per-read billing). It does not name an alternative sibling directly, but the context makes it clear this is for backfilling history rather than current post management. The note about passing confirm:true clarifies the usage path, though it stops short of stating explicit when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
billing_statusBilling statusARead-onlyInspect
Show this account's billing at a glance: current plan (id + label + the price it is ACTUALLY billed — quote plan.priceUsd per plan.period, not plan.monthlyUsd), credit balance, whether auto-reload is on, whether a card is on file, and whether YOU (this key) have ADMIN rights to change billing. Read-only, free. Call it before upgrade_plan / set_auto_reload to know what's possible — members have read-only billing. IN A SHARED TEAM WORKSPACE A MEMBER SEES THE PLAN AND THE BALANCE ONLY: the workspace owner's payment card and auto-reload belong to them and are not reported (billingScope:'member'). Never tell a member there is no card on file — the honest answer is that you cannot see it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses billing scope behavior ('IN A SHARED TEAM WORKSPACE A MEMBER SEES THE PLAN AND THE BALANCE ONLY') and the correct attribution for missing card/auto-reload data. It also reveals the precise pricing semantic (use plan.priceUsd per plan.period, not plan.monthlyUsd). This adds deep context the annotation cannot express. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but every sentence contributes critical operational guidance: the exact price fields, the admin-rights check, the member-scope restriction, the warning about mail cards. It is front-loaded with the core purpose. A few extra words add safety value, so conciseness remains strong despite 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, the description fully enumerates the returned fields (plan, balance, auto-reload, card, admin rights) and the privacy constraints. It also provides decision-relevant info (when to call, what to expect for members). An agent can use this tool correctly without any additional context. Truly 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?
The input schema is an empty object with 0 parameters, so schema coverage is trivially 100%. Per the baseline for 0 params, a score of 4 is appropriate. The description doesn't need to explain parameters since none exist; it correctly focuses on output semantics instead.
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 ('Show this account's billing at a glance') and enumerates exact fields (plan id/label/ACTUAL price, credit balance, auto-reload, card on file, admin rights). It distinguishes itself from siblings like upgrade_plan and set_auto_reload by explicitly positioning itself as the pre-check for those. No ambiguity about what the tool does.
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 explicit when-to-use guidance ('Call it before upgrade_plan / set_auto_reload to know what's possible') and even documents who can use it for what (members have read-only billing). It also provides negative guidance: never claim a member has no card, just say you can't see it. This is far beyond typical descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bluesky_post_metricsRead likes, reposts, replies and quotes on your Bluesky postsARead-onlyInspect
Read live engagement for up to 25 of the connected account’s Bluesky posts — likes, reposts, replies, quotes and bookmarks. Address a post by its AT-URI (the at://… value post_to_bluesky returns), not its web URL. Bluesky publishes NO impression or view count in any AT Protocol lexicon, so these are COUNTS with no denominator and no engagement rate can be computed from them — do not present one. A uri Bluesky returns nothing for is reported as MISSING (deleted, or not on the connected account), never as zero engagement. Read-only, 0 credits. Needs Bluesky connected.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | AT-URIs of the posts, at most 25 (Bluesky’s own maximum for one call) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint and destructiveHint, but the description adds substantial behavioral detail: MISSING vs zero engagement semantics, the absence of impression/view counts in AT Protocol, and the need for a connected account. It also declares read-only and 0 credits, which are not in the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries key information—purpose, addressing, caveats, semantics, and prerequisites. It is structured logically: what, how-to, warnings, status behavior, and limitations. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameters, limitations, behavioral outcomes, and prerequisites. With no output schema, it could be clearer about the exact return structure (e.g., how counts are keyed), but it does explain that missing URIs yield MISSING. Minor gap: no mention of response format beyond the metric types.
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 single parameter 'uris' already has a schema description including the 25 limit. The tool description adds crucial meaning: AT-URI not web URL, sourced from post_to_bluesky return, and clarifies the maximum. This goes beyond schema and prevents misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads engagement metrics (likes, reposts, replies, quotes, bookmarks) for up to 25 posts, and specifically identifies the platform (Bluesky). It differentiates from similar tools by focusing on Bluesky and mentions the AT-URI addressing, which is distinct.
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 explicit usage guidance: address by AT-URI not web URL (and where to get it), warns against computing engagement rates, and states prerequisites (connected account, read-only, 0 credits). However, it does not explicitly compare to sibling tools like x_post_metrics or collect_post_metrics, so an agent might not know when to pick this over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_creditsBuy creditsAInspect
Out of credits? Top up with a credit PACK. Call with no argument to list the available packs (id · credits · price). If the account has a saved card and you have billing-admin rights, calling with pack quotes the exact charge and calling again with confirm:true AND the quote's quote_token charges the saved card instantly (same one-click top-up as the app — no redirect). If there's no saved card yet, you get a Stripe checkout URL to hand your human for the FIRST purchase; their card saves for one-click after that. Packs only; subscriptions are managed by a person in Settings → Billing. To stop running out entirely, turn on auto-reload with set_auto_reload (admin) — low balances then top themselves up from the saved card automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| pack | No | the pack id to buy (e.g. pack-2k) — omit to list the available packs first | |
| confirm | No | set true to actually charge the saved card for `pack` (required for the one-click charge; ignored on the checkout-link path) | |
| quote_token | No | the quoteToken returned by the quote step — REQUIRED (with confirm:true) to charge; it binds the exact pack + price you quoted (10-minute validity) and makes a retried confirm idempotent |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations indicating readOnlyHint=false and idempotentHint=false, the description goes far beyond: it explains the multi-step flow (list, quote, confirm), the need for billing-admin rights, the saved-card requirement, the quote_token's 10-minute validity and idempotency guarantee, and the Stripe checkout URL path. It also notes that subscriptions are human-managed, covering important side-effect behavior without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence serves a purpose. It front-loads the core action ('Out of credits? Top up...'), then systematically covers the two paths, the token mechanics, security prerequisites, and the recommended alternative (set_auto_reload). No filler words; structure mirrors the logical workflow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three optional parameters, two distinct purchase paths, and no output schema, the description is remarkably complete. It covers the list→quote→confirm sequence, falls back to checkout URL when no card exists, explains idempotency via the token, mentions admin rights, and even suggests auto-reload as a preventive measure. Missing only minor details like error handling or rate limits, which are not critical given the coverage.
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?
Although the schema already documents all three parameters with 100% coverage, the description enriches them by explaining the interplay: omitting 'pack' lists packs, 'confirm:true' requires 'quote_token', and the token binds the exact price and enables idempotent retries. It clarifies the required sequence and which parameters matter in which flow, adding substantial value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: buying credit packs and topping up an account. It specifies the resource (credits), the action (buy/top up), and distinguishes the one-click flow from the checkout path. It implicitly differentiates from sibling billing tools like billing_status and set_auto_reload by focusing on pack purchases and quoting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells when to use this tool ('Out of credits? Top up with a credit PACK'), when not to (subscriptions are managed by a person), and provides an alternative (set_auto_reload for automatic topping up). It also details the two distinct usage paths (checkout URL for first purchase, one-click for subsequent) and their prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_scheduledCancel a scheduled postADestructiveIdempotentInspect
Remove a queued post before it goes out. Get the id from list_scheduled. Only works while it is still queued — something already published cannot be unsent (use manage_meta_post to delete a Facebook/Instagram post after the fact).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the scheduled post id from list_scheduled |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint and idempotentHint, and the description adds important behavioral constraints: it only works while queued, and cannot unsend published posts. This goes beyond the annotations by explaining the operational limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, front-loaded with the action, then limitations, then alternative. No wasted words, and the important constraints are placed early.
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 single-parameter deletion tool, the description covers acquisition of the id, the operational constraint, and the alternative for published posts. With annotations covering safety and schema covering parameters, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of the parameter with a clear description (id from list_scheduled). The description reinforces this source but adds little new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Remove) and resource (queued post), and clearly distinguishes it from other tools by noting the alternative for published posts (manage_meta_post). This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs where to get the id (from list_scheduled) and provides a clear when-to-use (queued) and when-not-to-use (published) with a named alternative. This fully routes the agent to the correct action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_voiceChange narrator voiceAInspect
Swap the narration of a finished video into a different voice — keeps the performance, lip-sync, and background sound. Use when the user likes the video but wants a different narrator voice; use dub_video only for language translation. Paid; returns the served URL.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | the source video URL | |
| voice | No | target narrator voice preset name, e.g. 'Aria', 'George', 'Rachel', 'Sarah', 'Brian', 'Charlotte' (defaults to a warm female read) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only basic hints (readOnlyHint=false, destructiveHint=false). The description adds valuable context: it reveals the tool is paid, returns the served URL, and preserves performance/lip-sync/background sound. While it doesn't detail all side effects, it covers key behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core action is front-loaded, followed by usage guidance and then practical details (cost, return). Every sentence earns its place, and the structure leads with the most critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters, no output schema, and basic annotations, the description covers all essential aspects: what it does, when to use it, what it returns, and the cost. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (video and voice) are fully documented in the schema. The description mentions the voice parameter's default and example presets but adds no new meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Swap the narration'), a specific resource ('a finished video'), and what is preserved ('performance, lip-sync, and background sound'). It also distinguishes itself from dub_video, making the purpose unambiguous even among many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('when the user likes the video but wants a different narrator voice') and when not to ('use dub_video only for language translation'). This direct routing to the alternative leaves no ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ad_policyCheck ad policyARead-onlyInspect
Pre-flight ad copy against Meta's REAL, live Advertising Standards before you run it — a flat 1-credit check. Pulls Meta's actual policy pages and returns a verdict (pass / fix / block) where every flagged issue QUOTES Meta's own policy text verbatim plus a compliant rewrite that keeps the sell. It's a check, not an edit — it never changes the creative. Especially worth running for regulated-adjacent categories (health/supplements, weight-loss or beauty results claims, finance/crypto/insurance, alcohol, dating, gambling) or ANY strong/absolute/guaranteed claim.
| Name | Required | Description | Default |
|---|---|---|---|
| copy | Yes | the ad copy / script / on-screen text to check | |
| claims | No | the claims / proof points the ad makes | |
| category | No | the product category — helps pick the relevant policy pages | |
| imageDescription | No | a description of the creative / image when relevant |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds specific behavioral detail: it 'pulls Meta's actual policy pages', returns quotes verbatim, and 'never changes the creative'. It also mentions the flat 1-credit cost, which is useful operational context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the core purpose, then layers specifics about output, behavior, and use cases. No wasted words; every clause adds value. It is appropriately sized for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does, how it behaves (read-only, returns verdicts with quotes), when to use it, and the credit cost. It lacks explicit detail on failure modes or exact response format, but for a read-only check tool with no output schema, it is sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The description adds a small nuance for the 'category' parameter (helps pick relevant policy pages) but does not elaborate on copy, claims, or imageDescription beyond the schema. This matches the baseline of 3 for high coverage with minimal extra detail.
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 ('pre-flight'), a resource (ad copy against Meta's Advertising Standards), and the exact output (verdict pass/fix/block with verbatim quotes and rewrites). It clearly distinguishes itself from siblings like plan_ad or render_ad by emphasizing it is a check, not an edit, and by referencing live policy pages.
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 explicitly says 'before you run it' and lists specific high-risk categories and claim types where it is especially useful. It implies when to use it (pre-flight) but does not mention alternatives or when not to use it, though no direct sibling offers the same function. Overall, it provides strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_sheet_rangeClear a range in a Google SheetADestructiveIdempotentInspect
Empty a range of cells in a Google Sheet, leaving the rows themselves in place. DESTRUCTIVE: call it WITHOUT confirm first and nothing is cleared — you get back the real number of filled cells in that exact range. Show the user that number, get an unambiguous yes, then call again with confirm:true AND confirmCells set to it. The echo is not ceremony: it is what catches naming A1:Z1000 when you meant A1:Z10, which is the mistake that actually happens. There is deliberately NO default range. The clear is read back and reported as confirmed only if the range really is empty afterwards. To remove a whole tab instead, use manage_sheet_tabs.
| Name | Required | Description | Default |
|---|---|---|---|
| range | Yes | the range to clear, e.g. "A2:D50" or "Sheet1!A2:D50" | |
| confirm | No | ||
| sheetUrl | No | ||
| confirmCells | No | echo back the filled-cell count the unconfirmed call reported | |
| spreadsheetId | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=true, readOnlyHint=false), the description discloses the non-obvious behavior: nothing is cleared on the first call, the count is returned, and confirmation requires echoing that count. It explains the safety purpose of the echo, the lack of a default range, and the read-back verification. This is rich, non-redundant behavioral context that significantly exceeds the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but every sentence serves a purpose: purpose, destructive warning, protocol, rationale for echo, no default, verification, alternative. It is front-loaded with the core purpose and progressively details the safety flow. It could benefit from slight structural breaking (e.g., bullets), but remains efficient and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with a mandatory safety protocol, the description covers all essential operational steps: the two-call flow, confirmCells echo, read-back verification, and the alternative for tab removal. It also explains the return value context (filled-cell count) on first call. The absence of an output schema is mitigated by this description. Nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40% (range and confirmCells have descriptions). The description adds meaningful semantics to confirmCells (echo the filled-cell count) and range (no default, explicit). However, it offers no explanation for sheetUrl or spreadsheetId, which lack schema descriptions. Since coverage is low and these remain unexplained, the description only partially compensates for the 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 opens with a specific verb and resource: 'Empty a range of cells in a Google Sheet, leaving the rows themselves in place.' It clearly distinguishes from the sibling manage_sheet_tabs by explicitly stating the alternative for removing a tab, making the tool's scope 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?
The description provides explicit when-to-use guidance, detailing the mandatory two-step confirm protocol: first call without confirm to get the filled-cell count, then call again with confirm:true and confirmCells set to that count. It also names the alternative tool (manage_sheet_tabs) for removing a whole tab, leaving no ambiguity about when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clip_videoClip a long videoAInspect
Cut ONE long video into several RANKED, ready-to-post short clips (podcast, webinar, interview, conference talk, long ad cut → Reels/Shorts/TikTok). Transcribes the source with timestamps, picks the strongest SELF-CONTAINED moments, then cuts + reframes each with ffmpeg — no video model renders anything, which is why it's fast and cheap. THE VERTICAL REFRAME IS SUBJECT-AWARE: a few stills per clip go to ONE cheap vision call, which decides a SINGLE crop offset that is held for that clip's whole length — so a speaker sitting camera-left is not cropped out of their own clip, while the framing still never drifts INSIDE a clip (a per-frame crop truncates to whole pixels and shimmers, so it is deliberately not tracked). It costs one small vision call per clip, billed as its own event. When nothing is being discarded, or no single subject can be located, the crop stays dead centre exactly as before — read reframedToSubject and each clip's reframeWhy back off the result rather than assuming either way. ACCEPTS: (a) a YouTube link (or Vimeo / Loom / Dailymotion / Streamable / Rumble / Wistia / Twitch / TED) — the server pulls the video down itself; (b) a direct https .mp4/.mov/.webm; (c) a Hermoso /generated/ URL (upload_file turns a local file into one). NOT supported: TikTok / Instagram / Facebook links, and anything age-restricted, private, members-only, geo-blocked or still LIVE — those fail fast with the real reason and are fully refunded, so ask for a direct file or an upload rather than retrying. Source must be at least ~15s and under ~600MB; only the first ~40 minutes is analysed (the result reports truncated:true when it hits that). Cost: a ~7-credit hold, settled to the exact transcription + encode cost, plus the clip-selection model's tokens billed as their own small event. RETURNS clips[] — each with its OWN served mp4 URL, title, hook, ready-to-post caption, 0-100 score and source timecode — not a single video. SUBTITLES ARE BURNED IN BY DEFAULT — slim white CAPS, thin black outline, bottom safe band, no box and no plate — because short-form is watched on mute; pass captions:false for clean footage. TIMING IS APPROXIMATE, NOT WORD-LEVEL: each cue is anchored to the transcript's own per-sentence timestamp and split inside a sentence by character count, so it tracks the speech closely but is not frame-accurate sync — never promise that. Read captionsBurned back off the result: it counts the clips that actually carry a burned track, and captionNote says why any are bare.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | how many clips to cut, 1-8 (default 4) | |
| video | Yes | the long video to clip — a YouTube/Vimeo/Loom/Dailymotion/Streamable/Rumble/Wistia/Twitch/TED watch URL, a direct https .mp4/.mov/.webm, or a Hermoso /generated/ URL | |
| captions | No | burn subtitles into every clip. DEFAULT TRUE — a clip cut from a podcast or a talk is watched on mute, and the words are the product. Set false for clean footage. A clip whose window carries no readable speech is delivered bare rather than captioned with a guess, and the result says which. | |
| aspectRatio | No | clip shape — '9:16' (default) vertical for Reels/Shorts/TikTok; 'keep' leaves the source framing untouched |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (only non-read-only, non-destructive), so the description carries the full burden. It discloses the pipeline (transcription, vision call for subject-aware reframing, crop offset held per clip), the deliberate nontracking to avoid shimmer, the default burned-in captions and approximate timing, and the return fields (reframedToSubject, reframeWhy, captionsBurned). This goes far beyond annotations with actionable behavioral detail. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries critical operational information. It is front-loaded with the core purpose, then systematically covers input types, restrictions, cost, return shape, caption defaults, and timing caveats. The structure uses clear labels (ACCEPTS, NOT supported, Cost, RETURNS) that make scanning easy, and there is no filler or repetition.
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?
Despite no output schema, the description fully explains what the tool returns (clips[] with mp4 URLs, titles, hooks, captions, scores, timecodes) and how to interpret result fields. It also documents constraints (15s-600MB, 40-min analysis limit), costs, and caveats (approximate timing, unidirectional crop behavior). An agent has everything needed to call this tool correctly and interpret its output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant value beyond the schema. For example, it explains the default behavior of `captions` (burned by default, delivered bare if no readable speech) and `aspectRatio` (9:16 default for vertical platforms, 'keep' leaves source framing). It also clarifies that `count` is 1-8 with default 4, though the schema already covers that. The description enriches parameter understanding with usage context and edge-case handling.
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: 'Cut ONE long video into several RANKED, ready-to-post short clips' with explicit target use cases (podcast, webinar, interview, etc.). It clearly differentiates from sibling tools like edit_video, dub_video, and reframe_video by describing the full pipeline (transcribe, select, cut, reframe) and the output format (multiple clips, not a single edit).
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 explicit when-to-use context and exclusions: acceptable input formats (YouTube, direct files, Hermoso URLs) are listed, and unsupported sources (TikTok/Instagram/Facebook, age-restricted, live) are called out with a fail-fast/refund policy. Also states prerequisites (min length, max size) and cost implications, giving the agent full decision criteria for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_post_metricsRead how the recorded posts performedAIdempotentInspect
Fetch fresh performance numbers for this brand's recorded posts and store them as a time-series. Metrics ACCRUE, so a post is read at ~24 hours and again at ~7 days; this collects whichever readings are due and skips the ones already taken. A channel that cannot report a metric records it as ABSENT with the reason — never as zero — and a read that fails is recorded as 'could not tell', which contributes to nothing. X IS SKIPPED BY DEFAULT because X bills us per API call: pass includeMetered:true to include it, and tell the user it costs credits BEFORE you do. The skip is always reported so a channel missing from the numbers is never mistaken for one that performed badly. Free except for X.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | cap how many posts to read in this run (default 40) | |
| includeMetered | No | also read X, which BILLS CREDITS per post read — ask the user first |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations. It discloses that metrics accrue over time, that missing channels are recorded as ABSENT (never zero), that failed reads are recorded as 'could not tell', that X is skipped by default due to per-call billing, and that the skip is always reported. This is rich behavioral context that aligns with the readOnlyHint:false (it writes) and idempotentHint:true (skips already-taken readings). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is substantial but every sentence carries a distinct piece of information: core action, accrual logic, absent/failure handling, X's cost, and the reporting of skips. It is not terse, but it is well-ordered (front-loads the main purpose) and avoids redundancy. A bit tighter prose would make it excellent, but it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key behavioral aspects: when to invoke, how accrual works, how missing/failed data is represented, and the cost implications of X. It does not mention the return value (e.g., whether the collected metrics are returned or just stored) or how the time-series can be retrieved afterward. Given no output schema, this is a minor gap, but the tool is otherwise well explained.
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 schema already covers both parameters well (100% coverage), so the baseline is 3. The description adds meaningful context beyond the schema: it explains why includeMetered bills credits, why the default is to skip X, and that the skip is reported even when omitted. This extra context about cost and reporting justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch fresh performance numbers'), the target ('this brand's recorded posts'), and the outcome ('store them as a time-series'). It further clarifies the accrual logic and how missing or failed reads are recorded, making it distinct from similar metric tools like x_post_metrics or post_performance, which focus on single posts or other scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly contrast with sibling tools such as x_post_metrics, post_performance, or x_post_insights. It explains when to invoke the tool (when readings are due) and how it behaves (skipping already-taken readings), but it doesn't provide criteria for choosing this tool over alternatives or mention that this is the canonical way to collect time-series metrics for recorded posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_on_meta_postComment on your own Facebook postAInspect
Leave a NEW top-level comment on one of the brand’s own Facebook Page posts, as the brand. This is the "link in the first comment" tactic — Facebook suppresses reach on a post with an outbound link in the body, so brands put the link underneath — and it is also how you add a pinned clarification, an offer code or a correction without editing the post. It is PUBLIC and posted as the brand: show the user the exact wording and get their go-ahead first. postId comes from list_meta_posts. FACEBOOK ONLY: Meta does not let an app add a top-level comment to an INSTAGRAM post — the only comment write Instagram documents is a reply to a comment somebody else left (reply_to_meta_comment) — so an Instagram media id is refused by name rather than attempted. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Page id — omit when only one Page is connected | |
| postId | Yes | the Facebook Page post id — from list_meta_posts, or returned by post_to_meta | |
| message | No | the comment text. Required unless attachmentUrl is given. | |
| attachmentUrl | No | optional public image URL to post as the comment’s attachment |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write, non-destructive, non-idempotent operation. The description adds that the comment is PUBLIC and posted as the brand, instructs showing the user exact wording and getting go-ahead, and discloses Meta's restriction on Instagram top-level comments. This provides behavioral context beyond the annotations without contradicting them.
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 well-structured, front-loaded with the core action, then explaining the tactic, behavioral cautions, and platform restriction. It is slightly long but every sentence adds value, and the information is logically organized. Minor redundancy (e.g., 'FACEBOOK ONLY' and Instagram refusal) is acceptable but prevents a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with 4 params and no output schema, the description covers all critical context: what it does, when to use it, where to get postId, the need for user approval, and platform limitations. It also contrasts with reply_to_meta_comment, ensuring the agent has enough information to use it correctly. Very 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?
The schema covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds minimal parameter meaning—mainly that postId comes from list_meta_posts, which is redundant because the schema already mentions that. No additional parameter semantics are provided, so the score stays at 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 verb and resource: 'Leave a NEW top-level comment on one of the brand’s own Facebook Page posts, as the brand.' It explicitly differentiates from reply_to_meta_comment (replies) and clarifies it's for top-level comments, not edits or Instagram. This makes the tool's purpose unambiguous and distinct 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?
The description provides explicit when-to-use scenarios: the 'link in the first comment' tactic, adding pinned clarifications, offer codes, or corrections. It also says postId comes from list_meta_posts and explicitly warns that Instagram media IDs are refused by name, directing users to reply_to_meta_comment instead. This gives clear guidance on when and how to use the tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_on_tiktok_videoPost a new comment on the brand’s own TikTok postAInspect
Write a NEW top-level comment on a TikTok post the authorized account owns. Text (≤1,200 characters, UTF-8) or an image, and TikTok requires at least one of the two. AN IMAGE HERE MUST BE UPLOADED FIRST — a raw URL is refused on a new comment; call upload_tiktok_comment_image and pass back imageUri + imageWidth + imageHeight together (a reply is the one place TikTok accepts a plain URL). TIKTOK SILENTLY HIDES COMMENTS IT FLAGS AS SPAM and sends no signal when it does, so avoid posting many near-identical comments in a short window, and read the comment back with list_tiktok_comments(status:'PUBLIC') if it matters that it is visible. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ≤1,200 characters (UTF-8). Either this or an image is required. | |
| videoId | Yes | the TikTok post id | |
| imageUri | No | from upload_tiktok_comment_image — a raw URL is NOT accepted on a new comment | |
| imageWidth | No | required with imageUri | |
| imageHeight | No | required with imageUri |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses critical behaviors: TikTok silently hides spam comments, raw URLs are refused on new comments, and authorization is required. These are essential operational details not captured in annotations, and they do not contradict anything.
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 dense at ~110 words, but every sentence serves a purpose. It front-loads the core action, then delivers constraints, workflow, and warnings. All-caps warnings are justified for critical pitfalls. It could be slightly more concise, but it is efficiently 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 description covers all essential aspects for correct invocation: authorization requirement, text/image requirement, upload-first rule, silent spam hiding with verification steps, and the caution against repetitive comments. With no output schema needed, nothing critical is missing for an agent to use this tool safely and effectively.
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 has 100% parameter coverage, but the description adds significant value: it explains the text-or-image requirement, that imageUri must come from upload_tiktok_comment_image and that width/height must be passed together, and clarifies the character limit and UTF-8 encoding. This greatly aids correct parameter usage beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Write'), the resource ('TikTok post the authorized account owns'), and specifies 'NEW top-level' to distinguish from replies. It also mentions the two content options (text or image). This clearly separates it from sibling tools like reply_to_tiktok_comment.
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 explicitly contrasts with replies ('a reply is the one place TikTok accepts a plain URL'), instructs to use upload_tiktok_comment_image for image upload, suggests list_tiktok_comments for visibility verification, and directs to tiktok_account_status for authorization. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
competitor_teardownCompetitor teardownARead-onlyInspect
Tear a competitor's ad strategy down into an actionable playbook: their opening-hook MIX, longest-running campaign THEMES, the WHITE SPACE nobody in their set runs, 2-3 render-ready COUNTER-PLAYS, and the territories they own that you should avoid. Pass competitor {name, domain?}. CONTRACT: supply ads (raw ad objects from a prior pull_competitor_ads / search_meta_ads call) to tear exactly those down, OR omit ads and this pulls the competitor's real Meta ads first (spends ~1-2 ScrapeCreators credits, longest-running = proven winners). Auto-tailors the white space + counter-plays to YOUR saved brand. Spends LLM tokens (0 SC credits when you pass ads).
| Name | Required | Description | Default |
|---|---|---|---|
| ads | No | ad objects to tear down (from pull_competitor_ads / search_meta_ads). Omit to auto-pull their Meta ads first. | |
| language | No | output language (default English) | |
| competitor | Yes | the competitor to tear down |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true; the description adds valuable behavioral context: it spends LLM tokens, optionally ~1-2 ScrapeCreators credits when auto-pulling, and auto-tailors to the user's saved brand. This discloses side effects beyond annotations without contradicting them.
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 dense but front-loaded with purpose and then the contract. While relatively long, every sentence delivers value—output components, cost implications, and tailoring behavior—so it is efficient for the complexity it covers.
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 complex tool with optional auto-pull, the description thoroughly covers inputs, behavior, costs, and outputs (playbook components). It doesn't specify the exact return format, but since no output schema exists and the description lists the playbook elements, it's sufficient for an agent 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 100%, but the description adds meaning beyond the schema: ads are described as raw ad objects from prior calls, omitting them triggers auto-pull, and competitor.domain is noted to sharpen the auto-pull page match. This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Tear a competitor's ad strategy down into an actionable playbook' and lists specific outputs (hook MIX, themes, white space, counter-plays, territories). It distinguishes itself from data-pull siblings like pull_competitor_ads by being the analysis step, not the retrieval step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit contract: either pass `ads` from prior pull_competitor_ads / search_meta_ads calls, or omit them to trigger an auto-pull. This clearly indicates when to use the tool and how it relates to sibling tools, though it doesn't explicitly mention when not to use it over alternatives like research_ads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_onedrive_fileConvert a OneDrive file to PDF or JPGARead-onlyInspect
Turn a file already in the user’s OneDrive into a PDF or a JPG — Microsoft does the conversion on its own servers, so nothing is re-encoded here and nothing is lost in a screenshot. It reads about 130 source formats, which is the point: PowerPoint and Word decks, Excel, Photoshop PSD, Illustrator AI, Sketch, 3D (fbx/glb/obj), video (mp4/mov/webm), HEIC from an iPhone, and the raw camera formats (CR2, NEF, ARW, DNG) that nothing else in this product can open. Use it to turn a client’s deck into images you can actually put in an ad, to get a usable JPG out of a designer’s PSD or a photographer’s raw file, or to hand someone a PDF of a spreadsheet. CONVERTING TO JPG REQUIRES BOTH width AND height — Microsoft refuses the call without them. The result is stored at a durable Hermoso URL you can pass straight to a render or a post; Microsoft’s own conversion link expires within minutes, so do not hand that one to anyone. Needs OneDrive connected — no new permission.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | REQUIRED for jpg — output width in pixels | |
| fileId | Yes | the OneDrive item id, from list_onedrive_files | |
| format | No | default pdf | |
| height | No | REQUIRED for jpg — output height in pixels |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=true, destructiveHint=false), so the description carries the full burden. It reveals key behaviors: conversion happens on Microsoft's servers (no local re-encoding), the result is stored at a durable Hermoso URL, Microsoft's own link expires quickly (warning not to share it), and it requires OneDrive connected but asks for no new permissions. This adds substantial context beyond the annotations and helps the agent understand side effects and output properties.
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 longer than minimal but every sentence earns its place. It front-loads the core purpose, then provides supporting context (format support, use cases, critical requirement, output URL behavior). The structure is logical, with the most important constraints (JPG dimensions, durable URL) clearly highlighted. Slightly verbose but justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, no output schema but describes output URL, broad format support), the description covers all critical aspects: what it does, when to use it, parameter requirements, output characteristics, and prerequisites (OneDrive connected). An agent has everything needed to invoke it correctly without additional research. Failure modes are not detailed, but that's not a requirement for this scoring.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, baseline is 3, but the description adds meaning: it explicitly states that JPG REQUIRES both width and height, clarifies fileId comes from list_onedrive_files, and notes format defaults to pdf. These are non-obvious details that prevent common errors. The description goes beyond mere schema 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 opens with a clear verb+resource: 'Turn a file already in the user's OneDrive into a PDF or a JPG.' It also specifies the exact output formats and differentiates itself by highlighting the broad format support (PSD, raw camera formats, etc.) that nothing else in the product can open. This distinguishes it from related tools like get_onedrive_file or generate_image without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases are given: 'turn a client's deck into images... get a usable JPG out of a designer's PSD... hand someone a PDF of a spreadsheet.' It also explains why it's the right tool for these scenarios ('the point is the 130 source formats'). While it doesn't explicitly name alternatives or when-not-to-use, the context strongly implies its niche and conveys critical usage constraints (e.g., JPG requires both width and height). The guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_brandCreate a brand workspaceAIdempotentInspect
Add a NEW brand workspace (a separate brand/client on this account) and switch to it. Each workspace has its OWN brand profile, memory, swipefile, Library, avatars, skills, playbooks and connectors — nothing leaks between them. Use this for a second brand or a new client; use draft_brand to FILL a workspace, and update_brand to edit one. Re-running with the same name returns the existing workspace instead of a duplicate. Free (the ~50-credit research cascade only starts when you then run draft_brand).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | the brand / client name for the new workspace | |
| activate | No | switch this connection to the new brand (default true) — everything you do next scopes to it |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond annotations: it explains that the tool switches to the new workspace, that workspaces are isolated (data separation), and that it's free until draft_brand is run. It aligns with annotations (idempotentHint=true, destructiveHint=false) without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff. The main action is front-loaded, and each subsequent sentence adds distinct value (concept, usage alternatives, idempotency/cost). Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter creation tool with no output schema, the description covers the conceptual model, isolation, switching behavior, idempotency, cost, and sibling differentiation. Nothing essential is missing for an agent to use 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 coverage is 100%, so both parameters are already well-documented. The description does not add significant new semantic detail beyond the schema, though it reinforces the 'switch' behavior tied to the activate parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Add a NEW brand workspace'. It distinguishes itself from siblings by naming draft_brand and update_brand and explaining what each is for. This leaves no ambiguity about what create_brand does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('for a second brand or a new client') and when to use alternatives ('use draft_brand to FILL a workspace, and update_brand to edit one'). Also explains behavior on re-running (idempotent) and the credit implication, providing complete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_docCreate a Google DocAInspect
Create a new Google Doc in the user’s Drive with a title + optional body text — e.g. export ad copy, a creative brief, or a report. Returns the document id + URL. Needs Google Drive connected (Settings ▸ Connectors ▸ Google Drive — one connection covers Drive, Sheets and Docs).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | body text to insert | |
| title | No | document title |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: false and destructiveHint: false, so the description's mention of 'create' is consistent. The description adds the connector requirement and return info (id + URL), which are useful. However, it does not disclose what happens if the connection is missing, whether the tool always creates a new doc (non-idempotent, which annotation confirms), or any side effects beyond creation. For a mutation tool, this is adequate but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no padding. The first sentence states the purpose and gives examples; the second covers the return value and prerequisite. Everything is front-loaded and every word earns its place. It is concise without sacrificing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with no output schema, the description covers the key aspects: what it creates, the return value, and a prerequisite. It does not explicitly mention error handling or formatting, but given the tool's simplicity and the presence of sibling tools that handle modifications (append_to_doc, update_doc), this is fairly complete. The examples and connector note provide useful context beyond the bare minimum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both 'title' and 'text'. The description adds examples of usage and clarifies 'optional body text', but it also states 'title + optional body text', implying title is required, while the schema marks both parameters as optional (required: 0). This creates a slight inconsistency. The examples add some semantic value, but the mismatch in requiredness prevents a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create', the resource 'a new Google Doc', and specific attributes (title + optional body text). It provides concrete examples (export ad copy, creative brief, report) that help distinguish it from related tools like append_to_doc, update_doc, and create_sheet. The scope is unambiguous: 'in the user’s Drive'.
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 context for when to use it via examples ('e.g. export ad copy...') and notes the prerequisite of having Google Drive connected. It does not explicitly state when NOT to use it (e.g., when appending to an existing doc) or name alternative tools, but the purpose is clear enough that an agent would correctly infer it is for creating new docs. The connector instruction adds practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_drive_folderCreate a Drive folderAInspect
Create a folder in the user’s Google Drive (optionally nested under parentId) to organize saved files. Returns the folder id + webViewLink. Use that ID as update_drive_file’s moveToFolderId or as parentId for a nested folder. NOTE: save_to_drive’s folder is a NAME, not this id — it find-or-creates a folder by that name, so pass the folder NAME there (or omit and just save, then move with update_drive_file).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | folder name | |
| parentId | No | parent folder id for a nested folder (default: Drive root) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnlyHint=false and destructiveHint=false, so the description doesn't need to repeat those. It adds valuable context beyond annotations by stating the return value (folder id + webViewLink) and the crucial distinction between folder NAME and ID when interacting with save_to_drive. This is more than the schema provides.
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 bit long but front-loaded with the main purpose and return value. The extra note about how to use the ID and the save_to_drive distinction is valuable and earns its place, though it could be trimmed slightly. Overall, it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with only two parameters and no output schema, the description is highly complete. It states the return values, explains nesting, and disambiguates from a confusing sibling (save_to_drive). Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both name and parentId are described). The description reiterates the optional parentId and its default (Drive root), but doesn't add new semantics beyond what the schema already states. The baseline of 3 is appropriate since the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create'), the resource ('a folder in the user’s Google Drive'), and the optional nesting behavior. It distinctly distinguishes itself from siblings like create_onedrive_folder and create_doc by specifying 'Drive folder'.
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 explicitly explains when and how to use this tool: to organize saved files, and it gives concrete downstream usage of the returned ID (as moveToFolderId or parentId). It also warns about the gotcha with save_to_drive's folder name, providing clear exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_meta_catalogCreate a Meta product catalogAInspect
Create a NEW product catalog on one of the merchant’s Meta business portfolios. A catalog is the input to Advantage+ catalog ads (dynamic product ads) — build it first, then fill it from the merchant’s feed or Shopify, then point a campaign at it. Name the owning portfolio EITHER by its numeric businessId OR by businessName, exactly as list_meta_catalogs prints it (“DMDB Group”) — a name that matches no portfolio, or more than one, is refused BY NAME with the portfolios that really exist and their ids, never guessed, and it never falls back to “the only portfolio”. Vertical defaults to commerce and CANNOT be changed afterwards, nor can the owning portfolio, so both are worth getting right the first time. IMPORTANT — META DOES NOT REFUSE A DUPLICATE NAME: it silently creates a SECOND catalog with the same name and nothing to tell the two apart, so Hermoso refuses a name the portfolio already uses and tells you the existing id (if a previous create seemed to fail, that id is very likely the catalog it actually made). Pass allowDuplicateName:true if you genuinely want a twin. The confirmation is READ BACK from Meta — its create returns only an id, so the name, vertical and portfolio in the summary were fetched, not echoed. Free, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | what to call the catalog | |
| vertical | No | the catalog’s industry (default commerce). PERMANENT — Meta publishes no way to change it after creation. | |
| businessId | No | numeric business-portfolio id that will OWN the catalog (from list_meta_catalogs). Meta will not let a catalog move to another portfolio later. A portfolio NAME is accepted here too and is resolved server-side. | |
| businessName | No | the owning business portfolio by NAME instead of by id, exactly as list_meta_catalogs prints it (e.g. "DMDB Group"). Unknown or ambiguous names are refused with the real ids rather than guessed. Give this or businessId. | |
| allowDuplicateName | No | create it even though the portfolio already has a catalog with this name. Off by default: Meta would build an indistinguishable twin without complaining. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description extensively discloses behaviors beyond the annotations: Meta silently accepts duplicate names and creates twins, so Hermoso refuses them and returns the existing id; vertical and portfolio are permanent; confirmation is read back from Meta rather than echoed. Since annotations only give generic flags (readOnlyHint, idempotentHint), this description carries the full transparency burden and does so thoroughly.
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 long but dense, and nearly every sentence carries a pitfall or precondition relevant to successful execution. It is somewhat front-loaded with the create purpose, though the single tight paragraph and a few optional extras ('Free, 0 credits') keep it from being perfectly concise for an agent-read system.
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, no-output-schema creation tool, the description answers every non-obvious call decision: how to designate ownership, what happens on ambiguity, how duplicates are handled, what is permanent, and what the confirmation actually contains. An agent can invoke this tool without requiring external knowledge of Meta cataloging behavior.
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?
Even with 100% schema coverage, the description adds material meaning: businessId and businessName are two ways to identify the owner; a name match that is unknown or ambiguous is refused rather than guessed; duplicate names are guarded by default and require allowDuplicateName:true. These are operational semantics the schema alone does not convey.
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 first sentence states a concrete verb (create), a specific resource (product catalog), and a target (Meta business portfolio). It also grounds the tool in a workflow — this is the first step before feed ingestion and campaign targeting — which distinguishes it from list_meta_catalogs, update_meta_catalog, and delete_meta_catalog.
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 makes the intended usage sequence explicit: create the catalog first, fill it from feed or Shopify, then point a campaign at it. It also tells the agent how to identify the portfolio using list_meta_catalogs output. It does not explicitly say 'use update_meta_catalog when you need to modify an existing catalog,' so it stops short of naming the alternative pathways.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_onedrive_folderCreate a OneDrive folderAInspect
Create a folder in the user’s OneDrive (optionally nested under parentId) to organize saved files. Returns the folder id + webViewLink. Use that id as update_onedrive_file’s moveToFolderId or as parentId for a nested folder. NOTE: save_to_onedrive’s folder is a NAME (find-or-created), not this id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | folder name | |
| parentId | No | parent folder id for a nested folder (default: OneDrive root) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint false, so mutation is expected. Description adds that it returns folder id and webViewLink, and clarifies nesting behavior. Does not disclose idempotency behavior (e.g., duplicates on repeat), but annotations already indicate it's not idempotent. Adds context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with clear structure, front-loaded with the core action, then returns and usage. No redundant phrasing.
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 create operation with two parameters, the description covers purpose, return value, and cross-tool usage. It could mention behavior on existing folder names, but that's a minor gap. Overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema describes both parameters clearly (name, parentId with default root). Description reiterates nesting but doesn't add new semantics beyond schema. Since schema coverage is 100%, description adds minimal extra value.
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 (create) and resource (folder in user's OneDrive), mentions optional nesting, and distinguishes from related tools by naming save_to_onedrive and update_onedrive_file. Clear 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?
Explicitly tells how to use the returned id with update_onedrive_file and for nested folders, and clarifies that save_to_onedrive uses a name, not this id. This helps the agent choose the correct tool. Does not explicitly contrast with create_drive_folder but the name implies the service.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pinterest_boardCreate a Pinterest boardAInspect
Create a board on the connected Pinterest account. Needed because a Pin cannot exist without a board, and a NEW Pinterest business account has none — if list_pinterest_boards comes back empty, make one here rather than telling the user you can't pin. Boards are PUBLIC unless you pass privacy 'SECRET'; a Pin on a secret board is invisible to everyone, so only choose that if the user asked for it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | board name, e.g. "Product launches" — keep it something a real Pinterest audience would browse | |
| privacy | No | default PUBLIC. SECRET hides the board and every Pin on it from everyone but the account owner. | |
| description | No | optional board description (≤500 chars) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Though annotations already indicate non-readOnly and non-destructive, the description adds valuable behavioral context: the default PUBLIC visibility, the invisibility of Pins on SECRET boards, and the logical dependency that a board must exist before pinning. This goes beyond the annotation hints and helps the agent understand consequences and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff, front-loaded with the core action and then the most important usage nuance. Every clause earns its place, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the key workflow (check list first, then create), the default privacy behavior, and the caution about SECRET. It does not mention the response format or potential errors, but for a create tool with no output schema, these are not critical. The description is functionally complete for an agent to use 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?
The input schema already provides detailed descriptions for all three parameters (100% coverage), including enums and character limits. The description reinforces the privacy behavior but does not add substantive new meaning beyond what the schema already states. Since schema covers everything, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a board on the connected Pinterest account') and goes beyond by explaining the prerequisite role of boards for pins. It clearly distinguishes from siblings like update_pinterest_board and delete_pinterest_board by focusing on creation and the empty-boards scenario.
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 explicit when-to-use guidance: if list_pinterest_boards returns empty, create a board here rather than telling the user you can't pin. It also warns against using 'SECRET' unless the user requests it, which is a clear constraint on when not to use a particular parameter. This directly supports tool selection among related list/update/delete tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sheetCreate a Google SheetAInspect
Create a new Google Spreadsheet in the user’s Drive and optionally fill it with rows — e.g. export a swipefile, ad list, or performance report. Pass rows as an array of row arrays (first row = headers). Returns the spreadsheet id + URL. Needs Google Drive connected (Settings ▸ Connectors ▸ Google Drive — one connection covers Drive, Sheets and Docs).
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | rows to write — array of row arrays; first row = headers | |
| title | No | spreadsheet title |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive behavior. The description adds valuable behavioral context: it returns the spreadsheet ID and URL, it optionally fills rows (implying empty sheets are possible), and it requires a Google Drive connection. These details go beyond the annotation hints and help the agent understand side effects and prerequisites. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: it leads with the core purpose, explains the data format, states the return value, and ends with the connection prerequisite. Every sentence adds functional value, and the length is appropriate for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 optional parameters and no output schema, the description covers all necessary aspects: what it does, how rows are structured, what it returns, and the required connection. The agent has enough information to invoke it correctly without ambiguity. Missing details like default title behavior are minor and not critical 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?
Since schema description coverage is 100% and both parameters ('rows' and 'title') already have descriptive text in the schema, the description adds little new meaning. It repeats the row-array structure and headers note, but does not introduce novel syntax, formatting rules, or default behavior. Baseline 3 is appropriate when the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new Google Spreadsheet'), the location ('in the user's Drive'), and the optional data filling capability. It distinguishes itself from sibling sheet tools (append, update, read) by focusing on creation, and it provides concrete examples (swipefile, ad list, performance report) that make the purpose immediately 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?
The description provides clear context on when to use this tool (creating a new spreadsheet, optionally populating it) and even gives example use cases. It does not explicitly name alternatives or state when-not-to-use, but the distinction between creating vs appending/updating is implicit and clear. The connection requirement is also stated, which is a useful precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_whatsapp_templateCreate a WhatsApp message templateAInspect
Submit a new WhatsApp message template for Meta’s review. This is the ONLY way a business can start a WhatsApp conversation: outside the 24-hour window that opens when a customer messages first, WhatsApp accepts approved templates and nothing else. CATEGORY IS NOT COSMETIC — MARKETING (anything promotional), UTILITY (a transactional follow-up to something the customer did) or AUTHENTICATION (a one-time passcode) decides both what Meta charges for the conversation and the policy the content is reviewed against, and Meta RE-CATEGORISES a template whose content does not match the claim; the reply reports the category Meta actually assigned, not the one requested. The name is lowercase letters, digits and underscores only. Language is never defaulted: en and en_US are different templates to Meta. Submitting does NOT make it sendable — it comes back PENDING and has to be re-read with list_whatsapp_templates. CAROUSEL TEMPLATES ARE SUPPORTED: add a “CAROUSEL” component whose “cards” array holds 2–10 cards, each card carrying its own HEADER (format IMAGE or VIDEO for a media carousel, PRODUCT for a catalog one), an optional card BODY of at most 160 characters — a different and far shorter limit than the message bubble’s 1024 — and up to 2 buttons. Meta requires every card to carry THE SAME components, and if any card has body text then all of them must. At creation a card is only its “components” array; “card_index” belongs to the send payload, not to this one. A MEDIA HEADER NEEDS AN UPLOADED ASSET: any IMAGE, VIDEO or DOCUMENT header — including every card header in a media carousel — must carry example: { header_handle: [ … ] } holding a handle from Meta’s Resumable Upload API, or Meta refuses the whole template with a bare “Invalid parameter”. Hermoso does not upload template media yet, so it refuses that locally and by name instead. A TEXT header needs no handle, and a PRODUCT card carousel takes its pictures from a connected catalog. 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | lowercase letters, digits and underscores only, e.g. "order_shipped" (max 512) | |
| wabaId | Yes | the WhatsApp Business Account id, from list_whatsapp_accounts | |
| category | Yes | MARKETING = promotional, UTILITY = transactional follow-up, AUTHENTICATION = one-time passcode. It sets the price and the review policy. | |
| language | Yes | the language code, e.g. en_US, es_MX, pt_BR — Meta treats each as its own template | |
| components | Yes | Meta’s component array. A BODY is the only REQUIRED one: [{ type: "BODY", text: "Your order {{1}} has shipped." }]. Optional HEADER (text max 60), FOOTER (max 60) and BUTTONS (up to 10 in total). Body text max 1024. A carousel is { type: “CAROUSEL”, cards: [{ components: [{ type: “HEADER”, format: “IMAGE” }, { type: “BODY”, text: … }] }, …] } — 2–10 cards, all with the same components, card body max 160, up to 2 buttons each. | |
| parameterFormat | No | POSITIONAL (default, {{1}}) or NAMED |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations by disclosing that Meta re-categorises templates, that submission does not make a template sendable, that language variants are distinct, that media headers require an uploaded handle or the tool refuses locally, and that carousel cards must share identical components. These are non-obvious behavioural facts that materially affect how an agent should use the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every sentence carries operational weight and the most important facts are front-loaded. It is structured by topic: purpose, category consequences, naming/language, post-submission state, carousels, media handles, and cost. There is no filler; the density is justified by the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the rich schema, and the absence of an output schema, the description covers essentially everything an agent needs to know before calling it: required components, template lifecycle, category reclassification, media upload limitations, carousel constraints, and the need to later read the template via list_whatsapp_templates. It even discloses the credit cost.
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?
Although the schema already covers 100% of parameters, the description adds substantial meaning the schema alone does not convey: category affects price and review policy, name constraints are reinforced, language is never defaulted, and the components parameter gets deep carousel and media-handle semantics. It explains the 160-character card body limit, the 1024-character bubble limit, and the difference between card_index and components, which are essential for correct invocation.
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 opens with a specific verb and resource: "Submit a new WhatsApp message template for Meta's review." It immediately distinguishes this from sending messages, listing templates, or deleting templates by explaining this is the only way to initiate a WhatsApp conversation outside the 24-hour window. The scope is unmistakable.
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 clearly states when this tool is needed: to start a WhatsApp conversation outside the 24-hour customer-initiated window. It also gives explicit follow-up guidance, saying the template returns PENDING and must be re-read with list_whatsapp_templates. However, it never explicitly names send_whatsapp_message as the alternative for actually sending an approved template, so the when-not-to-use guidance is mostly implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_bluesky_postDelete a post from the connected Bluesky accountADestructiveIdempotentInspect
PERMANENTLY delete one of the connected Bluesky account's OWN posts. IRREVERSIBLE — the AT Protocol removes the record from the account's repo, there is no trash and no undelete, and the post's likes, reposts, replies and quotes go with it. Call it WITHOUT confirm first: nothing is deleted, and it reports the post's REAL text and its live like / repost / reply / quote counts read back from Bluesky. Show the user that, get an unambiguous yes, then call again with confirm:true — plus, once the post has ANY engagement, confirmText echoing the post's own text (the first 40 characters is enough; any longer leading run works too). confirmText exists because confirming that you meant to delete SOMETHING does not prove you aimed at the right post, and a wrong id must not be confirmable blind. A brand-new post with nothing on it stays a ONE-call delete. Identify the post by its AT-URI or by just its RECORD KEY — the short id at the end of its bsky.app link, e.g. 3mtc4n3fibn2x. Deleting only ever works on the connected account's own posts; another account's URI is refused. 0 credits. Needs Bluesky connected (Settings ▸ Connectors ▸ Bluesky).
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | the post's AT-URI (at://did:plc:…/app.bsky.feed.post/…) as post_to_bluesky returned it, or just its record key (3mtc4n3fibn2x) | |
| confirm | No | REQUIRED true — deletion is permanent and cannot be undone | |
| confirmText | No | the post's own text as the unconfirmed call reported it — the first 40 characters is enough. Required once the post has any likes, reposts, replies or quotes. A post with no text asks for its cid instead. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations by disclosing irreversibility (no trash, no undelete), deletion of associated engagement, the two-phase confirmation to prevent blind deletion, and the requirement that it only works on own posts. It also notes 0 credits and the connection prerequisite. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence contributes critical guidance. It opens with the core action and irreversibility, then logically proceeds through the two-call workflow, identification methods, and constraints. The structure is front-loaded and well organized, avoiding redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary context: the destructive and irreversible nature, the safety mechanism to prevent wrong deletions, identification options, prerequisites (own post, connection), and behavioral details (credits, engagement loss). For a destructive tool, this is exceptionally 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?
Although the schema already describes all three parameters, the description adds significant semantic value by explaining the interplay: confirm must be true, confirmText is required once the post has engagement and must echo the post's text (first 40 chars), and uri can be either an AT-URI or record key. This clarifies relationships not evident 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 clearly states the tool permanently deletes a Bluesky post from the connected account's own posts. It specifies the resource (post), the action (delete), and the scope (own posts), distinguishing it from other delete tools for different platforms.
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 explicit step-by-step instructions: call without confirm first, show the user the post's text and engagement counts, get unambiguous yes, then call with confirm:true. It also specifies when confirmText is required and how to identify the post (AT-URI or record key), covering edge cases like no-text posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_brandDelete a brand workspaceADestructiveIdempotentInspect
PERMANENTLY delete a brand workspace and EVERYTHING in it — brand profile, memory, swipefile, Library creations, generated assets, avatars, skills, playbooks, chats — and disconnect its connected accounts. Irreversible, and it applies to everyone the workspace is shared with. Call it WITHOUT confirm first: it reports exactly what that workspace holds. Show the user that inventory verbatim, get an unambiguous yes, then call again with confirm:true — plus, if the workspace is not empty, confirmName set to its exact name and confirmConnectors set to the number of connected accounts it reported. Those two exist because confirming INTENT does not prove you picked the right WORKSPACE, and a wrong target is how a live brand was destroyed. The account's FIRST/anchor brand cannot be deleted this way (it holds the workspace's root storage) — that one is replaced from the app.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | brand id or exact name from list_brands | |
| confirm | No | REQUIRED true — this destroys the whole workspace and cannot be undone | |
| confirmName | No | the workspace's EXACT name, required when it is not empty — copy it from the inventory this tool returned, after the user has agreed to it | |
| confirmConnectors | No | the number of connected accounts the inventory reported, required when there is at least one — the user must specifically agree to losing them, because reconnecting each needs a browser and no agent can do it |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description goes well beyond by detailing irreversibility, shared-workspace impact, and the exact safety mechanism behind confirmName and confirmConnectors. It also explains why the first brand cannot be deleted (root storage). This is substantive behavioral context the annotations do not provide.
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?
Though longer than typical, every sentence carries purpose. The safety warning is front-loaded, the workflow is sequential, and the rationale for the confirm fields is included without fluff. It avoids redundancy and is well-organized for an agent to parse under time pressure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive nature and absence of an output schema, the description fully explains the tool's contract: what it destroys, the inventory returned on the first call, the required confirmations, and the edge case of the first brand. The agent has all necessary information to invoke it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds critical semantics: it explains the dual-call pattern (first call without confirm, second with confirm:true), the conditional requirements for confirmName (when not empty) and confirmConnectors (when at least one connected account), and the rationale that confirming intent does not prove correct workspace. This transforms the parameters from bare fields into a guarded workflow.
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 precise verb ('PERMANENTLY delete') and a specific, scoped resource ('a brand workspace and EVERYTHING in it') with an exhaustive list of what's included (brand profile, memory, swipefile, generated assets, etc.). It clearly distinguishes from sibling delete tools (delete_playbook, delete_creator) by naming the full workspace scope, so the agent can immediately route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit two-phase workflow: call WITHOUT confirm first to get inventory, show it verbatim, get unambiguous yes, then call again with confirm:true and the required confirmation fields. It also states the exclusion for the account's FIRST/anchor brand, which is a critical condition. This is model usage guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_creatorDelete a creatorADestructiveIdempotentInspect
Remove a saved creator from this workspace’s cast by id (from list_creators). Records a cross-device delete so they don’t reappear on the user’s other devices. It only drops the roster entry — ads already rendered with that person are untouched — and the same portrait can be saved again with save_creator, so no confirm is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the creator id (from list_creators) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent hints. The description adds valuable behavior beyond that: it records a cross-device delete to prevent reappearance, clarifies that ads are untouched, and mentions reversibility via save_creator. These details go beyond the structured annotations and help the agent understand side effects. It does not cover auth or error handling, but it is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The main action is front-loaded in the first sentence, and each subsequent sentence adds distinct value: cross-device behavior, scoping to roster-only, and reversibility. It is concise, well-organized, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with annotations covering destructive and idempotent behavior, the description gives everything needed: how to get the id, what it does, side effects, and reversibility. It also disambiguates from save_creator. There is no output schema, but the operation is straightforward. The description is complete 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?
The schema has one parameter (id) with a description 'the creator id (from list_creators)', providing 100% schema coverage. The description reinforces this by saying 'by id (from list_creators)' but adds no new semantic meaning beyond what the schema already provides. Baseline for 100% coverage is 3, and the description does not exceed 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 clearly states a specific verb ('Remove'), a precise resource ('a saved creator from this workspace's cast'), and the method ('by id'). It explicitly references list_creators as the source of the id, distinguishing it from sibling delete operations like delete_skill or delete_brand. There is no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is used to remove a creator from the workspace cast, with the id sourced from list_creators. It explains that the delete is not permanent ('can be saved again with save_creator') and that ads are unaffected, which guides usage. However, it does not explicitly mention when not to use it (e.g., vs. other delete tools), but given the clear purpose, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_drive_fileDelete a Drive fileADestructiveIdempotentInspect
Delete a Drive file. By default it goes to Trash (recoverable); pass permanent:true to delete it forever. Pass fileId (from list_drive_files) + confirm:true. Irreversible when permanent — confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | the Drive file id | |
| confirm | No | REQUIRED true | |
| permanent | No | true = delete forever; default trashes (recoverable) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint:true and idempotentHint:true, but the description adds critical behavioral context: default sends to Trash (recoverable), permanent:true deletes forever, and irreversibility warning. It also specifies the confirmation requirement, enriching the safety picture beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action and default behavior are front-loaded, followed by required parameters and a caution. Every word contributes value; the structure is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema, the description covers all essential aspects: behavior (trash vs permanent), required confirm flag, source of fileId, and user-confirmation guidance. It leaves no critical gaps for an agent to execute 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 already documents all three parameters with 100% coverage, so baseline is 3. The description adds meaningful context: fileId comes from list_drive_files, confirm must be true, and permanent overrides the default trash behavior. This goes beyond the raw schema definitions, though it partly echoes schema text.
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: 'Delete a Drive file.' It distinguishes from siblings like update_drive_file, get_drive_file, and save_to_drive by specifying the action and the source of the identifier (list_drive_files). The purpose is unambiguous and differentiated.
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 clear operational guidance: how to obtain fileId (from list_drive_files) and the requirement of confirm:true. It also advises caution for permanent deletion and instructs to confirm with the user. However, it does not explicitly mention alternatives or when not to use this tool (e.g., for OneDrive or other storage), though the Drive-specific scope is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_google_business_postDelete a Google Business Profile PostADestructiveIdempotentInspect
Remove a Post from the brand’s Google Business Profile listing. This takes it off Google Search and Maps immediately and CANNOT be undone — confirm with the user first. Pass the full post name from list_google_business_posts. Needs Google Business Profile connected.
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | the full post name from list_google_business_posts (accounts/…/locations/…/localPosts/…) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive (destructiveHint: true) and not read-only (readOnlyHint: false). The description adds valuable behavioral detail: the deletion takes effect 'immediately' and 'CANNOT be undone,' plus a warning to confirm with the user first. It also communicates the prerequisite of a connected Google Business Profile. This goes beyond the annotations and gives the agent a realistic sense of impact and step-before-calling. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short, information-dense sentences, each earning its place: purpose, effect/warning, parameter source, and prerequisite. It is front-loaded with the core action, and there is no fluff or redundancy. Every sentence conveys necessary information for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the description covers everything an agent needs: what it does, irreversible effect, confirmation requirement, how to obtain the parameter value, and a connectivity prerequisite. The annotations handle the safety profile, and the description fills in usage specifics. Nothing essential is missing for correct and safe 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?
The input schema has 100% coverage with a clear description for postId: 'the full post name from list_google_business_posts (accounts/…/locations/…/localPosts/…)'. The tool description merely repeats this instruction ('Pass the full post name from list_google_business_posts'), adding no new meaning beyond the schema. Per the rubric, with high schema coverage the baseline is 3, and the description does not elevate it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb and resource: 'Remove a Post from the brand’s Google Business Profile listing.' It distinguishes this deletion tool from related siblings like post_to_google_business (creation) and list_google_business_posts (listing) by explicitly stating the action and the effect on Search and Maps. There is no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical usage guidance: it instructs to confirm with the user first (implying a destructive call), to pass the full post name from list_google_business_posts (a prerequisite step), and notes that a Google Business Profile connection is required. It does not explicitly name alternatives, but the context implies the tool is used after listing posts and before deleting. This is clear enough for an agent to know when to invoke it, though it could be stronger by explicitly contrasting with non-destructive alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_meta_catalogDelete a Meta product catalogADestructiveInspect
PERMANENTLY delete a product catalog. Meta does not let a catalog be removed from a business portfolio and then restored, and it cannot be transferred to another portfolio — there is no archive and no undo, and its product sets go with it, so any ad set still bound to one of those sets keeps spending and stops having products to show. Confirming is therefore not enough on a catalog that holds anything: pass confirm:true PLUS confirmName set to the catalog’s exact name (and confirmChildren when asked), which proves you inspected the catalog you are aiming at rather than merely meaning to delete something. An EMPTY catalog stays a one-call delete. Call meta_catalog_blast_radius first to get those numbers and to show the user what they are agreeing to. The result is the READ-BACK, never Meta’s acknowledgement — if the catalog still resolves afterwards you are told it is NOT confirmed. Free, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | true once the user has seen exactly what this destroys and said yes | |
| catalogId | Yes | numeric catalog id from list_meta_catalogs | |
| confirmName | No | the catalog’s exact name, echoed back — required for any catalog that holds products or sets | |
| confirmChildren | No | the total number of products + product sets it holds, echoed back | |
| allowDeleteWithLiveProductSet | No | Meta BLOCKS the delete by default when a product set is live. Setting this forces it through, which changes what a campaign that is spending RIGHT NOW shows. Never set it without saying so. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description goes far beyond: it states there is no archive or undo, that product sets are deleted with the catalog, that live ad sets will keep spending with no products, and that the result is a read-back rather than an acknowledgement. This fully discloses the irreversible consequences and the check-on-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence contributes critical information. It front-loads the destructive nature, then systematically explains prerequisites, the confirmation dance, and the response semantics. No fluff, though slightly verbose — a tighter arrangement might earn a 5, but the density justifies a 4.
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, the description is complete: it explains the return value, the need for blast radius, the confirmation rules, and the special case of live product sets. An agent has everything needed to call this safely and 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?
The schema provides descriptions for all 5 parameters with 100% coverage, so the baseline is 3. The description adds meaningful context beyond the schema: it explains when confirmName is required, what confirmChildren represents, and the danger of allowDeleteWithLiveProductSet. This elevates parameter understanding without redundancy.
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 opens with 'PERMANENTLY delete a product catalog' — a specific verb and resource — and goes on to distinguish itself from related tools like update_meta_catalog and list_meta_catalogs. It also references meta_catalog_blast_radius as a complementary tool, making the purpose unmistakable.
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 explicit when-to-use and when-not-to-use guidance: 'Call meta_catalog_blast_radius first' and clarifies that an empty catalog is a one-call delete while a non-empty one requires confirmName. It also names the alternative tool (meta_catalog_blast_radius) for assessment, leaving no ambiguity about sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_onedrive_fileDelete a OneDrive fileADestructiveIdempotentInspect
Delete a OneDrive item — it moves to the OneDrive recycle bin (recoverable there). Pass fileId (from list_onedrive_files) + confirm:true. Confirm the exact file with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | the OneDrive item id | |
| confirm | No | REQUIRED true |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint and idempotentHint, but the description adds meaningful context beyond them: the deleted item goes to the recycle bin and is recoverable. It also stresses the need for user confirmation, which is not conveyed by annotations. This extra behavioral detail justifies a 4, not just baseline 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences that pack essential information: purpose, consequence, prerequisite, and safety instruction. No fluff or redundancy; it is front-loaded with the primary action. It achieves maximum brevity without omitting critical details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete tool with rich annotations (destructive, idempotent) and no output schema, the description covers all relevant aspects: what it does, the effect (recycle bin), how to get the ID, and the required confirmation step. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters with descriptions (100% coverage), so baseline is 3. The description adds value beyond the schema by specifying that fileId should come from list_onedrive_files and that confirm must be true, clarifying the intended source and mandatory value. This enhancement warrants a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a OneDrive item') and specifies it pertains to OneDrive, distinguishing it from sibling delete tools for other platforms (e.g., delete_drive_file, delete_bluesky_post). It also adds a key consequence (moves to recycle bin) that aids unambiguous 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?
It provides explicit usage steps: obtain fileId from list_onedrive_files, pass confirm:true, and confirm the exact file with the user. While it doesn't name alternatives, the OneDrive-specific resource and prerequisites clearly guide when to use it. It lacks explicit when-not guidance, so a 4 is appropriate rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pinterest_boardDelete a Pinterest boardADestructiveIdempotentInspect
PERMANENTLY delete a board AND EVERY PIN ON IT. This is the heaviest thing that can be done to a Pinterest account and there is no undelete. Call it WITHOUT confirm first: nothing is deleted, and it answers with the board’s real name, how many Pins are on it, how many people FOLLOW it and how many collaborators lose access — all read back from Pinterest. Show the user that, then call again with confirm:true plus confirmName (its exact name) and confirmChildren (the Pin count it reported); those echoes exist because a caller who has not looked at the board cannot supply them, and confirming intent alone does not prove aim. IF THEY ONLY WANT IT OUT OF PUBLIC VIEW: do NOT reach for update_pinterest_board(privacy:"SECRET") — making a board secret is a SEPARATE Pinterest permission (boards:write_secret) that Hermoso does not request, so that call is refused for every user and steering someone onto it turns a survivable delete into a dead end. The reversible option lives in Pinterest’s own app. The unconfirmed refusal says which of the two applies to this connection, read off the live scope set — relay it verbatim rather than guessing. 0 credits. Needs Pinterest connected.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | numeric board id from list_pinterest_boards | |
| confirm | No | REQUIRED true — the board and its Pins are gone for good | |
| confirmName | No | the board’s EXACT name as the unconfirmed call reported it | |
| confirmChildren | No | the number of Pins the unconfirmed call reported on the board |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint: true, readOnlyHint: false, idempotentHint: true), the description discloses the non-destructive first call, the refusal behavior when permissions are lacking, the exact information the unconfirmed call returns, and the fact that the board, pins, followers, and collaborators are all affected. It also notes credits are 0 and a Pinterest connection is required, fully conveying the behavioral consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence adds critical information for a high-stakes destructive operation. It leads with the most important warning (permanent deletion) and then lays out the mandatory two-step process. The structure is logical and front-loaded; there is no filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and irreversible nature, the description covers all necessary context: the confirmation flow, the permission limitation that makes update_pinterest_board a dead end, the exact data returned by the unconfirmed call, the credit cost, and the connection requirement. It leaves no gap for an agent to misuse the 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?
Even though the schema has 100% coverage, the description adds deep meaning: it explains that confirmName must match the exact reported name, confirmChildren must match the reported pin count, and why these echoes exist (proving the caller actually looked at the board). It also explains that the unconfirmed call returns the real name and pin count, making the parameters' purpose and validation logic clear beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb (delete), resource (a Pinterest board), and the consequential scope (every pin on it is permanently deleted). It distinguishes itself from the sibling update_pinterest_board by explicitly warning not to use that tool for hiding the board, making it unmistakable which tool does what.
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 an explicit two-step protocol: first call without confirm to retrieve the board's name, pin count, followers, and collaborators; then call with confirm:true, confirmName, and confirmChildren after showing the user. It also steers away from a broken alternative (update_pinterest_board with privacy SECRET) and explains the dead end, giving clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pinterest_pinDelete a PinADestructiveIdempotentInspect
PERMANENTLY delete a Pin. Pinterest has no undelete and no archive for one. Call it WITHOUT confirm first: nothing is deleted, and it answers with the Pin’s real title, its lifetime saves and impressions, and whether it HAS BEEN PROMOTED in an ad — all read back from Pinterest. Show the user that, get an unambiguous yes, then call again with confirm:true plus confirmName (its exact title) once it has saves or has been promoted, because confirming that you meant to delete SOMETHING does not prove you aimed at the right Pin. DELETING A PIN THAT AN AD PROMOTES pulls the creative out from under that ad, so check the promoted flag before agreeing. The verdict is read back from Pinterest, never taken from its 2xx. 0 credits. Needs Pinterest connected.
| Name | Required | Description | Default |
|---|---|---|---|
| pinId | Yes | numeric Pin id from list_pinterest_pins | |
| confirm | No | REQUIRED true — deletion is permanent | |
| confirmName | No | the Pin’s EXACT title as the unconfirmed call reported it — required once it has saves or has been promoted |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark destructiveHint=true but the description goes far beyond: it states 'Pinterest has no undelete and no archive', explains the first call is a dry run that returns real data, notes that the verdict is read from Pinterest and never taken from its 2xx, and details the impact on promoted ads. It also discloses the 'Needs Pinterest connected' prerequisite. This is rich behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but every sentence serves a purpose — no fluff. It front-loads the permanent nature and then logically walks through the workflow. It could be more skimmable with bullet points, but it's still efficient and well-organized for the critical safety information it must convey.
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, two-step confirmation tool with no output schema, the description is complete: it covers the safe initial call, what to expect from the response, the promoted-ad risk, the exact confirmation requirements, and the verification source. An agent has everything needed to call this correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds real meaning: it explains pinId comes from list_pinterest_pins, that confirm is 'REQUIRED true' for permanent deletion, and that confirmName is 'required once it has saves or has been promoted'. This clarifies conditional requirements and provenance that the schema alone doesn't convey.
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 opens with 'PERMANENTLY delete a Pin' — a specific verb and resource that immediately distinguishes this from sibling delete tools (e.g., delete_pinterest_board, delete_drive_file). It also clarifies the scope (Pin) and the permanent nature, leaving no ambiguity about what the tool does.
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 an explicit two-call workflow: first call without confirm to retrieve info, get user confirmation, then call with confirm:true and confirmName. It explains why this is needed (confirming deletion of SOMETHING doesn't prove the right Pin) and warns about promoted ads. This is direct, unambiguous usage guidance that an agent can follow step-by-step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_playbookDelete a playbookADestructiveIdempotentInspect
Delete a saved playbook by id (from list_playbooks). Records a cross-device delete so it does not come back on the next sync. Minor + re-creatable, so no confirm needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the playbook id (from list_playbooks) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint and idempotentHint. The description adds valuable context: it records a cross-device delete to prevent resurrection on sync, and explains the no-confirm rationale, going beyond annotation defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the action, and every phrase earns its place—no filler or redundancy.
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 delete, the description covers the action, id source, and behavioral nuances (sync, confirmation). It omits error handling, but that is not essential given the tool's simplicity and existing annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the id parameter (100% coverage) with the same wording ('from list_playbooks'). The description reiterates that, adding no new semantics. Baseline 3 applies because the schema handles the documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'playbook' with the id sourced from list_playbooks. This precisely distinguishes it from other delete tools, which target different resources.
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 specifies the id must come from list_playbooks, implying a prerequisite for use. It also explains why no confirmation is needed (minor and re-creatable), but does not explicitly state when not to use the tool or name alternatives, so a slight gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reddit_postDelete a Reddit postADestructiveIdempotentInspect
PERMANENTLY delete one of the connected account’s Reddit posts. Reddit has no undelete. Call it WITHOUT confirm first: nothing is deleted, and it answers with the post’s real title, subreddit, score and comment count read back from Reddit. Show the user that, get an unambiguous yes, then call again with confirm:true — plus confirmName (its exact title) once it has comments or a real score, because confirming that you meant to delete SOMETHING does not prove you aimed at the right post. TELL THE USER THIS BEFORE THEY AGREE: deleting a Reddit post does NOT delete the comments under it — Reddit keeps the thread and shows the post as [deleted], so the conversation stays public with only their side removed. Reddit’s delete endpoint returns an empty success for every call, including one aimed at a post the account did not write, so the verdict here comes from re-reading the post afterwards and never from that response. 0 credits. Needs Reddit connected.
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | the post id, its t3_… fullname, or the permalink | |
| confirm | No | REQUIRED true — deletion is permanent | |
| confirmName | No | the post’s EXACT title as the unconfirmed call reported it — required once it has comments or a real score |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true, idempotentHint=true), the description explains critical behaviors: that Reddit returns an empty success for all calls (making verification necessary by re-reading), that comments are not deleted, that no undelete exists, and that credits are consumed. This far exceeds what annotations alone convey.
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 long but each sentence carries essential safety information for a destructive operation. It is front-loaded with the permanence warning and does not waste words. It sacrifices brevity for completeness, which is appropriate given the irreversible nature.
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?
All necessary context is provided: the destructive nature, the confirmation flow, the conditional confirmName, the empty-response trap, the comment behavior, credit cost, and connection requirement. There is no output schema, so the description fully compensates. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining when confirm is required (always true) and the conditional need for confirmName ('once it has comments or a real score'). It also clarifies that postId accepts the fullname or permalink, though that is already in the schema. The added nuance for confirmName justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('PERMANENTLY delete') and resource ('one of the connected account’s Reddit posts'), and explicitly notes the permanence. It clearly distinguishes from siblings like edit_reddit_post or post_to_reddit by focusing on deletion and the confirmation workflow.
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 an explicit two-step protocol: call without confirm to preview, then call with confirm:true after user consent, plus a conditional requirement for confirmName. It also instructs the agent to warn the user about comments remaining and the need for an unambiguous yes. This is concrete, actionable guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_skillDelete a custom skillADestructiveIdempotentInspect
Delete one of the workspace’s CUSTOM skills by id (from list_skills). Built-in skills/recipes can’t be deleted. Minor + re-creatable, so no confirm needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the custom skill id (from list_skills) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint=true and idempotentHint=true. The description adds the context that this is a 'Minor + re-creatable' operation, so no confirmation is needed, and clarifies the constraint that built-in skills are excluded. This goes beyond the annotations by explaining the low risk and reversibility, which helps an agent decide when to invoke without confirmations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The primary action and constraint are front-loaded in the first sentence, and the risk/re-confirmation note is efficiently placed in the second. Every clause contributes meaningful information—no fluff or redundancy.
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 delete operation with a single required parameter and no output schema, the description is fully adequate. It tells the agent what id to use, what can't be deleted, and the low risk level (no confirm needed). The inclusion of 're-creatable' addresses concerns about destructiveness. No essential information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'id', and its description already states 'the custom skill id (from list_skills)'. The tool description essentially repeats this information without adding new semantic details (e.g., format, constraints, or examples). Thus, the description adds no value beyond the schema, so it sits at 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 action ('Delete'), a specific resource (workspace's CUSTOM skills), and clarifies that built-in skills/recipes cannot be deleted. It also references the source of the id (from list_skills), which distinguishes this from other delete_* siblings. This 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?
The description explicitly limits usage to custom skills and notes that built-in skills/recipes can't be deleted, providing a clear condition. It also directs the agent to list_skills to obtain the id. However, it doesn't explicitly name alternative tools or say 'do not use for built-in skills' in a direct command, though the implication is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_telegram_messageDelete a Telegram messageADestructiveIdempotentInspect
PERMANENTLY delete one message the bot posted to a Telegram chat. Call it WITHOUT confirm first: nothing is deleted and you get a sentence to show the user. There is deliberately NO preview of the message — the Bot API has no method that reads one message back, so anything shown would be invented, and for the same reason the result after deleting is Telegram’s own success answer rather than a verified read-back. TWO VENDOR LIMITS, both Telegram’s and neither ours: "A message can only be deleted if it was sent less than 48 hours ago", and in a CHANNEL the bot needs the Post Messages right to remove even its own posts. Takes the same chatId as post_to_telegram plus the messageId post_to_telegram returned. 0 credits. Needs Telegram connected (Settings ▸ Connectors ▸ Telegram).
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | the chat the message is in — the same @username or numeric id it was posted with | |
| confirm | No | REQUIRED true — Telegram has no trash and no undelete | |
| messageId | Yes | the message id post_to_telegram returned (also the number at the end of a t.me link) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantial detail: the two-step confirm flow, the intentional lack of preview due to Bot API limitations, the return behavior (Telegram's success answer rather than a read-back), and two vendor limits (48-hour window and channel permissions). It also notes 0 credits and connection requirement. This is far beyond annotations and transparent about what happens.
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 longer than typical, but every sentence carries essential information for a destructive tool with unique quirks. It front-loads the core action, then explains the confirm flow, preview limitations, vendor limits, and parameter mapping. It is dense but justified—not fluff. A minor trim could improve it, but it's well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, side-effecting operation with no output schema, the description covers all necessary context: the confirm step, why no preview, return behavior, vendor limits, connection prerequisite, and how to obtain parameters. An agent has everything needed to call it correctly and manage user expectations. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baselines at 3. The description adds meaningful cross-references: chatId 'same as post_to_telegram', messageId 'the message id post_to_telegram returned', and clarifies the confirm parameter's role ('Call it WITHOUT confirm first') even though confirm is not in the required list in schema. This adds value beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action: 'PERMANENTLY delete one message the bot posted to a Telegram chat.' This is specific (verb+resource+scope) and clearly distinguishes it from other delete tools like delete_reddit_post or delete_thread, which target different resources. It also mentions the bot-only scope, avoiding ambiguity with human messages.
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 usage context: it must be called without confirm first to get a user-facing sentence, and requires the chatId/messageId from post_to_telegram. It implicitly distinguishes from alternatives by focusing on bot-posted Telegram messages and references vendor limits. However, it doesn't explicitly say 'use this instead of X' or list exclusions, but the context is sufficient for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_threadDelete a Threads postADestructiveIdempotentInspect
PERMANENTLY delete one of the brand’s Threads posts. IRREVERSIBLE — Threads has no undelete. Call it WITHOUT confirm first: nothing is deleted, and it answers with the post’s real text plus its views, likes, replies and reposts read back from Threads. Show the user that, get an unambiguous yes, then call again with confirm:true — plus confirmName (the post’s exact text as it was reported) once anyone has engaged with it. confirmName exists because confirming that you meant to delete SOMETHING does not prove you aimed at the right post, and a wrong id must not be confirmable blind. Threads allows only 100 deletions per account per rolling 24 hours; threads_publishing_limit says how many are left, and a quota refusal otherwise reads like a broken connection. Note Meta documents nothing about what a delete does to the replies underneath a post, so do not promise the conversation survives. 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | post id from list_threads_posts | |
| confirm | No | REQUIRED true — deletion is permanent; only set it after the user has explicitly agreed | |
| confirmName | No | the post’s exact text as the unconfirmed call reported it — required once it has any likes, replies or reposts |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds crucial context: the irreversibility, the confirmation flow, the quota refusal misinterpretation, and the lack of documentation about reply deletion. It even notes the preview outputs the post's metrics. This rich behavioral disclosure goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every sentence carries critical information for a destructive, confirmation-critical tool. It front-loads the irreversible nature and explains the preview-then-confirm flow efficiently. While not terse, the length is warranted by the complexity, and 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?
The description is fully complete for this tool: it explains the calling convention, the confirmName condition, the quota limit and how to check it, the preview output, the caveat about replies, and even the credit cost. There is no output schema, but the description conveys what the response contains. No essential operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a clear description. The description adds extra meaning by explaining the rationale behind confirmName (preventing blind deletion of wrong posts) and clarifying that postId comes from list_threads_posts. It also clarifies confirm's strict requirement. This adds value beyond the schema, though the schema already covers the basics, so a 4 is justified.
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 precisely that the tool permanently deletes a Threads post, naming the resource and the destructive action. It clearly differentiates from sibling tools like delete_x_post or delete_bluesky_post by specifying 'Threads'. The purpose is unambiguous and action-oriented.
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 an explicit two-step workflow: call without confirm to preview, then with confirm:true after explicit user consent. It also specifies when confirmName is required and warns about the 100-deletion daily quota, referencing threads_publishing_limit. This is exceptional guidance that leaves no ambiguity about when and how to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tiktok_post_ad_authorizationDelete a post’s Spark-Ads authorization codeADestructiveIdempotentInspect
Delete the Spark-Ads authorization code for a post the authorized account owns. CONFIRM-GATED, and not because it spends: ads already built on the post keep running, but no NEW ad can be built against it until a fresh code exists, and TikTok REFUSES this outright while any campaign or ad using the post is still ACTIVE — pause those first. Calling it without confirm changes nothing and returns the sentence describing exactly what would happen. THE READ-BACK INVERTS: proof of success is that TikTok no longer reports a code for the post, and a code that is still there is reported as not confirmed rather than done. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status).
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | the TikTok post id | |
| confirm | No | REQUIRED true — call without it first to see exactly what would change |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint true and idempotentHint true, but the description goes far beyond: it explains that ads already built keep running, no new ads can be built until a fresh code exists, TikTok outright refuses while any campaign/ad is active, calling without confirm changes nothing and returns a descriptive sentence, and the read-back inversion (proof of success is absence of code; leftover code is reported as 'not confirmed'). This is rich behavioral context that fully complements the annotations without contradicting them.
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 long but every sentence carries essential information: confirm gating, impact on existing ads, the active-ad refusal, the no-op behavior, the read-back inversion, and the auth requirement. It is front-loaded with the purpose and then details consequences. While dense, it is not padded; the length is justified by the tool's complexity.
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, confirm-gated operation with external dependencies, the description covers the essential context: the confirm requirement, the active-ad precondition, the no-op behavior, the auth requirement (referencing tiktok_account_status), and the read-back inversion. There is no output schema, but the read-back inversion clarifies what to expect. Nothing an agent needs to call this correctly 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 coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the confirm parameter's behavior: it is required true, calling without it is a no-op that returns a descriptive sentence, and it must be true to actually delete. The itemId is self-explanatory but the confirm semantics are significantly clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear specific verb and resource: 'Delete the Spark-Ads authorization code for a post the authorized account owns.' This precisely identifies the operation and scope, and the name itself distinguishes it from the get/set/extend siblings. There is no ambiguity about what the tool does.
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 concrete usage guidance: it explains the confirm-gating protocol (call without confirm first to see the effect), the prerequisite that active campaigns/ads must be paused first (TikTok refuses otherwise), and the read-back inversion for interpreting results. It does not explicitly name the set_tiktok_post_ad_authorization alternative, but the context makes it obvious and the guidance is strong overall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_whatsapp_templateDelete a WhatsApp message templateADestructiveInspect
PERMANENTLY delete a WhatsApp message template. META DELETES EVERY LANGUAGE OF A NAME AT ONCE, which is a wider blast radius than most callers picture, so call it WITHOUT confirm first: nothing is deleted and it reports exactly how many templates and which languages would go. Then show the user that, get an unambiguous yes, and call again with confirm:true AND confirmName set to the template’s exact name — confirming that you meant to delete SOMETHING does not prove you aimed at the right template. Any message sent against a deleted template afterwards is refused. The answer is a RE-READ from Meta, never the 200: if the template still comes back it is reported as not deleted. 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | the template name (Meta matches it exactly) | |
| wabaId | Yes | the WhatsApp Business Account id | |
| confirm | No | REQUIRED true to actually delete — deletion is permanent and covers every language | |
| confirmName | No | the template’s exact name, echoed back — required alongside confirm |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds crucial behavioral details: the all-languages blast radius, the two-step confirm flow, the need for confirmName to avoid targeting the wrong template, and that the actual outcome is verified via a re-read rather than the 200 status. It also mentions the 0-credit cost. The description goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries essential information. It front-loads the permanent deletion and wide blast radius, then logically walks through the two-phase call, the confirmation requirement, and the verification step. No fluff; it earns its 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?
Given this is a destructive action with no output schema, the description covers all necessary context: what happens on deletion, how to scope it correctly, what happens if you delete incorrectly, and how to interpret the result (re-read instead of 200). It even notes the cost. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema covers all parameters (100% coverage), the description adds value for confirmName by clarising its purpose: it must be set to the template's exact name and is required alongside confirm. It explains that a generic yes is insufficient, preventing misuse. This is meaningful enhancement beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'PERMANENTLY delete a WhatsApp message template' — a specific verb and resource. It further distinguishes the behavior by noting 'META DELETES EVERY LANGUAGE OF A NAME AT ONCE', which is a unique scope detail. No sibling tool serves this exact function, so it stands alone clearly.
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 explicit step-by-step usage: call without confirm first to preview, get user approval, then call again with confirm:true and confirmName matching the exact name. It warns that a generic confirmation does not prove the right template was targeted. It also notes consequences (messages refused after deletion) and the verification re-read from Meta.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_x_postDelete a post on XADestructiveIdempotentInspect
Permanently delete one of the connected account’s posts on X. This CANNOT be undone — confirm the exact post with the user first. Costs credits (X bills per API call). Needs X connected.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the numeric X post id — the last part of the post URL |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint:true and idempotentHint:true, but the description adds crucial context: 'CANNOT be undone' and the need to confirm with the user. It also discloses that credits are charged. This goes beyond the annotations, providing operational details without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences—with the most critical warning (irreversibility and user confirmation) front-loaded. Every sentence earns its place, covering the key operational, cost, and prerequisite information without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter destructive tool with no output schema, this description is quite complete. It covers the action, irreversibility, confirmation need, credit cost, and connection prerequisite. It does not describe error handling or success responses, but that is minor given the simplicity and absence of an 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?
The schema description coverage is 100% and already explains that 'id' is the numeric post id from the URL. The tool description does not add further parameter-specific details, so the baseline of 3 applies; the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete') and resource ('one of the connected account’s posts on X'), clearly distinguishing it from sibling delete tools for other platforms (delete_bluesky_post, delete_reddit_post, etc.). It also clarifies the scope (connected account's own posts), leaving no ambiguity about what it operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to confirm the exact post with the user first due to irreversibility, and mentions the credit cost and prerequisite (needs X connected). This gives clear guidance on when and how to use the tool, including cautions before invoking it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_youtube_report_jobDelete a YouTube bulk reporting jobADestructiveInspect
Stop a YouTube bulk reporting job. IRREVERSIBLE IN A WAY THAT IS EASY TO MISS: the job IS the history — deleting it discards every daily CSV it has accumulated, and a replacement job starts over with only a 30-day backfill, so anything older than that is gone for good. Call WITHOUT confirm first: nothing is deleted and you get the real job read back from YouTube (its report type and when it was scheduled) to show the user. Then call again with confirm:true. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | from list_youtube_report_jobs | |
| confirm | No | true only after the user has seen the job and said yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint: true, but the description goes far beyond that by explaining the exact consequence: deleting the job discards every accumulated daily CSV, and a replacement job only backfills 30 days. It also clarifies the non-destructive first call returns real job data. No contradiction with annotations; this adds significant nuance.
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 bit longer than necessary but every sentence carries weight: purpose, irreversibility warning, confirm flow, and prerequisite. It is front-loaded with the core verb and then layered with essential details. No fluff, though 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?
Given the destructive nature and two-step confirm, the description covers all needed behavior: the consequence, the confirm sequence, what the first call returns, and the channel requirement. No output schema exists, but the description explains the response of the first call. An agent has everything to use 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 covers both parameters (jobId from list_youtube_report_jobs, confirm boolean). The description adds crucial semantics for confirm by explicitly describing the two-step usage, which is not fully captured in the schema. Since schema coverage is 100% and description provides extra context, a score above baseline is warranted.
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 opens with a clear verb+resource: 'Stop a YouTube bulk reporting job.' It distinguishes this from sibling delete tools (like delete_youtube_video) by naming the specific resource type (bulk reporting job) and later clarifies the job is the history, making the scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the two-step confirmation flow: call without confirm to retrieve job details, show the user, then call again with confirm:true. Also notes the required connected YouTube channel. This leaves no ambiguity about when and how to invoke the tool, and implicitly warns against using it without confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_youtube_videoDelete a video from the connected YouTube channelADestructiveIdempotentInspect
PERMANENTLY delete a video from the connected YouTube channel. IRREVERSIBLE — YouTube has no trash and no undelete, and the video's views, comments and every link or embed pointing at it go with it. Call it WITHOUT confirm first: nothing is deleted, and it reports the video's REAL title, privacy, view count and comment count read back from YouTube. Show the user that, get an unambiguous yes, then call again with confirm:true — plus, once the video is public or has any views or comments, confirmTitle set to its exact title. confirmTitle exists because confirming that you meant to delete SOMETHING does not prove you aimed at the right video, and a wrong id must not be confirmable blind. If the user only wants it out of public view, use update_youtube_video(privacy:"private") instead — that is reversible and this is not. Get the videoId from list_youtube_videos. 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | REQUIRED true — deletion is permanent and cannot be undone | |
| videoId | Yes | the YouTube video id (from list_youtube_videos) | |
| confirmTitle | No | the video's EXACT title as the unconfirmed call reported it — required once the video is public or has any views or comments |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations (which already note destructiveHint=true) by explaining that YouTube has no trash, that views/comments/links are lost, that the unconfirmed call returns real details, and why confirmTitle is required to prevent blind deletion of the wrong video. No contradiction with annotations; instead it enriches them significantly.
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?
Despite being long, the description is tightly structured: it opens with the core warning, then the confirmation workflow, alternative, source of ID, credits, and prerequisite. Every sentence serves a purpose—no fluff, and the most critical info (irreversibility) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with conditional parameters and a confirmation flow, the description covers everything an agent needs: the required two-step call, when confirmTitle is needed, the alternative for reversible privacy change, the source of videoId, and the account prerequisite. No information is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description still adds value for each parameter: confirm must be true, confirmTitle is required when the video is public or has views/comments, and videoId comes from list_youtube_videos. It also explains the rationale behind confirmTitle, which is not 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 uses a specific verb ('delete') and resource ('video from the connected YouTube channel') and distinguishes itself from the sibling update_youtube_video by noting the reversible privacy option. It states exactly what the tool does and what it does not do, making it 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?
Explicitly provides when to use this tool (permanent deletion) versus the reversible alternative update_youtube_video(privacy:'private'). It also details the two-step confirmation flow, instructing the agent to call without confirm first, show the user the real details, then call with confirm:true and a conditional confirmTitle. This is clear guidance for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_postsWhat to fix next, post by postARead-onlyInspect
WHAT TO FIX NEXT, post by post — and the tool that fixes it. post_performance tells you which hook is AHEAD; this tells you what is WRONG with a given post and where the next edit goes. Under-distributed is A HOOK PROBLEM (change the opening: mine_angles, then list_hooks, then plan_variations). Seen but not held is A RETENTION PROBLEM (plan_variations to rebuild the middle against the same hook). Seen, held, and still not converting is AN OFFER PROBLEM. FOUR REFUSALS, AND YOU SHOULD REPEAT THEM RATHER THAN PAPER OVER THEM: (1) a post younger than ~24h is TOO EARLY and is never called a failure — it has not had its run; (2) a metric the platform does not publish is UNMEASURED, never zero — Facebook has published no post reach since 2026-06-15, Reddit publishes no impressions, and Google Business publishes nothing per-post at all; (3) below 5 measured posts on a channel there is no baseline of the brand's own, and the ONLY fallback is a published short-video hook floor that is NOT our measured number and does not transfer off TikTok/Instagram/YouTube — it is attributed in the output and you should attribute it too; (4) it does not always find a problem, and 'nothing here needs fixing' is a real answer rather than a failure to look. Hermoso cannot see conversions for an organic post — no channel reports installs or purchases against a post id — so the offer rung runs ONLY when the user tells you they are not converting and you pass converting:false. Print summary verbatim. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many recent posts to diagnose (default 25, max 200). The baseline is always built from EVERY post recorded for the brand, never only these, so a bad month can never become its own definition of normal. | |
| channel | No | restrict to one channel: facebook, instagram, threads, x, linkedin, youtube, tiktok, reddit, pinterest | |
| converting | No | pass false ONLY when the user has told you these posts are getting seen and are not converting — it re-reads the ones that are earning their reach as an offer problem instead of a win. Omit when you do not know; we cannot measure it. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint/openWorldHint/destructiveHint, so the description carries the burden — and it delivers richly. It discloses the four refusal guardrails (too early, unmeasured, no baseline, nothing wrong), the platform data limitations (Facebook reach cutoff, Reddit no impressions, Google Business nothing per-post), the crediting/attribution behavior, and the 'nothing here needs fixing' honesty clause. This exceeds what any annotation could convey.
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?
Every sentence carries information — the problem taxonomy, the four refusals, the platform quirks, the converting rule, the 'print summary verbatim' output contract. However, it is a dense wall of all-caps prose; the four refusals are inlined as a numbered run rather than cleanly structured, and the opening hook ('WHAT TO FIX NEXT, post by post — and the tool that fixes it') is somewhat muddled as a lead-in. It earns its length but not its formatting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with this diagnostic complexity — three problem rungs, four refusal cases, cross-platform data quirks, and a conditional offer path — the description is remarkably complete. It covers the decision logic, the input conditions, the output contract (print summary verbatim, attribution in output), and credit cost. With no output schema present, the summary-verbatim instruction partially compensates; a slightly more explicit description of the output shape would push this to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter's schema description is already good. But the tool description adds genuine value beyond the schema: it explains the converting:false trigger condition (only when the user explicitly states non-conversion), and clarifies that limit only caps diagnosis count while 'the baseline is always built from EVERY post recorded.' This reinforces and extends the schema rather than merely restating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('tells you what is WRONG with a given post and where the next edit goes') and explicitly contrasts itself with post_performance, which 'tells you which hook is AHEAD.' This gives the agent a precise mental model of the tool's job and how it differs from its closest sibling 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?
The opening frames the tool against post_performance ('this tells you what is WRONG...'), establishing a clear when-to-use context. It also states an explicit conditional: the offer rung 'runs ONLY when the user tells you they are not converting and you pass converting:false.' It doesn't enumerate every sibling exclusion, but the named differentiation and the conditional trigger provide solid guidance for a diagnostic tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_connectorDisconnect a connected accountADestructiveIdempotentInspect
Disconnect a third-party account from this workspace (Meta, Google Ads, Google Drive/Sheets/Docs, YouTube, TikTok, LinkedIn, X, Reddit, Pinterest, Google Business, Microsoft Advertising/OneDrive, Slack, …). This always drops the stored credentials, so every tool for that provider stops working immediately and posts/campaigns already published are NOT affected. WHETHER IT ALSO REVOKES THE GRANT AT THE PROVIDER DEPENDS ON THE PROVIDER — a few (Threads, Microsoft) publish no revocation endpoint, so the authorisation stays in place until the user removes it in that provider's own settings. The unconfirmed call reports which it is for this provider (list_connectors also carries it as revokesAtProvider) — relay that verbatim rather than promising a revoke. RECONNECTING NEEDS A BROWSER (the provider's consent screen) — an agent cannot undo this. Name the provider to the user, then call with confirm:true. Use list_connectors for the exact provider ids.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | REQUIRED true — reconnecting needs the user's browser | |
| provider | Yes | provider id exactly as list_connectors reports it, e.g. "meta", "google_ads", "youtube", "linkedin" |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations, disclosing that credentials are always dropped, tools stop immediately, published posts are unaffected, revocation depends on provider, some providers lack revocation endpoints, and reconnecting requires a browser. This rich behavioral context helps the agent set user expectations and avoid promising actions it cannot complete.
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 long but every sentence contributes essential information—consequences, provider variability, and the undoing limitation. It is front-loaded with the main purpose and effects, and the structure flows logically from effect to caveat to action. While dense, it avoids redundancy.
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?
Despite lacking an output schema, the description covers what the agent needs: the unconfirmed call reports revocation status, the exact provider ID source, and the confirm requirement. It also instructs the agent to relay info verbatim, ensuring correct usage. No critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful detail: provider must match list_connectors exactly, and confirm must be true because reconnecting needs the user's browser. This clarifies the semantics beyond the schema's terse field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Disconnect a third-party account from this workspace') and enumerates the supported providers, distinguishing it clearly from siblings like leave_connector. The verb and resource are specific and 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?
The description provides clear context on when to use the tool, including the prerequisite of calling list_connectors for provider IDs and the need for user confirmation. It does not explicitly exclude alternatives like leave_connector, but it names list_connectors as the supporting tool, which is sufficient guidance for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_brandDraft brand profileAInspect
Onboard a brand profile — from a website domain, a free-text description, or a social handle — into a {name, products, logo, …} object you can pass to plan_ad / generate. 0 ScrapeCreators credits. IMPORTANT: a domain can resolve to a DIFFERENT company than intended (e.g. bala.com is an engineering firm, not the Bala fitness brand at shopbala.com). Before spending any credits on research or renders, VERIFY the returned name (and summary) match the brand the user meant; if it looks wrong, re-draft with the correct domain or a description (pass save:false until confirmed) — this tool cannot ask the user, so the caller owns that check.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | save as the workspace’s brand (like Studio onboarding) so plan_ad/create use it automatically. Default: saves only when NO brand is saved yet; pass true to overwrite, false to never save | |
| domain | No | a website to scrape | |
| platform | No | platform for socialHandle (instagram/tiktok/…) | |
| description | No | a free-text brand description (no website) | |
| socialHandle | No | a social handle to draft from (influencers/creators) — pair with platform |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare openWorldHint=true and non-readOnly, and the description adds valuable behavioral context: the domain resolution pitfall (bala.com example), the '0 ScrapeCreators credits' cost information, the save behavior (default saves only when no brand exists), and the explicit limitation that the tool cannot ask the user. This goes well beyond the annotations, though it doesn't fully describe the drafting mechanics (e.g., how scraping works) or all side effects.
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 with the core purpose, followed by the critical warning and verification directive. It is a bit long but every sentence carries weight—there is no fluff. The structure leads with the primary use case, then the risk, then the mitigation. It could be slightly more concise, but the length is justified by the safety warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description compensates by describing the output shape and the verification step. It covers how to handle the save parameter and the ambiguity of domain resolution. However, it does not explicitly state that at least one of the source inputs (domain, description, socialHandle) is required, even though the schema has zero required parameters. This could leave an agent unsure about what to pass. Otherwise, it is fairly complete for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters. The description adds important semantics beyond the schema: it maps the input options (domain/description/socialHandle+platform) to the overall workflow, and explicitly elaborates on the `save` parameter ('pass save:false until confirmed'), which is not just a boolean but has conditional behavior. This enriches the parameter meaning 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 explicitly states the tool's action ('Onboard a brand profile'), the resource (brand profile), the input sources (website domain, free-text description, or social handle), and the output shape ({name, products, logo,…}). It also mentions downstream usage with plan_ad/generate, making the purpose unambiguous and distinct from sibling brand tools like create_brand or get_brand.
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 context on when to use it (onboarding from unstructured sources) and includes a critical verification step: 'Before spending any credits on research or renders, VERIFY the returned name (and summary) match the brand the user meant.' It also advises using save:false until confirmed. However, it does not explicitly name alternative tools like create_brand or update_brand, so the selection guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dub_videoDub videoAInspect
Localize a finished video into another language WITHOUT re-rendering it: the spoken track is transcribed, translated, re-voiced and lip-synced back onto the SAME footage, so the visuals, timing and edit are untouched. Just pass the video and the language — the script is read off the source automatically (pass script only to override what it heard). Paid; returns the served URL of the localized video.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | the source video URL | |
| voice | No | optional target voice preset, e.g. 'Aria' (warm female) or 'George' (confident male). Defaults to a voice matching the source speaker's register. | |
| script | No | OPTIONAL override for the original spoken words. Leave this out — the source video is transcribed automatically. Only pass it when you already know the exact script and the auto-transcript got it wrong. | |
| language | Yes | target language, e.g. 'Spanish', 'de', 'French (Canada)' |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral facts beyond the annotations: the operation is paid, it automatically transcribes the source audio, it re-voices and lip-syncs onto the same footage, and it returns a served URL. It also notes the script parameter overrides the auto-transcript. Since annotations only indicate a mutating, non-destructive operation, this description adds significant context about cost, process, and output, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded with the core purpose, then adds usage and cost details. It is a bit dense but every sentence serves a purpose: it explains the process, the automatic transcription, the override, the paid nature, and the return value. It is well-structured, though slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters and no output schema, the description covers the essential usage context: the input requirements (video, language), the automatic transcription, the override option, cost, and return format. It does not mention potential errors or prerequisites like supported video formats, but that is not critical. Overall, it is sufficiently complete 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 100%, so the schema already documents all four parameters well. The description reinforces the automatic transcription behavior and the script override, but this information is already present in the schema for each parameter. The description does not add new meaning beyond what the schema provides, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('localize'), resource ('finished video'), and the key distinction ('WITHOUT re-rendering it'), making it clear this is a dubbing tool rather than a general video editor. The mention of
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 context for using the tool: it is for localizing a finished video into another language. It instructs the agent to 'just pass the video and the language' and explains when to use the optional script override. It does not explicitly name alternative tools, but the 'WITHOUT re-rendering' phrasing implicitly contrasts it with editing tools, and the paid note adds a cost consideration. This is sufficient for routing, though explicit 'when not to use' guidance would be stronger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_scheduledDuplicate a scheduled postAInspect
Copy an existing scheduled or already-published post into a NEW queued post — the way to run a creative again, reuse a post that worked as the starting point for the next one, or re-send something after it went out. It copies the caption, media, per-channel captions, title, description, tags and the target board / Page / company Page / listing, and ANY of those can be overridden in the same call. Give a new time in at, or useQueue:true to drop it into the brand’s next free posting slot. The copy is INDEPENDENT — editing or cancelling it never touches the original — and it is a genuinely new post rather than a re-send, so it publishes even where the original already did. To re-fire only the channels that FAILED, use retry_scheduled instead.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | when the copy goes out — ISO timestamp or epoch milliseconds (default: an hour from now) | |
| id | Yes | the post to copy, from list_scheduled | |
| link | No | ||
| title | No | ||
| chatId | No | TELEGRAM — which chat, group or channel the copy goes to (@username or numeric id) | |
| pageId | No | FACEBOOK / INSTAGRAM / THREADS — which connected Page (list_meta_pages) | |
| boardId | No | PINTEREST — the board for the copy (list_pinterest_boards) | |
| message | No | a different caption for the copy | |
| captions | No | per-channel caption overrides for the copy | |
| channels | No | post the copy to these channels instead of the original’s | |
| imageUrl | No | ||
| timezone | No | IANA zone for the queue, e.g. "America/New_York" | |
| useQueue | No | instead of naming a time, take the brand’s next free posting slot | |
| videoUrl | No | ||
| imageUrls | No | CAROUSEL — an ORDERED list of image URLs published as ONE swipeable post | |
| locationId | No | GOOGLE BUSINESS — which listing (list_business_locations) | |
| visibility | No | ||
| linkedinOrganizationId | No | LINKEDIN — publish the copy as this company Page (list_linkedin_pages) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds valuable behavioral detail: the copy is independent, a genuinely new post, and publishes even where the original already did. These details go beyond the annotations and clarify side effects, though it doesn't cover every potential caveat (e.g., permissions, rate limits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences long but each provides essential information: purpose, attributes copied and overridable, scheduling options, independence of the copy, and the alternative tool. It is well-structured with the most critical details front-loaded, though slightly verbose. For a tool with 18 parameters, this length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, usage scenarios, behavioral guarantees, overrides, scheduling options, and alternatives. It uses the schema description for parameter details (e.g., id from list_scheduled) and the output is not schema-defined, so return value is not explained but acceptable. Given the tool's complexity, it is nearly complete, with minor gaps like prerequisites or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 72%, so most parameters have descriptions. The description adds value by clarifying that any of the copied fields (caption, media, etc.) can be overridden in the same call, which explains the role of override parameters like `message`, `title`, etc. This is helpful beyond the schema's individual field descriptions, though it doesn't elaborate on all 18 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (copy) and the resource (a scheduled or published post into a new queued post). It differentiates from retry_scheduled by specifying that this tool duplicates posts while retry_scheduled re-fires failed channels. The purpose is unambiguous and distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when to use this tool (run a creative again, reuse a post, re-send after it went out) and provides a clear exclusion: 'To re-fire only the channels that FAILED, use retry_scheduled instead.' It also explains the `at` and `useQueue` options for scheduling, giving agents context on how to invoke it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_reddit_postEdit a Reddit text post’s bodyAIdempotentInspect
Rewrite the BODY of one of the connected account’s Reddit TEXT posts — the fix for a dead link, a wrong price or a correction the comments are asking for. THREE THINGS REDDIT DOES NOT ALLOW, and you must not offer them: (1) a post’s TITLE can never be changed by any API — title exists only on Reddit’s submit endpoint, so a published title is frozen for every client, not just this one; (2) a LINK post cannot be edited at all — Reddit documents this endpoint as editing "the body text of a comment or self-post" and refuses a link post; (3) a post that has already been deleted cannot be edited. In each case the only remedy is to delete and submit again, which loses the score, the age and the whole comment thread — say that plainly instead of implying an edit is possible. The result is READ BACK from Reddit, so an accepted edit that did not apply is reported as NOT confirmed rather than narrated as done. 0 credits. Needs Reddit connected.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the new body markdown — this REPLACES the existing body | |
| postId | Yes | the post id, its t3_… fullname, or the permalink (list_reddit_posts returns them) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish non-read-only and non-destructive behavior, but the description adds substantial context: it explains that the result is read back from Reddit so an accepted edit that didn't apply is reported as 'NOT confirmed', it discloses the 0-credit cost and the requirement of a connected Reddit account, and it details the three unsupported scenarios with consequences. This goes well beyond what the annotations alone provide.
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 long but every sentence carries weight: it front-loads the key restriction (title immutability), then lists the other constraints, and finishes with verification and cost. It is information-dense without redundancy, though slightly verbose for a tool description. Given the number of edge cases, the length is justified, so a 4 is reasonable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description is exceptionally complete: it covers prerequisites (connected account, 0 credits), behavioral verification (NOT confirmed), and all three unsupported cases with remedies. The description even explains what happens on failure (delete and resubmit, losing score/age/thread). Nothing an agent needs to call this tool correctly seems 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 describes both parameters at 100% coverage: `postId` accepts the id, fullname, or permalink, and `text` is the replacement markdown. The description does not add new parameter-specific semantics; it reiterates the purpose context (e.g., fixing a dead link) but not additional detail about parameter formats or values. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb–resource pair: 'Rewrite the BODY of one of the connected account’s Reddit TEXT posts'. It distinguishes from siblings by explicitly restricting to text posts and by naming the three limitations (title, link posts, deleted posts). The title reinforces the same purpose, leaving no ambiguity about what this tool does.
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 explicitly states when to use this tool (for text posts needing body corrections) and when not to: title changes, link posts, and deleted posts are all ruled out, with the alternative 'delete and submit again' spelled out. It also notes that an edit might not apply and must be verified, guiding the agent to check the result. No other tool is named, but the constraints make the appropriate use case crystal-clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_videoEdit a video clipAInspect
EDIT/transform an existing video clip with a natural-language instruction (video-to-video) — KEEPS the original motion, timing and edit, changes the subject/setting/style. Use for 'change the background to a city', 'make it nighttime', 'restyle it as claymation', 'swap the product'. Best on 3–10s clips. NOT for mechanical cuts, trims, end cards or watermarks (use post_edit — seconds, ~2 credits, no AI model), NOT for making a new video (generate_video / render_ad), NOT for translating the spoken track (dub_video) and NOT for putting a saved creator's face on the motion (recast_motion). Paid render; returns the served URL of the edited clip.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | the source video URL (from a previous render, a job result, or list_library) | |
| elements | No | OPTIONAL identity/product grounding (≤4): a creator portrait or the real product photo, so the edit restores the REAL thing instead of re-inventing it. Describe each one in the instruction. Leave out for a plain restyle | |
| keepAudio | No | default true — keep the source clip’s audio track. Set false to return the edit silent | |
| instruction | Yes | the exact transformation to apply, in the user’s own words |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are sparse (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description carries most of the disclosure burden. It discloses that the operation keeps the original motion/timing, is a paid render, operates best on short clips, and returns the served URL of the result. It could additionally note idempotency or failure behaviors, but the disclosed traits (cost, preservation of motion, length range, output URL) are substantial beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core scoping ('KEEPS original motion, changes subject/setting/style') is front-loaded, followed by usage examples and then a compact series of exclusions. It is long, but this density is justified by the large sibling set it must disambiguate against (post_edit, generate_video, render_ad, dub_video, recast_motion). A few phrases like 'so the edit restores the REAL thing' could be trimmed, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema and sparse annotations, the description provides the key operational context: what the tool preserves, what it changes, best-length constraint, cost implication, and the result URL. It omits explicit pagination/timeout/credit-exactness details and does not restate the return value beyond the URL, but for this tool's complexity the coverage is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters thoroughly, including the elements object's 'frontal' and 'refs' fields and the keepAudio default. The description adds marginal value by explaining the purpose of 'elements' ('so the edit restores the REAL thing') and the silent-return behavior of keepAudio=false, but the heavy lifting is done by the schema — earning the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Phrased with an explicit verb and resource ('EDIT/transform an existing video clip'), a precise definition of the video-to-video behavior ('KEEPS the original motion, timing and edit, changes the subject/setting/style'), and concrete examples ('change the background to a city', 'restyle it as claymation'). It distinguishes itself unambiguously from generate_video, post_edit, and dub_video, whose names it shares the domain with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names at least four alternatives and the exact conditions that select each: post_edit for mechanical cuts/trims (with cost and credit hints), generate_video/render_ad for new videos, dub_video for translation, and recast_motion for face transfer. Also bounds applicability ('Best on 3–10s clips'). No inference is required from the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_toolsTurn on more Hermoso toolsAIdempotentInspect
Switch on a group of tools that is not in this session's roster. WORKS ON CLIENTS THAT RE-READ THE TOOL LIST (stdio, the CLI); a host that fixed its roster at connect time — ChatGPT does — will not show the new tools until it reconnects, and this tool says so in its reply rather than reporting a success you cannot use. The connect-time route that always works is ?tools=all on the server URL. The default roster is every group EXCEPT ads and analytics, which are held out purely on SIZE: paid-campaign management is by far the largest group, most of the total schema weight across eleven ad platforms, and measurement is a third again on top of everything else. Most sessions need neither. Nothing in either is unfinished or unsafe — they are one call away. CALL THIS THE MOMENT YOU NEED ONE. If the user asks to build, budget, target, report on or change an ad campaign on any platform, call enable_tools({groups:['ads']}) first and the tools appear. If they ask about their own site or product analytics, a tag/tracking container, or how a search engine crawls, indexes or ranks their site, call enable_tools({groups:['analytics']}). Groups: core, research, create, channels, analytics, ads, files, workspace — or 'all'. Free, instant, and it never turns anything off.
| Name | Required | Description | Default |
|---|---|---|---|
| groups | Yes | Groups to switch on, e.g. ['ads']. Unknown names are refused by name rather than ignored. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false, but the description goes further by explaining behavior on different clients (stdio/CLI vs ChatGPT) and how the tool reports outcomes in its reply rather than falsely reporting success. It also clarifies that nothing is turned off and explains why certain groups are held out (size). This adds significant context beyond the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence contributes value: it covers client behavior, default roster, explicit triggers, and group list. It is well-structured with bold calls and clear examples. However, it is verbose enough that a more concise version could convey the same information with less text, though the complexity of the topic justifies the 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?
Given the tool's simple parameter but complex behavior across clients and many groups, the description is thorough. It explains the default roster, why certain groups are excluded, how to handle different client types, and the effect on the reply. No critical information is missing for an agent to correctly invoke this 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?
While the schema describes the 'groups' parameter as an array of strings, the description adds full meaning by enumerating valid group names ('core, research, create, channels, analytics, ads, files, workspace — or "all"') and explaining the implications of using specific groups (e.g., ads for ad campaigns). It also notes that unknown names are refused by name, which is behavior not in the schema. This makes the parameter semantics clear and actionable.
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 immediately states the tool's function: 'Switch on a group of tools that is not in this session's roster.' It uses a specific verb and resource, and clearly differentiates itself from siblings by focusing on tool enablement, which is unique among the sibling list. There is no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit conditions for use, including specific triggers like 'If the user asks to build, budget, target, report on or change an ad campaign... call enable_tools({groups:['ads']})'. It also names an alternative method ('?tools=all' on the server URL) and explains when it doesn't work (hosts that fixed their roster at connect time). This gives full guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
error_detailError detailARead-onlyInspect
One error group in full by fingerprint (from list_errors): every field, plus the most recent redacted occurrences — status, connector, job id, workspace, and a shape-only echo of the inputs. This is what makes a bug reproducible. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| fingerprint | Yes | the `fp` value from list_errors |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool is read-only and costs 0 credits, and that occurrences are redacted, adding behavioral context beyond the annotations which already set readOnlyHint=true and destructiveHint=false. It does not contradict annotations and provides useful details about data privacy and cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core action ('One error group in full by fingerprint'), and packs essential details (fields, redaction, input echo, read-only, 0 credits) without waste. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, one-parameter read-only tool with no output schema, the description sufficiently conveys what is returned, the provenance of the fingerprint, and cost implications. It lacks only minor details like handling of missing fingerprints, but these are not essential 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?
The schema fully documents the single parameter 'fingerprint' with its source ('the fp value from list_errors'), so schema coverage is 100%. The description only mirrors this by saying 'by fingerprint (from list_errors)' without adding additional meaning, staying at the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a single error group by fingerprint, enumerates the content (every field plus redacted occurrences with status, connector, job id, workspace, and input echo), and explicitly references the sibling list_errors as the source. This distinguishes it from listing tools and other detail tools, leaving no ambiguity about its function.
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 usage by referencing 'from list_errors' and framing the result as 'what makes a bug reproducible', suggesting it is used for debugging after obtaining a fingerprint. However, it does not explicitly state when to use it versus alternatives or mention when not to use it, lacking an explicit routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_swipefile_deckSwipefile to Google SlidesAInspect
Turn a SWIPEFILE COLLECTION into a real Google Slides deck — one slide per saved ad, carrying the creative, the brand, the ad copy, the run dates with the run length, and the platform. This is the thing a marketer actually presents to a client or a team; until now the swipefile’s only export was JSON. Returns the presentation id + URL. Creates a NEW deck every time: under the drive.file scope Hermoso can only touch files it created, so it cannot add slides to a deck the user already has. A creative whose ad-library link has expired cannot be embedded — Meta signs those URLs with a short expiry — so that slide says so in words and keeps its copy and run dates, and the reply reports how many. Needs Google Drive connected (Settings ▸ Connectors ▸ Google Drive — one connection covers Drive, Sheets, Docs and Slides).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max ads to include, 1-60 (default 30) | |
| title | No | deck title (default: the collection name) | |
| collection | No | the swipefile collection to export, by name or id (default: the first collection) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses multiple behavioral traits beyond the annotations: it always creates a NEW deck, it cannot modify user-owned decks due to scope, it gracefully handles expired ad-library links (embeds text instead and reports count), and it returns a presentation id + URL. Annotations only provide binary hints; this description enriches the agent's mental model substantially.
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 somewhat lengthy but each sentence earns its place: the first states the core purpose, the second gives marketing context, the third explains the new-deck limitation, the fourth covers the expired-link edge case, and the fifth states the connection requirement. It is well-structured and front-loaded, though a sentence or two 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 complex tool that creates Google Slides decks, the description covers the return value (presentation id + URL), the behavioral edge cases (expired links, new-deck only), and the prerequisite (Drive connected). No output schema exists, so the description carries the full burden of explaining what the agent receives, and it does so completely.
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 each parameter has a description in the schema (limit range/default, title default, collection by name/id). The tool description restates these facts without adding new meaning beyond what the schema already provides, so it stays at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Turn a SWIPEFILE COLLECTION into a real Google Slides deck') and enumerates exactly what each slide carries (creative, brand, copy, run dates, platform). It also contrasts with the prior JSON-only export, making the tool's distinct value clear against siblings like save_to_drive and update_drive_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?
It clearly frames when to use this tool—for presenting a collection to a client/team, contrasting with the old JSON export—and warns that it cannot touch existing decks due to the drive.file scope, implying when not to use it. It also states the prerequisite (Google Drive connected). It does not name a specific alternative tool, but the context is strong enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extend_tiktok_post_ad_authorizationExtend a post’s Spark-Ads authorizationAInspect
Extend how long a post the authorized account owns stays promotable as a Spark Ad — and REGENERATE its code if it was deleted. THE DAYS ARE ADDED, NOT SET: TikTok's own example is that a post with 180 days remaining, extended by 180, ends up at 360 — so passing '365' to a post that already has time left does not mean 'expires in a year'. Must be one of 7, 30, 60, 180, 365. Ad authorization has to be ON already (set_tiktok_post_ad_authorization) or TikTok refuses. The reply reads the new window back, because TikTok's own response body is empty. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status).
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | the TikTok post id | |
| authorizationDays | No | 7 | 30 | 60 | 180 | 365 — ADDED to whatever is left, not set as an absolute. Default 30. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (non-read-only, open-world, non-destructive), the description discloses critical behavioral traits: days are added not set (with a concrete example), it regenerates the code if deleted, TikTok's response body is empty so it reads back the new window, and it requires existing authorization. This gives the agent a full picture of side effects and nuances.
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 longer than average but every sentence is informative. It front-loads the core purpose, uses capitalization to emphasize the add-not-set rule, and covers prerequisites and response behavior. While slightly verbose, the density of critical warnings justifies the 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?
For a tool with two parameters and no output schema, the description fully equips an agent: it explains the add-not-set semantics, allowed values, prerequisite of existing authorization, the empty-response issue and how the tool compensates, and the need for account authorization. There is no missing information that would cause incorrect 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?
The input schema already provides full coverage (100%) of both parameters, including the 'ADDED to whatever is left' note for authorizationDays and the allowed values. The description reiterates this and even adds an example, but it doesn't introduce new meaning beyond the schema. With high schema coverage, the baseline is 3, and the description only confirms rather than augments.
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 a specific action: extending the Spark-Ad authorization duration for a post, and also regenerates the code if deleted. It distinguishes itself from sibling tools like set_tiktok_post_ad_authorization (which enables auth) and delete_tiktok_post_ad_authorization (which removes it) by clarifying this tool only extends existing authorization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it must be used after authorization is already ON (referencing set_tiktok_post_ad_authorization), and it requires TikTok account authorization (pointing to tiktok_account_status). It does not explicitly contrast with get_tiktok_post_ad_authorization, but the purpose is unambiguous. The 'must be one of 7, 30, 60, 180, 365' constraint is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_app_screensFetch App Store screensAIdempotentInspect
Pull an APP brand's REAL App Store screenshots into the workspace brand, so a screen-hungry native format can use them. Use when the brand has 0–1 app screens on file and you want make_template_ad(template:'app-ui-tour'), or the user asks to 'pull my app's screenshots'. Pass appName (defaults to the saved brand's name). FREE — a keyless App Store lookup. It needs a CONFIDENT match: an ambiguous or unknown app returns 0 screens and saves nothing, which you should relay plainly rather than retrying with guesses. On success the screens are saved to the brand (durable URLs) and are immediately usable.
| Name | Required | Description | Default |
|---|---|---|---|
| appName | No | the app's name to look up on the App Store — defaults to the saved brand's name | |
| brandId | No | a brand id/name from list_brands to save the screens onto; omit to use the active brand |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (mutating), openWorldHint=true (external interaction), and idempotentHint=true. The description adds context beyond these: it's FREE and keyless, requires a CONFIDENT match, returns 0 on ambiguous/unknown apps, saves durable URLs on success, and indicates the agent should relay failures plainly. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and usage condition, then expands on parameters, cost, and behaviors. It's dense but every sentence carries essential information; a slight trimming of the 'REAL' emphasis could tighten it, but it remains well-structured and not verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains the tool's behavior: what it returns on success (durable URLs saved), what happens on failure (0 screens, saves nothing), and how the agent should handle that. It also covers the default parameter behavior and prerequisites (brand with 0–1 screens), making it complete for an agent to decide and execute 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?
The input schema already has 100% coverage with descriptive text for appName ('the app's name to look up on the App Store — defaults to the saved brand's name') and brandId ('a brand id/name from list_brands to save the screens onto; omit to use the active brand'). The description re-states the default but adds no new parameter syntax or details, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action with a specific resource: 'Pull an APP brand's REAL App Store screenshots into the workspace brand.' It explicitly mentions the use case with make_template_ad(template:'app-ui-tour') and the user's phrasing, differentiating it from generic asset fetching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells when to use: 'Use when the brand has 0–1 app screens on file and you want make_template_ad(template:'app-ui-tour'), or the user asks to pull my app's screenshots.' It also clarifies edge behavior (ambiguous app returns 0 screens) and advises not to retry with guesses, leaving no ambiguity about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_assetFetch assetARead-onlyInspect
Resolve a generated asset reference (a /generated/… path or any URL) to a clickable absolute URL + a direct download URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | the asset url or /generated/ path | |
| name | No | optional filename for the download |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the core behavior of resolving a reference into two URLs, which is useful context beyond the annotations. It clearly communicates the operation without overspecifying, and there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and output immediately. There is zero waste, and the critical nuance (accepts /generated/ paths or any URL) is included. It is appropriately sized for the task.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explicitly defines the return values (absolute URL and download URL). The input requirements are covered by the schema, and the annotations establish safety. For a simple resolver, this fully equips an agent to call the tool correctly without missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (url and name), so the schema already documents them. The description repeats the purpose but adds no new meaning about parameter formats or usage beyond what the schema states. With full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Resolve'), a clear resource ('a generated asset reference'), and the exact output ('clickable absolute URL + direct download URL'). It distinguishes itself from the many sibling tools by describing a unique transformation (path/URL resolution) that no other sibling appears to do, so an agent can easily tell it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but gives no guidance on when to use it over alternatives. There are no explicit conditions, exclusions, or references to sibling tools for similar tasks. In a large set of sibling tools, the agent must infer usage solely from the purpose, which is not sufficient per the rubric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_competitorsFind competitorsBRead-onlyInspect
Discover a brand's competitor / similar / adjacent brands from its domain (Claude grounded by web search). mode=competitors (default, excludes the searched company), inspiration (best relevant ads incl. it), or company. 0 ScrapeCreators credits.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 'competitors' (default, excludes the searched company), 'inspiration' (best relevant ads incl. it), or 'company' | |
| domain | Yes | the brand domain, e.g. flourish.com |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only and non-destructive. The description adds that it is grounded by web search and costs 0 ScrapeCreators credits, which provides additional behavioral context. However, it does not describe output format or any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, starting with the core purpose, then detailing modes and cost. Each sentence adds value and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema), the description covers the input and modes but does not specify the return format or any potential limitations. It mentions cost but not error handling. It is adequate but not exhaustive.
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 schema already fully describes both parameters (domain and mode) with clear descriptions. The tool description essentially repeats the mode explanation and adds no new parameter semantics. Baseline for high schema coverage is 3, and no additional info is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool discovers a brand's competitor/similar/adjacent brands from its domain, and mentions it is grounded by web search. It is specific enough to distinguish from sibling tools like competitor_teardown or pull_competitor_ads, though it does not explicitly name 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?
The description does not provide explicit guidance on when to use this tool versus alternatives. It lists modes but does not clarify when to choose this over competitor_teardown or pull_competitor_ads. The context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_videoFinish videoAInspect
Post-process an EXISTING rendered video (its served mp4 URL) with the proven direct-response 'reviewer' finish and/or a film-grain pass — no AI model, ~30s, a couple of credits. pills=true composites a header pill (e.g. '10/10 would buy again'), a brand-accent sub-pill, and 3-4 green-check proof pills cascading in on the beat (YOU author the copy: header ≤40 chars, sub ≤34, each point ≤44 — concrete real benefits, never fabricated stats). grain=true applies a subtle camera-grain finish that makes photoreal AI renders look phone-shot ('less AI') — works alone or with pills. Returns a NEW video; the original is untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| sub | No | accent sub-pill copy, ≤34 chars (usually the product/brand) | |
| grain | No | default false — anti-AI film-grain finish | |
| pills | No | default true — set false for a grain-only pass | |
| accent | No | brand accent hex for the sub-pill | |
| header | No | header pill copy, ≤40 chars (required when pills is on) | |
| points | No | 3-4 proof points, ≤44 chars each | |
| videoUrl | Yes | the served URL of the video to finish (from a previous render/job) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no hints (all false), so the description carries full responsibility. It discloses the non-destructive nature ('original is untouched'), the output (a NEW video), the approximate cost/time ('a couple of credits', '~30s'), and explicitly that no AI model is involved. It details the effects of pills and grain, including the exact character limits for copy (≤40, ≤34, ≤44) and the instruction to use 'concrete real benefits, never fabricated stats.' This is thorough and transparent for an operation with side effects.
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 dense but not bloated. It front-loads the core action ('Post-process an EXISTING rendered video') and then details the two relevant parameters. The character limits and examples are packed efficiently. It's about 100 words, which is appropriate for a tool with this complexity. It could be trimmed slightly (e.g., the example '10/10 would buy again' is illustrative but not essential), but overall it earns its 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?
Given the tool has 7 parameters and two distinct modes, the description covers the main behavioral distinctions and the output format. It does not explain every parameter (but schema does, at 100% coverage), and it does not explicitly discuss failure modes or error handling. However, for a typical agent that just needs to know what to provide and what to expect, it is complete. The only minor omission is the exact relationship between pills and grain (it says grain works alone or with pills, but not that pills can exist without grain — implied by 'pills=true' default). Overall, it's sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (every parameter has a description), so baseline is 3. The description adds meaningful context beyond the schema: it explains the purpose of pills (composite a header, sub-pill, and proof pills), the effect of grain ('less AI' look), and how they interact. It also clarifies that 'header' is required when pills are on (though the schema already says that). The copy constraints are given in the description, enhancing the schema's simple '≤40 chars' notes. This is more than just restating schema, so a 4 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 opens with a specific verb ('Post-process') and resource ('an EXISTING rendered video'), then immediately states the two finishes ('reviewer' pills and film-grain). It explicitly says 'Returns a NEW video; the original is untouched,' which distinguishes it from mutating tools. The mention of 'no AI model' and the ~30s time frame further clarifies what this tool is not. It clearly differentiates from siblings like clip_video, edit_video, and reframe_video by focusing purely on adding overlay/grain to an already-rendered video.
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 clearly states the use case: post-processing an existing rendered video, and explains the two modes (pills, grain) and that they can be combined. It implies when to use it (after a render) but does not explicitly contrast it with alternatives like edit_video or clip_video. It does say 'works alone or with pills' for grain, giving conditionality. Overall, the context is clear, but it lacks explicit 'use X instead' guidance for related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fix_beatFix a video beatAInspect
Surgically re-render ONE time window (1.5-8s) of an existing rendered video and splice it back on the VIDEO TRACK ONLY — the rest of the video and ALL audio stay byte-identical. Use when one beat/shot is broken ('the shot at 8 seconds glitches') and a full re-render would waste the parts that worked; bills only the replacement clip's seconds (~1/3 of a full render). Do NOT pick a window covering spoken dialogue (a video-only splice under speech breaks lip-sync) — pass speechWindows to enforce this.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | what the replacement footage should show — describe the shot, matching the master's style | |
| refImage | No | optional product/style anchor image URL | |
| videoUrl | Yes | the served URL of the master video to fix | |
| endSeconds | Yes | window end in seconds (window 1.5-8s) | |
| startSeconds | Yes | window start in seconds | |
| speechWindows | No | [[start,end],...] windows with spoken lines — the fix window must not overlap these |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotation hints false, the description carries the full burden. It discloses the surgical nature (video track only, audio unchanged), the billing impact (~1/3 of full render), and the lip-sync risk warning. It doesn't discuss side effects like irreversible changes or error conditions, but the core behavioral traits are well-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?
The description is a single paragraph but every sentence adds distinct value: it leads with the core action and constraint, then provides usage context, billing note, and exclusion guidance. While slightly long, it is tightly packed and front-loads the critical 'VIDEO TRACK ONLY' caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and moderate complexity, the description covers the essential operational context: what it does, when to use it, constraints on the window (including speech), and cost implications. It doesn't state what a successful result looks like (since no output schema exists), but the side effects are clear enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 6 parameters, so the baseline is 3. The description adds meaningful semantics: the window length constraint (1.5-8s), the purpose of `speechWindows` to avoid overlap with dialogue, and that `prompt` should match the master's style. These go beyond simple schema labels and help the agent construct valid calls.
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 ('re-render') and resource ('ONE time window of an existing rendered video') and explicitly limits scope to the video track, distinguishing it from a full re-render. It also gives a concrete use case ('the shot at 8 seconds glitches'), making the tool's purpose unambiguous even among many sibling video tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use ('Use when one beat/shot is broken and a full re-render would waste...') and when not to ('Do NOT pick a window covering spoken dialogue'), and instructs to pass `speechWindows` to enforce the exclusion. This gives the agent clear decision criteria without needing to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetForget a memoryADestructiveIdempotentInspect
Delete a saved Memory item by its id (from list_memory). Records a cross-device delete so it doesn’t come back. Minor + re-creatable (you can remember it again), so no confirm needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the memory item id (from list_memory) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark destructiveHint=true and idempotentHint=true. The description goes beyond annotations by explaining that it records a cross-device delete so the memory doesn't come back, and that it's re-creatable via 'remember'. This adds valuable behavioral context about persistence and reversibility, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core action is front-loaded, and additional context (cross-device delete, re-creatable) is delivered efficiently. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive operation with no output schema, the description covers all necessary aspects: what it deletes, where the id comes from, and the exact behavior regarding persistence and reversibility. Combined with annotations, the agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the id parameter description already states it is 'the memory item id (from list_memory)'. The tool description repeats this same source, adding no new meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Delete'), a specific resource ('saved Memory item'), and explicitly links the id to list_memory. It unambiguously identifies what the tool does and distinguishes it from the many other delete_* tools by targeting memory specifically.
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 context on when to use it: it mentions that the id comes from list_memory and that the action is minor and re-creatable, so no confirmation is needed. This gives usage context, though it does not explicitly name alternatives or conditions that would select a different tool, but none exist for memory deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_sheetFormat a Google SheetAIdempotentInspect
Make an exported sheet readable: bold the header row, FREEZE it so it stays visible while scrolling, and auto-size the columns so nothing is cut off. Worth calling right after create_sheet — a raw export with unsized columns and a header that scrolls away is the difference between a spreadsheet someone reads and one they close. Changes no cell VALUE, so it is never gated. The defaults do all three on the first tab; pass tab to pick another, freezeRows:0 to skip freezing, boldHeader:false or autoResize:false to skip those.
| Name | Required | Description | Default |
|---|---|---|---|
| tab | No | tab title or numeric sheetId (default: the first tab) | |
| sheetUrl | No | ||
| autoResize | No | ||
| boldHeader | No | ||
| freezeRows | No | how many top rows to freeze (default 1, 0 = none) | |
| spreadsheetId | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint:false, idempotentHint:true, destructiveHint:false), the description specifies that it changes no cell VALUE, clarifying that only formatting is modified. It also states it is never gated, adding access-related context not covered by annotations. This provides a clear behavioral picture.
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 (~110 words) and front-loaded with the core purpose in the first sentence. It flows logically: purpose, usage context, non-destructive clarification, and parameter overrides. Every sentence earns its place with no redundancy.
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 formatting tool with 6 optional parameters and no output schema, the description covers the purpose, default behavior, parameter overrides, and usage context. It explains exactly what happens (bold, freeze, auto-size) and how to customize. Nothing critical is missing 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 coverage is only 33% (tab and freezeRows have descriptions), but the description compensates by explaining the functional parameters: defaults for autoResize, boldHeader, and freezeRows, and how to skip each behavior. However, it does not mention sheetUrl or spreadsheetId, though these are likely self-explanatory identifiers. The description adds meaningful context for the flag parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool formats a Google Sheet by bolding the header row, freezing it, and auto-sizing columns. It specifies the resource (exported sheet) and actions, and distinguishes itself from siblings like create_sheet and update_sheet by focusing on formatting without changing cell values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly recommends calling this right after create_sheet and explains why, giving a real-world scenario. It also details parameter overrides (tab, freezeRows:0, boldHeader:false, autoResize:false) and notes that it is never gated, which helps an agent decide when to use it and what to expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_avatarGenerate talking avatarAInspect
Render a TALKING-AVATAR / creator lip-sync clip from a portrait image + a script. Blocks until done (1–3 min). Requires the avatar capability (canAvatar in hermoso_capabilities). Spends credits.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | local path or URL of the presenter portrait | |
| voice | No | voice name (Rachel/Sarah/George/Adam) | |
| script | Yes | the words the avatar speaks | |
| resolution | No | '1080p' (default) or '480p'/'720p' draft |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no behavioral hints (all false), so the description carries the burden. It discloses that the operation blocks ('Blocks until done (1–3 min)') and costs credits, which are beyond annotations. However, it does not mention what the tool returns (no output schema) or any other side effects, leaving a significant gap for a tool that is not readOnly and is likely to be a long-running operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler; the core action and key constraints are front-loaded. It efficiently communicates the blocking behavior, capability requirement, and cost. Slight jargon ('creator lip-sync') could be clarified, but overall it is well-organized and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (blocking, cost, capability requirement) and lack of output schema, the description covers the blocking duration, credit cost, and capability prerequisite, but it fails to describe the output format (e.g., video file/URL), which is critical for an agent to know how to use the result. It also does not mention fallback or failure behaviors. This incompleteness prevents a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a clear description. The tool description adds minimal semantic value by emphasizing that the image is a 'portrait' and the script is what the avatar speaks, but the schema already says 'presenter portrait' and 'the words the avatar speaks'. Thus the description does not meaningfully enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Render') with a clear resource ('TALKING-AVATAR / creator lip-sync clip') and inputs ('portrait image + a script'). It distinguishes itself from siblings like generate_video, generate_voice, and dub_video by focusing on lip-sync from a still image, giving the agent enough to differentiate without ambiguity.
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 prerequisites ('Requires the avatar capability (canAvatar in hermoso_capabilities)') and cost ('Spends credits'), which are useful conditions, but it does not explicitly state when to use this tool vs alternatives like generate_video or generate_voice, nor when not to use it. The context is implied but not made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageGenerate ad imageAInspect
Render a finished ad IMAGE and return its served URL. refImages (local paths or URLs) force product-accurate compositing (drops a real product into the scene). MULTI-BRAND CAUTION: useBrand hydration pulls the SAVED workspace brand — when working a brand that is NOT the saved one (a fresh draft_brand), pass that brand's own productImages/logo as refImages (and useBrand:false) or the output composites the WRONG brand's product. NOTE that the saved-brand hydration also decides the ENGINE: attaching product photos routes the render to the compositing model, so a model you named is only honoured when no references ride — pass raw:true (or useBrand:false) to render on exactly the model you asked for. model = a catalog id from hermoso_capabilities (omit for the default). RAW MODEL ACCESS: raw:true dispatches your prompt to the model BYTE-IDENTICAL — no rewriting, no appended guidance, no negative prompt, no brand references attached on your behalf. Credits, the durable delivery of the finished asset and the per-model validation are unchanged. Fast (seconds). Spends credits.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | RAW MODEL ACCESS: run the caller’s prompt on the named model with no Hermoso adjustments at all — the prompt reaches the provider byte-identical (no hex-to-colour-name rewrite, no prepended fidelity preamble) and NO saved-brand product photos are attached, so the model you name is the model that renders. Use it to drive the raw catalog; leave it off for an on-brand ad. Billing, the durable Library landing and per-model validation are unchanged. | |
| model | No | image model id from hermoso_capabilities | |
| prompt | Yes | the full image prompt — subject, composition, lighting, and any on-image ad text | |
| useBrand | No | default true: with no refImages, the server hydrates the SAVED brand’s product/logo references so the output lands on-brand; pass false for a pure prompt-only render | |
| imageSize | No | pixel-size preset for models that support it (e.g. 1K/2K) — omit for the default | |
| refImages | No | local file paths or URLs of product/logo references to composite in | |
| aspectRatio | No | e.g. '1:1', '9:16', '16:9' |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description extensively discloses behavioral traits beyond annotations: it returns a served URL, composites product images when refImages are provided, decides the rendering engine based on whether references are attached, and passes prompts byte-identically when raw:true. It also mentions speed ('Fast (seconds)') and cost ('Spends credits'). These add significant value beyond what annotations (which only say false for readOnly/destructive/idempotent) provide. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and lengthy, with multiple caveats and warnings (MULTI-BRAND CAUTION, RAW MODEL ACCESS). It focuses heavily on edge cases (brand mismatches, engine selection) which are important but verbose. While it starts with the core purpose, it quickly dives into complex scenarios. It is structured with clear headings and readable, but could be more concise by consolidating some repeated points (e.g., repeated mentions of model selection). It earns a 3 for being informative but not optimally 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?
Given the tool's complexity (7 parameters, interactions between refImages, useBrand, raw, and model), the description is thorough and covers all critical aspects: brand hydration pitfalls, engine routing, raw model access, credits, and delivery. It even notes that the served URL is the return value, which compensates for the absence of an output schema. An agent can understand how to call this tool correctly and avoid common errors. Nothing major is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds extra meaning on top, especially for refImages, raw, and useBrand, explaining their interactions (e.g., how useBrand hydration affects the engine, how raw:true bypasses brand attachment). This goes beyond the schema's basic field descriptions, helping the agent understand nuanced behavior. A 4 is appropriate because it enriches, but the schema already provides baseline information.
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 starts with a clear verb-resource pair: 'Render a finished ad IMAGE and return its served URL.' It specifies the resource (ad image) and the outcome (served URL). However, it does not differentiate from sibling tools like render_ad or make_template_ad, which may also generate ad images. The phrase 'ad IMAGE' helps but is not enough to distinguish it from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides detailed guidance on when to set specific parameters (e.g., when to pass refImages, when to use raw:true, when to use useBrand:false) based on the brand context and model selection. However, it does not explicitly state when to use this tool instead of alternatives like render_ad or make_template_ad. It gives context for parameter usage but not tool-selection guidance, so it falls short of the 'when to use this vs alternatives' requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_textGenerate textAInspect
Text generation against the writing-model catalog (Claude, Gemini, GPT, Llama, DeepSeek…) — ad copy, hooks, scripts, rewrites, brainstorms. Prompt-only, no ad assembly (for a finished on-brand creative use plan_ad → render_ad). BY DEFAULT the model answers as a marketing copywriter (a short house system prompt is applied, which is what you want for ad copy); pass raw:true for a plain, unstyled answer from the model itself with NO system prompt at all. model = a writing-model id from hermoso_capabilities (omit for the default Claude orchestrator). Paid (a credit or two by length).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | RAW MODEL ACCESS: send the prompt with NO Hermoso system prompt — the model answers as itself rather than as an ad copywriter. Use it whenever the ask is not marketing copy (analysis, code, extraction, a plain question). Default false: the copywriter framing is applied. | |
| model | No | a writing-model id from hermoso_capabilities (a Claude / Gemini / GPT / Llama / DeepSeek id) — omit for the default | |
| prompt | Yes | the writing task / question |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (all false), the description reveals the default system prompt behavior, how raw:true disables it, and that the operation is paid per length. This is valuable behavioral context not captured in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-organized paragraph that front-loads purpose, then routing, defaults, and cost. Every sentence adds information, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 params and no output schema, the description covers purpose, usage guidance, cost, defaults, and behavior. An agent can determine when and how to call it correctly without needing additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining the model parameter (default Claude orchestrator) and elaborating on raw's effect and when to use it, going beyond the schema's simple 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 clearly states the tool generates text using a catalog of writing models, lists concrete use cases (ad copy, hooks, scripts, rewrites), and explicitly distinguishes itself from render_ad by noting it is prompt-only with no ad assembly. This gives a specific verb-resource pairing and differentiates 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?
It explicitly routes to plan_ad → render_ad for finished on-brand creative, and gives precise guidance on when to use raw:true (whenever the ask is not marketing copy). Also notes the default copywriter framing and the cost implication, providing clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_videoGenerate videoAInspect
Render a RAW video clip from your own prompt and return its served mp4 URL. For finished brand ADS prefer render_ad (it runs the Studio quality pipeline — composited text, clean speech, end card, music); use this for raw/experimental clips or precise manual control. ONE generation = one continuous clip up to the model’s longest listed duration — the longest-clip model in the catalog today renders a full multi-beat spot of up to 30 SECONDS in ONE unbroken take with native synchronized audio, so never assume a generic 8–10s cap and never stitch something that fits one clip; durationSeconds must be one of the model’s durations from hermoso_capabilities, which is the live list. TO GET A SPECIFIC MODEL, NAME IT in model: an unnamed render is routed by the server’s own auto-pool, which is narrower than the catalog, so the longest-clip and highest-resolution models are reached by naming them and not by omitting the field. Renders take 1–3 min. refImage anchors the opening frame; ttsScript adds a voiceover. AUDIO IS NOT FREE AND NOT OPTIONAL BY DEFAULT: a clip delivered with no audio of its own gets a music bed composed and CHARGED on top of the render (see musicMood and audio) — on a cheap short draft the bed can cost as much as the clip. Pass refVideo (a clip URL) to EDIT an existing video instead of generating from scratch — the omni engine transforms that clip per your prompt, inheriting the source clip’s canvas + length (aspectRatio/durationSeconds are ignored for an edit). RAW MODEL ACCESS: your prompt is NOT dispatched verbatim by default — a few small guards are appended (packaging/label safety when no reference image rides, a negative prompt on the models that take one, reference-binding lines when references ride) and hex colour codes are rewritten to colour names. Pass raw:true for none of that. raw:true dispatches your prompt to the model BYTE-IDENTICAL — no rewriting, no appended guidance, no negative prompt, no brand references attached on your behalf. Credits, the durable delivery of the finished asset and the per-model validation are unchanged. Spends credits (Starter plan is video-blocked server-side).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | RAW MODEL ACCESS: dispatch this prompt to the model BYTE-IDENTICAL — no appended packaging/label guidance, no negative prompt, no reference-binding lines, no hex-to-colour-name rewrite. Use it when you want the model itself rather than Hermoso's render craft. Two provider-mandated corrections still apply, because the vendor hard-fails without them: an @ImageN token that outnumbers the references actually shipped is dropped, and a prompt past the endpoint's published character cap is trimmed at a sentence boundary. Billing, durable delivery and per-model validation are unchanged. | |
| audio | No | default true. false = render SILENT: no native model audio, no music bed, and no bed charge held or billed. This is the ONLY way to decline the automatic bed (see musicMood) — leave it alone for anything that should have sound, and do not combine it with ttsScript. | |
| model | No | video model id from hermoso_capabilities. Naming one is a DELIBERATE pick — the server asks before ever swapping it (no silent fallback); omit it to let the router pick | |
| prompt | Yes | the video prompt / shot description (for a refVideo edit, this is the transformation instruction) | |
| refImage | No | local path or URL to anchor the first frame | |
| refVideo | No | URL of an existing video to EDIT rather than generate from scratch — the omni engine accepts a raw clip and transforms it per your prompt, inheriting the SOURCE clip’s canvas (aspect ratio) and length (aspectRatio/durationSeconds are ignored for an edit). Omit to generate a fresh clip. | |
| ttsVoice | No | voice name, e.g. Rachel / George | |
| musicMood | No | WHICH mood the music bed is composed in (upbeat / calm / warm / epic / tense / playful / elegant / hype / chill / dramatic). It does NOT decide WHETHER there is one: a clip that comes back with no audio track — every model hermoso_capabilities lists as "silent", plus any audio model that returned mute — gets a bed composed and CHARGED automatically, at the flat per-track fee hermoso_capabilities reports as explainerMusicCredits, and omitting this field only means the mood defaults to "warm". Pass audio:false for a genuinely silent clip with no bed and no bed charge. | |
| ttsScript | No | voiceover script to speak | |
| resolution | No | '1080p' default (what we ship and bill for); '480p'/'720p' = cheaper draft passes, '4k' = premium final delivery (more credits). NOT EVERY MODEL OFFERS EVERY TIER — this enum is what the tool accepts, and each model's OWN `resolutions` list in hermoso_capabilities is what it can actually render (the longest-clip 30s model, for one, tops out at 720p). Ask for a tier the chosen model does not list and it is rendered at that model's best available tier instead, with nothing in the reply saying so — so check `resolutions` before promising anyone 1080p or 4k. | |
| aspectRatio | No | default '9:16' | |
| durationSeconds | No | length of THIS ONE clip in seconds — pick one of the CHOSEN model’s listed durations from hermoso_capabilities (never a generic guess: the lists differ per model, from 4–8s on the short models up to 30s on the longest-clip one). This is a single continuous generation, so it CANNOT exceed that model’s longest clip: a longer ask is REFUSED with nothing rendered and nothing charged (it is never quietly truncated). Past ~15s only the long-clip models qualify, and an unnamed render is routed by the narrower auto-pool — so NAME the model in `model` when you are asking for a long single take. For a spot longer than any one clip, use plan_ad with durationSeconds then render_ad, which stitches acts of at most one model clip each (on a 15s-clip model, 40s = 15+15+10). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotations false, the description carries the full burden, and it does so thoroughly. It discloses non-obvious behaviors: audio is not free and gets a music bed charged unless audio:false, raw:true changes prompt handling, duration limits cause refusal rather than truncation, and editing ignores certain parameters. These are exactly the behavioral traits an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely long and dense, forming a single paragraph with many intertwined points. While each sentence adds value, the lack of structure and the sheer volume make it hard to parse. It is not concise; it would benefit from bullet points or section breaks. However, it is front-loaded with the core purpose, so it earns a mid-range score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of this complexity (12 parameters, multiple modes, billing implications), the description is exceptionally complete. It covers return format, per-model capabilities, edit behavior, audio billing, and raw access nuances. No critical information appears missing; an agent can call it correctly without external lookup.
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?
Despite 100% schema coverage, the description adds significant meaning beyond the schema. For durationSeconds, it explains per-model duration lists and refusal behavior; for resolution, it clarifies per-model tier limitations and silent fallback; for audio, it details default music bed charging. This context is essential for correct invocation and goes well beyond the raw parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Render a RAW video clip from your own prompt and return its served mp4 URL.' It also distinguishes itself from render_ad by naming the alternative and its use case, so an agent can immediately tell when this tool is appropriate. The purpose is unambiguous and clearly differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool vs. alternatives: 'For finished brand ADS prefer render_ad... use this for raw/experimental clips or precise manual control.' It also covers editing (refVideo) and the need to name a model for long clips, providing clear context for the tool's place among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_voiceGenerate voiceoverAInspect
RAW text-to-speech from the voice-model catalog: speak a script in a chosen voice and return the served MP3 URL. For a standalone voiceover / narration clip — NOT for adding audio to a video (render_ad and generate_video voice their own spots; change_voice re-voices a finished clip). engine picks the voice model (default 'seed-audio'; also 'eleven-v3', 'minimax-speech', 'kokoro'); voice is a preset name from that engine (see hermoso_capabilities → voice engines) — a name that engine does not have is REFUSED for free with its real list, and a few engines generate their own voice and take no preset at all (the reply says which voice actually spoke). Paid (a couple of credits by length; ≤900 characters).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the script to speak (≤900 characters) | |
| voice | No | a voice preset from the chosen engine (e.g. 'Aria'/'George' on eleven-v3, 'stokie_en' on seed-audio) — omit for the engine default | |
| engine | No | voice-engine id: 'seed-audio' (default), 'eleven-v3', 'minimax-speech', or 'kokoro' — listed in hermoso_capabilities |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are sparse (only readOnlyHint=false), so the description carries the full burden — and it delivers. It discloses refusal behavior for unknown voices, engines that auto-generate voice and take no preset, which voice actually spoke, cost in credits by length, and the ≤900-character limit. Rich, actionable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place — purpose, exclusions, engine/voice behavior, and cost are all covered with no filler. It's a bit long and dense in the middle section, and not perfectly front-loaded (exclusions come early, which is good), but efficient and structured for an agent.
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, yet the description states the return (served MP3 URL in the reply) and covers edge cases: refused voices, engines without presets, who actually spoke, cost, and character cap. Complete for a text-to-speech tool that must be called correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful value: clarifies 'engine' is optional with a default, explains how 'voice' semantics differ per engine (predefined preset vs. self-generated), and gives concrete example presets. Adds context beyond the schema without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('RAW text-to-speech... speak a script in a chosen voice and return the served MP3 URL'), then explicitly names the siblings it is not (render_ad, generate_video, change_voice) with their own use cases. No ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when NOT to use it ('NOT for adding audio to a video') and names three alternative tools with the conditions that select them. Also gives concrete usage detail on engine selection and voice preset sourcing. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brandGet saved brandARead-onlyInspect
What Hermoso ALREADY KNOWS for this account/workspace — the same saved brand profile (products, logos, palette, positioning) + learned memory the web Studio uses. Call it when you need to know whether a brand is on file: if hasBrand is true you can omit brand everywhere; if false, onboard with draft_brand. Not a required first step before a render: the create tools read the saved brand by themselves. 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds context beyond annotations: exact return content, the '0 credits' cost note, and the behavioral implication of hasBrand on downstream operations. While it doesn't detail error cases or latency, it enriches the behavior understanding meaningfully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with high information density: first defines the resource, second gives usage decision logic, third excludes a common misconception. No filler, front-loaded with the core definition, and compact despite rich 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?
For a zero-parameter read-only tool with no output schema, the description covers all essentials: what it returns, when to call, when not to call, the hasBrand flag's role, and the alternative path. An agent has everything needed to decide and invoke correctly without missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema reflects that with 100% coverage (empty properties). Per the rubric, a baseline of 4 applies for 0 params. The description doesn't need to explain parameters and instead clarifies the output, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (get) and resource (saved brand profile including products, logos, palette, positioning, and learned memory). It distinguishes itself from siblings like list_brands by specifying it retrieves the account/workspace's own brand, not a list. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call it when you need to know whether a brand is on file' and provides conditional guidance (if hasBrand true/false), plus names the alternative draft_brand for onboarding. Also states when not needed ('Not a required first step before a render'), giving clear when-to-use and when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_business_locationRead a Google Business Profile listingARead-onlyInspect
Read everything Google holds on one of the brand’s Google Business Profile listings — business name, address, phone numbers, website, categories, description, regular and special hours, service area, labels, store code, open state, and whether the listing can carry a Post at all. This is the listing AS THE MERCHANT LAST SET IT, which is exactly what update_business_location edits; it can differ from what Google Maps shows today, because Google and the public can suggest changes on top. Call it before offering to change anything, and to answer “what does our Google listing actually say?”. Read-only, 0 credits. Needs Google Business Profile connected (Settings ▸ Connectors ▸ Google Business Profile).
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | No | which listing, e.g. 'locations/123' from list_business_locations — only needed when more than one is shared with this brand |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds value by explaining that the returned data is the merchant-set listing, which can differ from Google Maps due to suggested changes. It also discloses it is read-only, costs 0 credits, and requires a specific connection. This goes beyond the annotations by clarifying the semantic difference between the tool's output and the public-facing state.
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 lengthy but well-structured: it opens with purpose, lists fields, then clarifies the merchant-set vs. public distinction, then provides usage guidance, and finally notes prerequisites. Every clause adds functional information, and the field list is useful despite being verbose. It is front-loaded with the primary purpose, making it easy to scan.
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 tool with one optional parameter and no output schema, the description fully covers what the tool returns (by enumerating fields), when to use it, the key nuance of merchant-set vs. Google Maps, and the connection prerequisite. It also notes the cost in credits. Nothing essential is missing for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for locationId is already rich: it explains the parameter selects a listing and only needs to be provided when multiple are shared, even giving an example. The tool description itself does not add further parameter details, so it doesn't add value beyond the schema. With 100% schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('Google Business Profile listing'), enumerates the exact fields returned, and explicitly contrasts it with the sibling update_business_location ('exactly what update_business_location edits') and with Google Maps' public state. This removes any ambiguity about what the tool does and how it differs from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs when to call the tool ('Call it before offering to change anything, and to answer what does our Google listing actually say?') and explains the nuance that it returns the merchant-set version rather than the public Maps view. It also notes the prerequisite connection. It doesn't explicitly state when not to use it, but the clear context and distinction from alternatives cover most usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drive_fileGet a Drive file’s detailsARead-onlyInspect
Fetch one Drive file’s metadata — name, type, size, modified time, a webViewLink to open it and a webContentLink to download it. Pass fileId (from list_drive_files). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | the Drive file id (from list_drive_files) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds concrete behavioral detail beyond the annotations (readOnlyHint, destructiveHint): it exactly specifies the metadata fields returned and the two links (webViewLink and webContentLink). This goes beyond a mere read-only hint, providing the agent with expected output. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first lists the returned fields, the second provides input sourcing and a read-only note. Every word is functional, no filler, and the most important information (what it does) is front-loaded. Perfectly sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only fetch tool with no output schema, the description fully compensates by listing the expected return fields and providing the input provenance. It gives the agent everything needed to call the tool correctly: how to get the fileId, what to expect in return, and that it is safe (read-only). Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter fileId is fully documented in the schema (100% coverage), and the description repeats the source ('from list_drive_files') without adding new semantics. Since schema coverage is high, the baseline is 3; the description does not meaningfully enhance understanding of the parameter 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?
The description explicitly states the verb 'fetch' and the resource 'one Drive file's metadata', and lists the specific fields returned (name, type, size, modified time, webViewLink, webContentLink). This clearly distinguishes it from sibling tools like list_drive_files (many files), update_drive_file (mutation), and delete_drive_file (deletion). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it tells the agent to pass a fileId from list_drive_files, implying the correct workflow (list first, then fetch details). It also notes the tool is read-only, guiding safe usage. However, it does not explicitly mention when not to use it or contrast with alternatives like get_onedrive_file, leaving some inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobGet render jobARead-onlyInspect
Poll a render job by id. Returns status (queued|running|done|error), progress, and on done the served media URL. Renders take 1–3 minutes: keep calling this until done/error without asking the user — several calls is normal, not a stall. An id that does not exist on this account answers status "not_found" — that is FINAL: stop polling it, and do not re-fire the render (that double-charges).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the job id, e.g. job_xxx |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds valuable behavioral context: the polling loop, expected latency, and the terminal nature of 'not_found' with charging implications. This goes well beyond the annotations, giving the agent a full picture of the tool's runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. The first sentence states the purpose and return values, the second explains polling behavior and timing, and the third addresses the edge case of not_found. No redundant sentences; each earns its place, and key operational guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and no output schema, the description is complete. It explains all return fields (status, progress, URL), the polling pattern, and terminal conditions. No aspect an agent needs to call it correctly is missing, and given the lack of an output schema, the description fulfills the role admirably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for the 'id' parameter ('the job id, e.g. job_xxx'). The tool description does not add new semantic detail about the parameter itself, but it does contextualize how the id is used (e.g., polling, not_found handling). Since the schema adequately describes the parameter, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls a render job by id and returns status, progress, and served URL on completion. It distinguishes itself from sibling tools like list_jobs and render_ad by specifying the polling action and the specific resource. The verb 'poll' and the resource 'render job' make the purpose 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?
Explicit usage guidance is provided: it instructs to keep polling until done/error without pestering the user, notes normal polling duration (1–3 minutes), and warns that a 'not_found' status is final and should stop polling to avoid double-charging. This tells the agent exactly when to use the tool, how long to persist, and when to stop, clearly differentiating it from alternatives like re-rendering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_onedrive_fileGet a OneDrive file’s detailsARead-onlyInspect
Fetch one OneDrive item’s metadata — name, type, size, modified time, a webViewLink to open it and a webContentLink to download it. Pass fileId (from list_onedrive_files). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | the OneDrive item id (from list_onedrive_files) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, and the description's 'Read-only' aligns with these. The description adds valuable context beyond annotations by specifying the exact metadata fields returned (name, type, size, modified time, webViewLink, webContentLink), which the annotations do not convey. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The action and key output fields are stated first, followed by the parameter source. Efficient and well-structured, making it quick for an agent to parse and understand the tool's purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with annotations covering safety, the description fully specifies the action, the exact return fields, and the parameter source. No missing information is needed to call the tool correctly. The absence of an output schema is compensated by the description listing all metadata fields returned, making it 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?
The schema already fully describes the single parameter: fileId is 'the OneDrive item id (from list_onedrive_files)'. The description repeats this verbatim without adding format, constraints, or examples. With schema coverage at 100%, the description provides no additional semantic value, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and resource ('one OneDrive item's metadata') and enumerates the exact fields returned (name, type, size, modified time, webViewLink, webContentLink). It clearly differentiates from sibling tools like get_drive_file (Google Drive) and list_onedrive_files (listing multiple items) by specifying the single-item scope and the OneDrive service.
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 instructs to 'Pass fileId (from list_onedrive_files)', establishing the prerequisite workflow (list first, then fetch details). It does not explicitly name alternative tools for update/delete or other storage services, but the read-only note and metadata-fetch scope implicitly guide usage. This provides clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_post_refillPosting refill statusARead-onlyInspect
Show the automatic posting refill for this brand: whether it is on, whether it is in dry-run (preview) mode, how many days ahead it fills, its render budget, when it next runs, and how many posts are queued right now. It also names the channels that CANNOT be posted to and why. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so the safety profile is covered. The description adds value by detailing what the tool returns (dry-run mode, render budget, blocked channels and reasons) and by noting 'free' — a cost signal not in annotations. It also indicates scoping to 'this brand', implying reliance on brand context. No contradiction with annotations; the extra info improves transparency beyond the metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose and then enumerates the returned fields efficiently. It packs substantial detail into about 70 words without redundancy. While it is a long sentence, it is well-structured and every clause adds distinct information. It could be slightly tighter, but it is appropriate for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the full burden of explaining what the agent will receive. It lists all key return items: on/off status, dry-run mode, days ahead, render budget, next run time, queued posts, and blocked channels with reasons. It also notes 'read-only' and 'free'. This is thorough for a status-query tool, leaving no major 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?
The tool has zero parameters, so the schema covers them trivially. With no params, the baseline is 4, and the description does not need to add parameter details since there are none. The description correctly avoids mentioning nonexistent parameters, keeping it clean. No additional semantic burden exists.
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 ('Show') and resource ('automatic posting refill for this brand'), then enumerates the exact attributes returned (on/off, dry-run, days ahead, budget, next run, queued posts, blocked channels). This clearly distinguishes it from sibling tools like set_post_refill and run_post_refill, which modify or execute the refill rather than just displaying status.
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 its use for checking status via 'Show' and explicitly states 'Read-only, free', but it does not explicitly state when to use this over alternatives or when not to use it. There is no mention of comparing with set_post_refill or run_post_refill. The guidance is implicit rather than explicit, so it falls short of a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_settingsRead app settingsARead-onlyInspect
Read this account's app settings — the LANGUAGE Hermoso writes ads, copy and answers in, the app appearance (theme), and whether the weekly competitor-watch email is on. Same settings as the web app's Settings pane. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's 'Read-only' is redundant. However, it adds valuable context about what settings are returned (language, theme, email) and that it mirrors the web app, which goes beyond the structured fields. The description does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with zero wasted words. The action ('Read') is front-loaded, and the details about which settings are included and the cost ('free') are presented efficiently. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with no parameters and no output schema, the description is complete. It tells the agent exactly what it will retrieve, that it is read-only and free, and relates it to the web app for familiarity. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100% (empty schema). Since there are no parameters to document, the baseline is 4, and the description correctly focuses on what the tool returns rather than parameter inputs. No additional parameter guidance is 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 states the specific verb 'read' with the resource 'app settings' and enumerates the actual settings (language, theme, weekly email). It also notes it matches the web app's Settings pane, making the tool's role clear. The distinction from siblings like update_settings is evident from the 'Read-only' phrasing.
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 clearly states it is read-only and free, which implies it should be used for viewing settings and not for modifications. However, it does not explicitly name the alternative (update_settings) or give an explicit when-not-to-use condition beyond the read-only hint. This is clear context without exclusion criteria, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_skillGet skillARead-onlyInspect
Load a bundled skill’s full SKILL.md workflow instructions by name (from list_skills). Follow the loaded instructions to run that workflow with the other tools. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | bundle name from list_skills, e.g. hermoso-generate |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds 'Read-only, free,' reinforcing the safety profile and introducing a cost-free trait. It also explains that the output is workflow instructions to follow, which adds behavioral context beyond the annotations. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundancy. The core action and resource are front-loaded, and the safety/free note is placed at the end without bloating the text. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, and annotations covering safety), the description is complete. It tells the agent what the tool does, where to find the input, and how to use the result. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a descriptive parameter name and example ('bundle name from list_skills, e.g. hermoso-generate') with 100% coverage. The description repeats the source ('from list_skills') but adds no new meaning about the parameter itself, so it stays at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Load'), a specific resource ('bundled skill's full SKILL.md workflow instructions'), and a clear input source ('by name from list_skills'). It naturally distinguishes itself from sibling tools like list_skills (which lists names), save_skill, and delete_skill by focusing on retrieval for execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to first get names from list_skills and then follow the loaded instructions to run the workflow. This provides a clear when-to-use context. It doesn't explicitly mention alternatives or when-not-to-use, but the workflow is implied: load when you need instructions for a skill you intend to execute.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tiktok_mentionRead one mention from the TikTok mentions webhookARead-onlyInspect
Read the full detail of a SINGLE mention: a mentioning post, or a mentioning comment if you pass commentId as well. This exists for the TikTok mentions WEBHOOK: the event carries only ids, and this turns one into the caption, the creator, the engagement and the thumbnail. TIKTOK ONLY GUARANTEES THE DATA FOR 48 HOURS after the event fires, so a queue that retries tomorrow gets nothing. For anything older read it out of list_tiktok_mentions or list_tiktok_mention_comments instead. itemId is required either way, comment or not. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION with the brand-insights permission. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | defaults to every field TikTok publishes for that kind | |
| itemId | Yes | the post id. It is `video_id` in the webhook event content, or itemId from list_tiktok_mentions. REQUIRED even when reading a comment | |
| commentId | No | pass this to read a mentioning COMMENT rather than a mentioning post |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint false, so the description's note that it's read-only and free adds minimal new safety info. However, it adds valuable context about data retention (48-hour guarantee) and authorization requirements, going beyond the annotations without contradicting them.
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 dense with information but each sentence serves a purpose: purpose, operational context, time sensitivity, alternatives, and requirements. It's slightly longer than strictly necessary but not verbose; the structure front-loads the core functionality and then layers constraints, making it efficient for an agent.
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 tool with three parameters and no output schema, the description covers all needed context: what data is returned (caption, creator, engagement, thumbnail), when to use it (webhook event, within 48h), what prerequisites exist (authorization), and aliases for alternatives. Nothing an agent needs to decide or invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already describes each parameter's purpose (including requiredness and comment selection). The description adds extra semantic context like the mapping of itemId to video_id, the default behavior of the fields parameter, and clarifies that itemId is required even for comments – this goes beyond schema definitions, justifying a score above 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 tool reads the full detail of a single mention (post or comment), explicitly distinguishing it from list tools. It names the resource (TikTok mention) and the specific scenarios (webhook context) with precise verbs, leaving no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool (within 48 hours of webhook event) versus alternatives (list_tiktok_mentions/list_tiktok_mention_comments for older data). It also mentions the required authorization, guiding the agent on prerequisites and fallback options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tiktok_post_ad_authorizationRead a post’s Spark-Ads authorization statusARead-onlyInspect
Read the Spark-Ads authorization status of a post the authorized account owns — whether it is promotable, its authorization CODE, and the window the authorization runs for. A SPARK AD CANNOT OUTLIVE ITS AUTHORIZATION, so check the end time before building a campaign around a post. TIKTOK ERRORS RATHER THAN ANSWERING when a post has no authorization code at all, so a not-found style refusal from here almost always means Ad authorization was never turned on (or the code was deleted) — turn it on with set_tiktok_post_ad_authorization — and not that anything is broken. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status). Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | the TikTok post id |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, openWorldHint=true, destructiveHint=false), the description adds crucial behavioral context: the warning that a Spark Ad cannot outlive its authorization, the specific error behavior when no authorization code exists, and the prerequisite for TikTok account authorization. This far exceeds the structured metadata and is actionable for the agent.
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 informative and front-loaded, but it is somewhat long with multiple sentences, including emphatic caps. While every sentence earns its place, the length could be slightly trimmed without losing value. However, it is well-organized and avoids fluff, so it's above average. A 4 reflects appropriate density with minimal 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 read-only tool with one parameter and no output schema, the description is remarkably complete. It explains what data to expect (promotable, code, window), how to interpret failures, and lists a prerequisite. There are no obvious gaps that would prevent correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter itemId, which is described as 'the TikTok post id.' The description adds context that the post must be 'owned by the authorized account,' but this doesn't materially enrich the parameter's meaning beyond the schema. According to calibration, baseline 3 is appropriate when schema covers parameters well and description adds only marginal value.
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 (read), resource (Spark-Ads authorization status of a post), and the data it returns (promotable, code, window). It clearly distinguishes from sibling tools like set_tiktok_post_ad_authorization and delete_tiktok_post_ad_authorization by naming the read-only nature and the exact subject.
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 explicitly says when to use: 'check the end time before building a campaign around a post.' It also prescribes what to do when the tool returns a not-found error: turn it on with set_tiktok_post_ad_authorization. This provides clear usage direction and alternatives, going beyond mere implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_business_accountGoogle Business Profile account for a listingARead-onlyInspect
Read the Google Business Profile ACCOUNT that owns one of the brand’s listings — the account name, its type (a personal Google account, a location group, a user group or an organization), the connected user’s role on it (primary owner / owner / manager / site manager), the account’s verification state and the permission level. Use it to answer “can we actually edit this listing?” and “whose account is it on?” before offering an edit that Google would refuse anyway. It reads exactly ONE account — the parent of a listing already shared with this brand — and never lists the other accounts the connected Google login can reach; that roster belongs to the account picker (list_connector_accounts). Read-only, 0 credits. Needs Google Business Profile connected.
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | No | which listing, from list_business_locations — only needed when more than one is shared with this brand |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description adds valuable behavioral context: it explicitly says 'Read-only, 0 credits', clarifies it reads exactly ONE account (the parent of a shared listing), and states the dependency on Google Business Profile being connected. This goes well beyond the annotation signals.
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 detailed but every sentence serves a purpose: it starts with the core action, then the use case, then the scope limitation and sibling reference, and ends with the requirement. No redundancy or filler; the structure is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers what an agent needs to decide to call this tool: it lists the returned fields, explains the connection prerequisite, and clearly delimits its scope (exactly one account, no listing of other accounts). With annotations covering safety and a simple single-parameter schema, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the single parameter (locationId) with its source, and the description adds the condition for when it's needed ('only needed when more than one is shared with this brand'), which is not in the schema. Since schema coverage is 100%, the baseline is 3, but the added usage context raises it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('Google Business Profile ACCOUNT that owns one of the brand's listings'), and enumerates the exact data fields (name, type, role, verification state, permission level). It distinguishes itself from sibling list_connector_accounts by explicitly stating what it does NOT list, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit use case ('answer
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_business_insightsGoogle Business Profile performanceARead-onlyInspect
How the brand’s Google Business Profile listing actually performed — impressions on Google Search and Maps (desktop and mobile), calls, website clicks, direction requests, messages and bookings — over the last N days. For a local business this is the real-world demand signal, and it is the number an ad campaign should be judged against. NOTE: Google discontinued PER-POST insights in February 2023 and published no replacement, so these are listing-level figures and per-post performance genuinely does not exist in any API — do not promise it. Read-only, 0 credits. Needs Google Business Profile connected.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | how many days back, default 30 | |
| metrics | No | optional subset of Google’s daily metrics (BUSINESS_IMPRESSIONS_DESKTOP_MAPS, BUSINESS_IMPRESSIONS_DESKTOP_SEARCH, BUSINESS_IMPRESSIONS_MOBILE_MAPS, BUSINESS_IMPRESSIONS_MOBILE_SEARCH, BUSINESS_CONVERSATIONS, BUSINESS_DIRECTION_REQUESTS, CALL_CLICKS, WEBSITE_CLICKS, BUSINESS_BOOKINGS, BUSINESS_FOOD_ORDERS, BUSINESS_FOOD_MENU_CLICKS). Omit for all of them. An unknown name is refused rather than quietly dropped, so a total is never reported under a metric you did not get. | |
| locationId | No | which listing, from list_business_locations |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, destructiveHint), the description adds 'Read-only, 0 credits' (which the annotations do not cover) and the connection requirement. It also discloses the limitation that per-post insights are not available in any API, preventing false promises. This is significant additional behavioral context beyond what annotations provide, and there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly detailed but each sentence carries purpose: it states the core function first, then contextualizes the value for local businesses, warns about per-post limitations, and concludes with operational facts (read-only, credits, connection). It is slightly verbose but not wasteful, and the key purpose is front-loaded. A 4 reflects that it is effective though not maximally 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 read-only reporting tool with three optional parameters and a full schema, the description covers usage rationale, prerequisites, and limitations. It does not specify the exact output format (e.g., daily series vs. totals), but given no output schema and the overall simplicity, the description is mostly complete. The per-post caveat is critical and included, making it reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides thorough descriptions for all three parameters (days, metrics, locationId), including the full list of accepted metric names. The main description adds minimal extra meaning beyond 'over the last N days' and the general list of metrics; it does not elaborate on parameter syntax or the locationId source. Since schema coverage is 100%, the baseline is 3 and the description adds little additional value for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (Google Business Profile listing) and the specific metrics returned (impressions, calls, clicks, etc.), and distinguishes this from per-post insights by explicitly noting that Google discontinued them. It is a specific verb-less noun phrase but unambiguously describes a retrieval operation, and it differentiates from sibling analytics tools by naming the platform and the listing-level scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use context: 'For a local business this is the real-world demand signal, and it is the number an ad campaign should be judged against.' It also notes the prerequisite of a connected Google Business Profile. It implicitly warns against using it for per-post data by stating such data does not exist, but it does not explicitly mention alternative tools or conditions for using them. The guidance is clear enough but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_business_search_keywordsWhat people searched to find this businessARead-onlyInspect
The actual search terms people typed on Google Search and Maps before this business listing appeared — the only keyword data a local business gets for free, and the direct input to their Google Ads keyword set, page titles and profile description. google_business_insights answers HOW MANY people found the listing; this answers WHICH WORDS they used. ⚠ LOW-VOLUME TERMS ARE SUPPRESSED: Google withholds an exact count for them and returns only an upper bound, so those rows come back with impressions=null and below=. Report those as “fewer than N” — NEVER as zero and never as the threshold itself, both of which are numbers a marketer would act on and neither is true. Counts are UNIQUE USERS per month summed across the window, not impressions; the two are not comparable. Google keeps roughly 12 months of history. Read-only, 0 credits. Needs Google Business Profile connected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max terms, default 100, which is also Google’s maximum | |
| months | No | how many whole months back, default 3, cap 12. The current month is excluded because it is always partial. | |
| pageToken | No | nextPageToken from a previous call | |
| locationId | No | which listing, when the brand has more than one (list_business_locations) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral context beyond that: low-volume term suppression with exact semantics (impressions=null and below=<threshold>), the instruction to report as 'fewer than N' not zero or threshold, the fact that counts are unique users per month summed across the window rather than impressions, and the ~12-month retention. This is exactly the kind of hidden behavior an agent needs to avoid misreporting.
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 long but every sentence carries important operational information: purpose, sibling contrast, the suppression warning, the metric definition, retention, and prerequisites. It is front-loaded with the core purpose and key caveat. While slightly dense, it avoids fluff and is appropriately structured for a tool with non-obvious data quirks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does a good job explaining what the tool returns (keyword terms with impressions and a 'below' threshold for suppressed rows) and how to interpret those. It also covers prerequisites, retention, and metric type. It could be more explicit about the exact response structure (e.g., array of objects), but it gives enough that an agent can anticipate the shape and handle nulls correctly. Slight gap on precise response format, but otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all four parameters have clear descriptions (limit, months, pageToken, locationId). The description does not add new parameter-level meaning beyond what the schema already provides, but it does clarify the broader context (that limits and months affect what keywords are returned). With full schema coverage, baseline is 3 and the description doesn't rise above that since it doesn't deepen parameter knowledge.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the actual search terms people used to find the business on Google Search and Maps. It uses a specific verb (search keywords) and resource (business listing), and explicitly differentiates from the sibling tool 'google_business_insights' by contrasting HOW MANY vs WHICH WORDS. This leaves no ambiguity about what the tool does and how it differs from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the sibling tool and explains the decision boundary: 'google_business_insights answers HOW MANY people found the listing; this answers WHICH WORDS they used.' It also states practical uses (direct input to Google Ads, page titles, profile description), a prerequisite (Google Business Profile connected), and a critical caveat (low-volume terms suppressed). This gives the agent clear guidance on when to invoke this tool and what to expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermoso_capabilitiesStart here: what Hermoso can do and what it costsARead-onlyInspect
Probe what this Hermoso account can do RIGHT NOW: available image/video model ids + their exact credit costs, aspect ratios, video durations, the recipe ids, and the canEdit/canAvatar flags. Call it when you need a specific model id, an exact cost, or a capability you are not sure of. It is NOT a prerequisite for rendering: generate_image, generate_video and render_ad all run with model omitted and route to the server’s own default. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and destructiveHint, and the description reinforces this with 'Read-only, free.' It adds useful context beyond annotations: the response is a live snapshot ('RIGHT NOW'), it carries exact credit costs, and it is not a prerequisite for rendering. This goes beyond what annotations alone convey.
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-loaded. The first sentence immediately conveys the tool's purpose and payload; the second gives usage conditions and an important exclusion. Every sentence adds value, with no repetition of schema fields or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only capability probe with no output schema, the description is complete: it lists the exact kinds of information returned, states when to call it, and clarifies that rendering works without it. Nothing an agent needs to decide whether and how to call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, which makes parameter semantics trivially satisfied. The description appropriately focuses on the returned capabilities rather than parameters. Baseline for zero parameters is 4, and no additional parameter explanation is 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 states a specific verb ('Probe') and a clear resource (this Hermoso account's current capabilities: model ids, credit costs, aspect ratios, durations, recipe ids, flags). It also distinguishes itself from siblings by explicitly naming generate_image, generate_video, and render_ad as tools that do not require 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?
It gives explicit call conditions: when you need a specific model id, exact cost, or are unsure of a capability. It also states when NOT to use it as a prerequisite, naming the rendering tools and explaining they route to server defaults without it. This is clear when-to-use/when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermoso_creditsCredit balanceARead-onlyInspect
Return the account credit balance, the credits this account has spent on the calls listed, and those recent priced calls. Check before kicking off paid generation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds value by specifying the exact data returned (balance, spent credits, recent calls) and the usage hint, but it remains vague about the structure of 'recent priced calls' and does not describe any other behavioral nuances. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, two sentences, with the primary purpose front-loaded. The phrasing 'the credits this account has spent on the calls listed, and those recent priced calls' is a bit clunky but not overly verbose. It earns a high score for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and annotations that already cover safety, the description provides the key information: what it returns and when to use it. It doesn't detail return formatting or edge cases, but for a simple read-only balance check, it is sufficiently complete 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?
The tool has zero parameters, so there is no schema to compensate for. Per the rubric, a baseline of 4 is appropriate when there are no parameters, and the description does not need to explain parameter handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the account credit balance, spent credits on calls, and recent priced calls. This is a specific verb (return) and resource (credits), and it distinguishes itself from siblings like buy_credits or billing_status by focusing on the credit balance and associated call history.
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 explicit instruction 'Check before kicking off paid generation' provides a clear when-to-use context, which is helpful for an agent deciding to initiate paid actions. While it doesn't list exclusions or alternative tools, the primary usage scenario is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hide_thread_replyHide or unhide a Threads replyAIdempotentInspect
Hide a reply on the brand’s Threads post (or unhide it with hide:false) — for spam and abuse moderation.
| Name | Required | Description | Default |
|---|---|---|---|
| hide | No | false to UNHIDE (default true) | |
| replyId | Yes | reply id from list_threads_replies |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint and destructiveHint=false, so the mutation is safe and repeatable. The description adds the crucial behavioral detail that hiding is reversible via hide:false, and clarifies that it is a visibility toggle rather than a deletion. This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the action and resource. It packs the toggle behavior and purpose without any fluff, making it highly efficient for an agent to parse.
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 what is done, how to reverse it, and the purpose. It also references list_threads_replies implicitly via the replyId schema, giving agents a clear path to obtain the ID. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both hide and replyId are clearly documented in the schema, including the default of hide and the source for replyId. The description does not add meaning beyond the schema; it merely repeats the toggle behavior, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific action ('Hide a reply'), the resource ('brand's Threads post'), and the toggle behavior ('or unhide it with hide:false'). It clearly distinguishes from sibling tools like delete_thread (which would remove the thread) and reply_to_thread (which adds content). The mention of 'spam and abuse moderation' clarifies intent.
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 a clear use case ('for spam and abuse moderation') and implies the tool is for single replies rather than whole threads. It does not explicitly name alternatives or state when not to use it (e.g., versus deleting the thread), but the context is sufficient for an agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instagram_collaboratorsCheck who accepted a collab inviteARead-onlyInspect
Did the collab invites on an Instagram post get accepted? Reports every collaborator on one of the brand’s OWN Instagram posts with the status Instagram actually holds for it — Accepted (the post is live on their profile too, and its reach now includes their followers), Pending (invited, sitting in their notifications, NOT yet on their profile) or Declined. This is the tool for “did @creator accept yet?”, and the only way to find out: Instagram sends no notification either way. The media id is what post_to_meta returned as postId, or any id from list_instagram_media. A post with no collaborators simply reports none. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Facebook Page id — omit when only one Page is connected | |
| mediaId | Yes | the Instagram media id — post_to_meta returns it as postId, list_instagram_media lists the account’s own posts |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint, destructiveHint) by stating it's read-only and costs 0 credits, and explaining the exact behavioral implications: it reports the actual status Instagram holds, including detailed semantics for Accepted, Pending, and Declined. It also notes that posts without collaborators report none, which is useful behavioral context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: it front-loads the purpose and status definitions, explains the uniqueness, provides the mediaId source, and clarifies read-only/cost. Though packed, it remains structured and avoids fluff. The length is justified by the need to explain the three statuses and the tool's exclusivity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters (one required), a clear scope, and no output schema, the description fully covers what an agent needs: it explains the return format (statuses per collaborator), the source of the mediaId, the limitation to own posts, and the behavior with no collaborators. Nothing critical is missing 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?
The input schema already has 100% description coverage for both parameters. The description adds extra meaning by specifying that mediaId comes from post_to_meta's postId or list_instagram_media, and that it must be the brand's own post. It also implicitly reinforces that pageId can be omitted when only one Page is connected, matching the schema description. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: reporting collaborators on an Instagram post with their acceptance status. It uses a specific verb ('reports') and resource ('collaborators on an Instagram post'), and explicitly differentiates itself from siblings by noting it is 'the only way to find out' and that it works only on the brand's own posts, distinguishing it from list_instagram_media and post_to_meta.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it states this tool answers 'did @creator accept yet?' and explains why it's the only way (Instagram sends no notification). It also clarifies the scope (own posts) and how to obtain the mediaId from other tools (post_to_meta's postId or list_instagram_media). This makes the decision to invoke it unambigous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instagram_insightsInstagram account insights + audience demographicsARead-onlyInspect
ACCOUNT-level performance for the brand’s connected Instagram Business account — views, reach, accounts engaged, total interactions, likes, comments, shares, saves, profile link taps, replies, reposts and follows/unfollows — plus the AUDIENCE DEMOGRAPHICS (follower_demographics and engaged_audience_demographics, broken down by age, city, country or gender), which is the read that says WHO the content reached rather than how many. Use meta_post_insights for one post and meta_page_insights for the Facebook Page. THERE IS NO "impressions": Meta deprecated it for every API version on 2025-04-21 and replaced it with "views" — an unknown metric is refused by name rather than quietly dropped. Instagram returns NO demographics for an account under 100 followers (or under 100 engagements in the window), and an absent block means exactly that, never an empty audience. Read-only, 0 credits. Needs Meta connected with an Instagram Business account linked to the Page.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | YYYY-MM-DD window start | |
| until | No | YYYY-MM-DD window end | |
| pageId | No | Facebook Page id the Instagram account is linked to — omit when only one Page is connected | |
| period | No | aggregation for reach, the one time-series metric (default day) | |
| metrics | No | account metrics (default: views, reach, accounts_engaged, total_interactions, likes, comments, shares, saves, profile_links_taps). Add follower_demographics or engaged_audience_demographics for the audience, which also needs a breakdown. | |
| breakdown | No | contact_button_type / follow_type / media_product_type for account metrics; age / city / country / gender for the demographic metrics (exactly one) | |
| timeframe | No | window for the demographic metrics only (default last_30_days) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only, 0 credits.' It goes beyond annotations by warning about the deprecated 'impressions' metric, stating that an unknown metric is refused by name, and explaining that an absent demographics block means exactly that (never an empty audience). These are non-obvious behaviors critical for correct use.
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 about 150 words but every sentence earns its place. It front-loads the primary purpose and scope, then efficiently covers alternatives, the impressions pitfall, the demographics threshold, and prerequisites. No fluff or redundancy; it is information-dense yet readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 params, no output schema, multiple metric groups), the description covers all essential context: it lists the metric families, explains the absence behavior, notes the deprecation trap, and states the connectivity requirement. An agent can invoke this tool correctly and reliably without needing to inspect the schema further.
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?
Although schema coverage is 100%, the description adds crucial cross-parameter semantics: it clarifies that demographics (follower_demographics/engaged_audience_demographics) require a breakdown, that breakdown values differ between account metrics and demographic metrics, and that timeframe applies only to demographic metrics. It also lists default metrics, which the schema does not. This goes well beyond the basic field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (return ACCOUNT-level performance) and resource (Instagram Business account), and immediately differentiates from siblings by naming meta_post_insights and meta_page_insights as alternatives for different scopes. It also clarifies the extra value of audience demographics, making the tool's distinct purpose unmistakable.
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 explicit says 'Use meta_post_insights for one post and meta_page_insights for the Facebook Page', providing clear when-not-to-use conditions. It also explains the absence of 'impressions' and the threshold for demographics, giving concrete situational guidance beyond just a generic when-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instagram_profileLook up an Instagram account by handleARead-onlyInspect
Turn an Instagram @handle into the NUMERIC Instagram account id, straight from Meta — with the account’s real name, bio, follower count, post count, website and profile picture. Two jobs: it answers "what is @’s Instagram id?", and it sizes up any brand or creator on Instagram before you work with them (followers and post count are Meta’s own numbers, not a scraper’s). CALL IT BEFORE manage_meta_partnership_creator: that tool’s allowTagging list takes NUMERIC IDS ONLY, and an id that did not come from Meta is rejected there with “An unknown error has occurred.” — an error carrying no cause at all, so a scraped or guessed id looks like an outage instead of a bad argument. PROFESSIONAL ACCOUNTS ONLY: Meta reads Instagram Business and Creator accounts here and nothing else. A personal account, a private account, an age-gated account and a handle that does not exist all come back as the SAME refusal, because Meta returns one error code for all four — so never tell a user which of them it was. Read-only, 0 credits, no new permission, no reconnect.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | the Instagram handle — "fellowproducts", "@fellowproducts" or an instagram.com profile link all work. Meta matches it EXACTLY and does not strip a leading @, so Hermoso normalises it first. | |
| pageId | No | Facebook Page id — omit when only one Page is connected. Meta requires the lookup to be made AS a professional account, so the Page must have an Instagram account linked. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only and non-destructive, and the nvs description adds substantial behavioral context beyond that: Meta matches exactly, the @ is normalized by Hermoso, all unsupported account categories are collapsed into one identical error, and repeated non-Meta IDs produce a misleading 'unknown error'. Operational facts like 0 credits, no new permission, and no reconnect are also useful.
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 main purpose is front-loaded and every sentence contributes meaningful operational detail. The all-caps CALL IT BEFORE and PROFESSIONAL ACCOUNTS ONLY create useful emphasis, but the description forms a dense long block, and the scraper-vs-Meta and same-refusal explanation could be split more cleanly 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 two-parameter tool with no output schema, this description is unusually complete: it names the return values, the valid input forms, the key sibling dependency, the account-type restriction, the error-equivalence behavior, and even tells the agent what never to tell a user. An agent can invoke it correctly and anticipate response ambiguity without any further offline context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The schema already documents both the handle formats/@normalization and the pageId omission rule; the description itself does not duplicate parameter-level specifics. That is correct behavior since the structured data carries the parameter semantics at the right level of detail.
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 very specific job — converting an Instagram @handle into Meta's numeric account ID — and lists the data it also returns (name, bio, followers, posts, website, profile picture). It explicitly contrasts itself with scrapers and names the dependent tool, manage_meta_partnership_creator, so the agent can distinguish this from nearby sibling lookup tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage scenarios: answering 'what is this handle's Instagram ID?' and vetting a brand/creator before working with them. It also states an explicit call-order dependency — use this before manage_meta_partnership_creator because that tool requires numeric Meta-provided IDs — and defines the hard constraint that only professional accounts work and all failure modes return the same refusal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_memberInvite a teammateAInspect
Invite someone to this brand workspace by email (role: member = read-only on billing, admin = full). This SENDS a real email invite / share link — an account change. Confirm the exact email + role with the user, then call with confirm:true.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | default member | |
| Yes | the invitee’s email | ||
| confirm | No | REQUIRED true — this invites a real person |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by explicitly stating 'This SENDS a real email invite / share link — an account change.' This is critical context that readOnlyHint=false alone does not convey. The requirement to call with confirm:true further clarifies the consequence, making the agent fully aware of the irreversible, real-world impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first states the core action and role semantics; the second immediately front-loads the high-stakes nature and the necessary confirmation. No wasted words, and the most important caveat is placed early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple three-parameter tool with no output schema, the description covers the main purpose, role semantics, and the confirmation requirement. It does not mention prerequisites (e.g., being an admin) or post-invite behavior, but these are not essential for the agent to call it correctly. The explanation is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described, but the tool description adds valuable semantics: it explains the role meaning ('member = read-only on billing, admin = full') and reinforces that confirm must be true to send. This enriches the schema descriptions beyond just field labels.
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 ('Invite') and resource ('someone to this brand workspace by email'), and distinguishes itself from sibling tools like remove_member and set_role by focusing on adding a new member. It also clarifies the role implications ('member = read-only on billing, admin = full'), leaving no ambiguity about what the tool does.
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 context on when to use the tool ('Invite someone to this brand workspace') and includes a strong usage guideline: 'Confirm the exact email + role with the user, then call with confirm:true.' It does not explicitly compare against alternatives like set_role or remove_member, but the action is unambiguous and the confirmation requirement is a helpful behavioral guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_connectorRemove my own account from a shared connectionADestructiveIdempotentInspect
On a connector that several teammates can contribute their OWN account to (see list_connectors — the row reports multiContributor), remove YOURS from this brand: your stored credential is dropped and the accounts you shared stop being shared. Your teammates' accounts on the same connection keep working, and nothing changes at the provider — reconnecting in a browser shares again. Use this instead of disconnect_connector when the connection is not yours to remove: disconnect_connector revokes the grant at the provider and only the person who created the connection may call it.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | provider id exactly as list_connectors reports it, e.g. "linkedin", "tiktok_ads", "meta" |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, readOnlyHint false), the description details the precise scope: only the user's own credential is dropped, teammates' accounts remain, provider unchanged, and reconnecting in a browser restores sharing. This adds valuable behavioral context annotations do not convey, such as reversibility and effect on others.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each packing relevant information: effect on self, effect on others/provider, and usage directive. It is slightly longer but information-dense, with critical info front-loaded. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single-parameter destructive operation with annotations covering safety and a clear explanation of side effects and prerequisites (checking list_connectors), the description is fully adequate. No missing details an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'provider' parameter with examples and reference to list_connectors, so coverage is 100%. The description does not add extra parameter-specific semantics beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: removes the user's own account from a shared connection, dropping stored credentials and stopping shared accounts. It clearly distinguishes from disconnect_connector by explaining the difference in effect and ownership, so an agent can tell them apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use this tool instead of disconnect_connector when the connection is not yours to remove, and references list_connectors to determine multiContributor status. This gives clear when-to-use and when-not-to-use guidance, including an alternative and its prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_page_analyticsOrganic performance of a LinkedIn company PageARead-onlyInspect
ORGANIC performance for one of the brand’s LinkedIn COMPANY PAGES: total followers, followers gained (organic vs paid) across the window, Page views (all / unique / desktop / mobile), and the impressions, unique impressions, clicks, likes, comments, shares and engagement rate of the Page’s posts. This is what answers “is our LinkedIn actually working” and “did that post land”. It is NOT linkedin_ads_report — that covers PAID campaigns; LinkedIn excludes sponsored activity from these figures entirely. Pass postUrns (the urn:li:share:… / urn:li:ugcPost:… that post_to_linkedin_page returned) for PER-POST numbers; LinkedIn forbids a date range together with named posts, so that switches to lifetime-per-post. Only Pages the user ticked in Manage accounts are readable — a Page the account merely administers is refused, by design. LinkedIn keeps 12 months, follower figures run about 2 days behind, and it OMITS posts with no recorded activity rather than returning zeros: report an absent post or an unavailable section as MISSING data, never as zero. Read-only, 0 credits. Needs LinkedIn connected with the organization scopes.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | YYYY-MM-DD, default today | |
| postUrns | No | urn:li:share:… / urn:li:ugcPost:… — switches to per-post lifetime numbers instead of the Page total | |
| startDate | No | YYYY-MM-DD, default 28 days ago (LinkedIn keeps 12 months) | |
| organizationId | No | numeric Page id from list_linkedin_pages — omit only when exactly one Page is shared with this brand |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true and destructiveHint: false, and the description reinforces this with 'Read-only, 0 credits.' It adds substantial behavioral context beyond annotations: data runs about 2 days behind, LinkedIn omits posts with no activity rather than returning zeros (and instructs to report MISSING, not zero), and it explains the permission refusal 'by design.' These are exactly the kind of non-obvious behaviors an agent needs to handle correctly.
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 dense but every sentence earns its place. It front-loads the core function and metrics, then contrasts with the sibling, then provides the postUrns behavior, permission constraint, data quirks, and final read-only note. The structure is logical: what, why, how, constraints, caveats. There is no filler or repetition, despite the 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?
Given the tool's complexity and the absence of an output schema, the description is remarkably complete. It covers the metrics, the difference between page-level and per-post data, the date-range constraint, permission requirements, data lag, retention, missing-data handling, read-only nature, and the prerequisite (LinkedIn connected with organization scopes). An agent has everything it needs to invoke the tool correctly and interpret results appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a description for each parameter (100% coverage), so baseline is 3. The description goes well beyond that: it explains postUrns by specifying their format and where they come from (what post_to_linkedin_page returned) and the consequent switch to lifetime-per-post; it explains the organizationId omission rule; it gives defaults for startDate (28 days ago) and notes the 12-month retention. This adds operational meaning that the schema alone does not convey.
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 opens with a precise statement of what it does: 'ORGANIC performance for one of the brand’s LinkedIn COMPANY PAGES' and enumerates the exact metrics (followers, gained, views, impressions, engagement). It clearly distinguishes itself from the paid advertising tool by naming linkedin_ads_report and stating LinkedIn excludes sponsored activity. The verb and resource are unambiguous, and it tells the agent exactly what questions it answers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use reasoning with the phrasing 'This is what answers “is our LinkedIn actually working”' and directly contrasts with the paid counterpart: 'It is NOT linkedin_ads_report — that covers PAID campaigns.' It also gives detailed usage for postUrns (how to obtain them from post_to_linkedin_page and the lifecycle switch) and a clear permission constraint (only Pages ticked in Manage accounts). No alternative is left ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bluesky_convosList Bluesky direct-message conversationsARead-onlyInspect
Read the connected Bluesky account’s DM conversations — who each one is with, how many messages are unread, and whether it is a REQUEST (someone the account does not follow, which Bluesky holds separately, the same idea as a message request). Free, no ScrapeCreators credits, no vendor approval: AT Protocol app passwords are not scoped. It DOES need a PRIVILEGED app password — one created with direct-message access ticked — and says so precisely if the saved one cannot chat, which is a property of the password and NOT a broken connection. Filters: readState "unread", status "request" or "accepted", kind "direct" or "group". An unknown filter value is refused by name, never silently dropped.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | how many conversations, 1–100 (default 25) | |
| cursor | No | walk further back — pass the cursor from a previous call | |
| status | No | "request" = from someone this account does not follow | |
| readState | No | only conversations with unread messages |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description adds crucial behavioral details: the requirement for a privileged app password, error distinction between a bad password and a broken connection, filter validation behavior (refuses unknown values by name), and cost implications (free, no credits). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but slightly verbose, packing multiple sentences of access and error details. It is front-loaded with the core purpose and then covers filters and edge cases. Each sentence adds value, but it could be tightened without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 3 enums, no output schema), the description covers all key aspects: purpose, filters, access requirements, error behavior, and cost model. An agent has enough information to decide when to use it and how to construct valid calls, with no obvious 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 80% (4 of 5 params), missing description for 'kind'. The description compensates by explicitly listing all filter values (readState, status, kind) and clarifying the meaning of 'request'. It adds value beyond the schema by explaining filter refusal behavior, though most parameters are already documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (Bluesky DM conversations), the action (read/list), and the key outputs (who, unread count, REQUEST status). It differentiates from sibling tools by specifying it is a list operation, distinct from read_bluesky_dm, send_bluesky_dm, and mark_bluesky_convo_read.
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 context for when to use this tool (to read the account's DM conversations) and explains critical access requirements (privileged app password). However, it doesn't explicitly name alternatives or state when not to use it, such as when needing to read a specific message (use read_bluesky_dm).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bluesky_postsList the brand's own Bluesky postsARead-onlyInspect
The brand's OWN recent Bluesky posts, newest first — and THIS is where the at:// AT-URI every other Bluesky tool needs comes from. bluesky_post_metrics and delete_bluesky_post both address a post by AT-URI, so without this the only way to hold one was to have just published it in the same conversation; an agent reviewing past work had no way to name anything. Each row carries the text, when it went out, its web URL, its live like/repost/reply/quote/bookmark counts, and whether it is a REPOST of someone else's post or a reply — a repost is not the brand's own creative and must not be reported as its performance. Optional filter: posts_no_replies, posts_with_media, posts_with_replies, posts_and_author_threads (an unknown one is refused by name). Bluesky publishes NO impression or view count in any lexicon, so these are counts with no denominator and no engagement rate can be computed from them. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many posts, 1–100 (default 25). 100 is Bluesky's own maximum. | |
| cursor | No | nextCursor from a previous call — a short page is NOT end-of-feed | |
| filter | No | posts_no_replies | posts_with_media | posts_with_replies | posts_and_author_threads |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds substantial behavioral detail beyond those: it is 'Read-only, 0 credits', Bluesky publishes no impression/view counts so no engagement rate can be computed, an unknown filter is refused by name, and reposts are not the brand's own creative and must not be reported as performance. These are critical behavioral disclosures not available in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place. The first sentence immediately states the purpose and the critical AT-URI dependency, front-loading the most important information. Subsequent sentences cover row fields, repost semantics, filter values, the lack of impression counts, and the credit cost. There is no redundant or filler content; the length is justified by the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return fields: text, timestamp, web URL, live engagement counts, and the repost/reply flag. It also explains the core use case (AT-URI source), filter semantics, and data limitations (no impressions, no engagement rate). It even anticipates potential misinterpretation of reposts. An agent has everything needed to select and call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter (limit, cursor, filter) already has descriptive text. The description adds minimal but useful semantics: it reiterates the filter options and adds that an unknown filter is refused by name, which is not in the schema. It also implies the cursor is for pagination but the schema already explains that. The incremental value is modest but present, so a 4 fits.
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 the verb 'List' and the resource 'the brand's own Bluesky posts' with ordering 'newest first'. It explicitly distinguishes this tool from siblings by explaining it is the source of the at:// AT-URI that bluesky_post_metrics and delete_bluesky_post depend on, and it contrasts with list_bluesky_convos and post_to_bluesky. This makes the tool's unique role 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?
The description names the dependent tools (bluesky_post_metrics, delete_bluesky_post) and the exact scenario where this tool is required: an agent reviewing past work has no other way to obtain an AT-URI. It also gives a behavioral exclusion (reposts must not be reported as brand performance) and lists the available filters. This provides clear when-to-use and when-not-to-misuse guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brandsList brandsARead-onlyInspect
List every brand on this account (id + name) and which one this connection currently acts on, PLUS any brand another account shared with you (a team workspace). Multi-brand accounts: call this, then use_brand to switch. A SHARED workspace is switched into the SAME way — pass its name or the profile id printed here to use_brand. If a brand looks empty (no connected accounts, no Library) when the app shows it full, you are almost certainly acting on a different workspace: call this first. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds valuable behavioral context beyond annotations by explaining that the tool returns the current acting workspace and shared workspaces, and that switching is done via use_brand with either name or profile id. It also discloses the subtle behavior of acting on a different workspace when brands appear empty. These insights are not derivable from annotations or schema, making the description highly transparent.
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 dense but every sentence earns its place: core behavior, usage with use_brand, shared workspace switching details, troubleshooting, and a closing note on read-only and free. Information is front-loaded with the main function, and the structure flows logically from what it does to how to use it to edge cases. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description must explain return values, which it does: id + name, current acting brand, and shared brands. It also covers usage context (switching with use_brand) and a potential pitfall (empty-looking workspaces). With zero parameters and annotations covering safety, the description provides everything an agent needs to correctly call and interpret this 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?
There are zero parameters, so schema coverage is trivially 100%. The description doesn't need to explain parameters, and the baseline for 0 params is 4. It adds no parameter-related information because there is none, which is appropriate. No gaps to penalize.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List every brand on this account (id + name) and which one this connection currently acts on, PLUS any brand another account shared with you.' It specifies the resource (brands), the output (id + name, current acting brand, shared workspaces), and differentiates from siblings by explicitly naming use_brand as the follow-up action. No ambiguity about what this tool does.
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 explicit usage guidance: 'Multi-brand accounts: call this, then use_brand to switch.' It also warns when to call it first: 'If a brand looks empty... call this first.' This directly tells the agent when to use this tool and how it fits with use_brand, covering both normal and troubleshooting scenarios without redundancy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_business_locationsList Google business listingsARead-onlyInspect
List the Google Business Profile listings SHARED WITH THIS BRAND — id, title, address, website and Maps link. These are the only listings anything here can post to or read: one Google login often manages several businesses (an agency manages its clients’), and the user ticks which of them belong to this brand. Call this before posting whenever more than one is shared and let the USER pick: a Post on the wrong storefront is a public mistake Hermoso will not make for them. If nothing is shared, ask the user to choose — list_connector_accounts("google_business") then set_connector_accounts — and never name or guess a listing. Read-only, 0 credits. Needs Google Business Profile connected (Settings ▸ Connectors ▸ Google Business Profile).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it explains the multi-business nuance (one login manages several businesses, user ticks which belong to brand), states it's read-only and 0 credits, and notes the prerequisite (Google Business Profile connected). This goes well beyond the readOnlyHint/openWorldHint annotations and prepares the agent for the actual 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?
Though the description is long, every sentence earns its place. It front-loads the core purpose and return fields, then provides usage guidance, error handling, and prerequisites. The structure flows logically from what → when → what-if, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no parameters and no output schema, so the description must carry the full burden of explaining invocation and results. It covers return fields, the notion of brand-shared listings, when to call it, what to do in the empty case, and connection requirements. Nothing an agent needs to correctly invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 0 parameters, and the schema is empty (100% coverage), so the baseline is 4. The description adds value by explaining what the tool returns (id, title, address, website, Maps link) and the context of shared listings, which aids in understanding the tool's purpose even though no parameters need explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Google Business Profile listings shared with the brand, specifies the returned fields (id, title, address, website, Maps link), and distinguishes it from sibling list tools by emphasizing it's the only source for brand-shared listings. This is a specific verb+resource with clear scope, and it differentiates from related tools like list_google_business_posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to call this tool ('Call this before posting whenever more than one is shared'), what to do if nothing is shared (use list_connector_accounts then set_connector_accounts), and instructs to never name or guess a listing. It also names the alternative tools for the error case, providing clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connector_accountsList a connector’s accountsARead-onlyInspect
Show every identity a connected account can act as, and which ones this BRAND is currently allowed to use — Facebook Pages + Instagram + Meta ad accounts, Google Ads customers, LinkedIn company Pages (and the personal profile), Pinterest ad accounts, Microsoft Advertising accounts. One person often administers several; only the ticked ones can be posted to or spent from. Call this before set_connector_accounts, and let the USER pick — never guess. Providers: meta, google_ads, linkedin, pinterest_ads, linkedin_ads, reddit_ads, apple_ads, microsoft_ads, google_business, google_analytics, snapchat_ads, x_ads, tiktok_ads, google_tag_manager, google_search_console, bing_webmaster. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | which connector’s accounts to list |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint and destructiveHint, but the description adds context that accounts can have multiple identities and that only ticked ones are usable for posting or spending. It also explains the 'allowed to use' concept and provides a provider list, adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-organized paragraph that front-loads the purpose, gives examples, then usage guidance, then provider list. It is reasonably concise given the amount of context it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single parameter and no output schema, the description explains what the tool returns (identities and allowed status) and how to use it (before set_connector_accounts). It covers the provider list and safety (read-only). It is complete 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?
The schema only gives a one-line description for provider. The description adds examples for some providers (e.g., Facebook Pages, Google Ads customers) and enumerates all provider values in prose, giving context beyond the bare enum. While it doesn't describe each provider individually, it provides additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists identities a connected account can act as and which ones the brand is allowed to use. It distinguishes from set_connector_accounts by referencing it as the next step, and from list_connectors by focusing on accounts within a connector.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this before set_connector_accounts' and instructs to let the user pick, never guess. This provides clear when-to-use and directs to an alternative tool. Also notes it's read-only and free, which helps decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connectorsList connectorsARead-onlyInspect
List the third-party accounts connected to this workspace (Meta, Google Ads, Google Drive/Sheets/Docs, YouTube, LinkedIn, OneDrive, Slack, …) — provider, status and the connected account label — PLUS which providers are available to connect. IT ALSO FLAGS A CONNECTION WHOSE PERMISSIONS ARE OUT OF DATE: a provider writes its granted permission set into the token at consent time, so a connection authorized before a permission was approved does not carry it and never will — those calls are refused by the provider and no retry or wait can change it. Check this FIRST when a connected provider starts refusing things. The fix is a browser: the user reconnects under Workspace ▸ Connectors. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint annotation by explaining the permission-staleness behavior: a provider writes its granted permission set into the token at consent time, so connections authorized before a permission was approved will never carry it, and calls will be refused regardless of retries. It also states 'Read-only, free,' reinforcing the annotation and adding cost info. This adds significant diagnostic value beyond the structured metadata.
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 verbose but well-structured. It front-loads the main listing function and available providers, then introduces the important permission-flag behavior and troubleshooting guidance. While the permission explanation is detailed, it is essential for the tool's use case and earns its place. The structure (main function, then caveat, then fix) is logical and not repetitive.
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 no-parameter, read-only tool with no output schema, the description is comprehensive. It covers what is listed (provider, status, label), that available providers are included, and the crucial stale-permission detection, including the fix. It leaves no ambiguity about the tool's purpose or how the results should be interpreted, making it fully self-contained for an agent.
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 has zero parameters, so the schema is trivially complete. Per the rubric, the baseline is 4 for 0-param tools. The description does not need to explain parameters, and it doesn't, but it appropriately focuses on the tool's output and behavior. It doesn't add anything about parameters because there are none, which is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing third-party accounts connected to the workspace, including provider, status, and label, plus which providers are available. It also adds a specific diagnostic feature—flagging out-of-date permissions—which distinguishes it from generic list tools and sets it apart from siblings like list_connector_accounts by covering both connected accounts and available providers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Check this FIRST when a connected provider starts refusing things.' This suggests when to use the tool in a troubleshooting workflow. It also directs the user to the browser-based fix (Workspace ▸ Connectors). It does not explicitly contrast with alternative tools, but the context makes its role clear among the many list_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_creatorsList saved creatorsARead-onlyInspect
List this workspace’s SAVED CREATORS — the reusable on-camera cast (AI creators made here, a person pulled from a social profile, a consented photo upload). Read-only, FREE. Each entry gives the name, the PORTRAIT URL, where the portrait came from and whether a real person’s likeness consent is on file, how many extra pose plates exist, and any chosen or cloned voice. TO PUT ONE IN A FINISHED AD, pass their id or name as render_ad’s creator — that casts them for the whole spot (and skips the character-portrait render, so it costs less than not casting anyone). THE PORTRAIT URL IS THE REUSE HANDLE for the raw lanes — pass it as generate_avatar’s image (a talking clip of them), generate_video’s refImage (they star in the scene), recast_motion’s image (they perform a reference clip’s motion), or generate_image’s refImages. CALL THIS BEFORE OFFERING TO GENERATE A NEW PERSON: re-casting somebody the workspace already has keeps the SAME face across every ad, while a fresh person costs credits and breaks that continuity. An empty answer means the workspace genuinely has no cast yet — say so and offer generate_avatar / save_creator, never invent a roster.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max creators to return (default 24) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description builds on that by adding the 'FREE' note, the nature of the returned data (portrait URL, consent flag, pose plates, voice), and that an empty list means genuinely no cast exists. It also reveals the indirect cost implication when reusing a creator vs generating a fresh one. That goes beyond annotations without contradicting them, though it stops short of detailing pagination or potential latency issues.
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 dense but every sentence earns its place. It starts with the core purpose, then details the output fields, then cross-references how to reuse the results, and finally gives explicit usage timing and fallback behavior. No filler, and the most important usage guidance is front-loaded. The length is justified by the complexity of downstream integrations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by fully enumerating the returned fields (name, portrait URL, provenance, consent status, pose plates, voice) and how to interpret each. It explains the empty response case and exactly how to use the data with other tools. For a list tool, this is exceptionally complete — it even covers cost implications and continuity guidance, so an agent can act correctly on the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — the only parameter 'limit' is fully described ('max creators to return (default 24)'). The description does not add further detail about the parameter, which is acceptable given the schema already covers it. The baseline of 3 applies because the description adds no extra semantic value beyond the schema for this single parameter.
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 the specific verb 'list' and resource 'saved creators', defines what a creator is (on-camera cast, with examples), and explicitly differentiates from sibling tools by explaining how the output is consumed downstream (render_ad, generate_avatar, etc.). It is far more specific than just 'list creators' and leaves no ambiguity about what the tool returns.
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 explicit when-to-use guidance ('CALL THIS BEFORE OFFERING TO GENERATE A NEW PERSON') and reasons (cost savings, continuity), and also explains the empty-answer case with an alternative path (offer generate_avatar/save_creator). It names specific alternative tools (save_creator, generate_avatar) and the condition for using them, leaving no inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_drive_filesList Google Drive filesARead-onlyInspect
List the Google Drive files & folders Hermoso can reach — the ones it created, plus any the user handed over with the Google file picker in the app (the drive.file scope exposes nothing else, never their entire Drive). This is how you find the id of a file the user picked. Filter by query (name contains …), folderId (contents of a folder), or onlyFolders:true. Paginate with pageToken. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | only files whose name contains this | |
| folderId | No | list the contents of this folder id | |
| pageSize | No | rows per page (1–200, default 50) | |
| pageToken | No | cursor from a previous call | |
| onlyFolders | No | list folders only | |
| includeTrashed | No | include trashed files (default false) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only.' It adds behavioral context about the scope (drive.file exposes nothing else, never their entire Drive) and mentions pagination. It doesn't describe return format, but the annotations cover the safety profile well and the scope explanation is genuinely valuable beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact paragraph with every sentence earning its place. It front-loads the purpose and scope, then gives concrete usage instructions, then confirms read-only. No filler or redundancy.
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 listing tool with six parameters and no output schema, the description fully covers what the agent needs: the scope limitation, how to filter, pagination, and the primary use case (finding file ids). It also aligns with the openWorldHint by noting the picker flow. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is documented. The description adds value by grouping filters ('query... folderId... onlyFolders:true') and explicitly mentions pageToken for pagination, which clarifies usage patterns beyond individual schema descriptions. It doesn't add info on pageSize or includeTrashed, but the schema already covers those, and the description's guidance on filtering and pagination is a meaningful enhancement.
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 ('List') with a clear resource ('Google Drive files & folders Hermoso can reach'), and explicitly defines the scope (files it created plus user-picked files via drive.file scope, never the entire Drive). It also names a key use case ('find the id of a file the user picked'), which distinguishes it from generic list tools and from siblings like list_onedrive_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the tool with concrete filtering options ('Filter by query... folderId... onlyFolders:true') and pagination ('Paginate with pageToken'). It implies when to use it by explaining the scope limitation and the use case for finding a file id. However, it does not explicitly state when to prefer alternatives (e.g., list_onedrive_files) or when not to use it, though the scope discussion implicitly covers that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_errorsList errors users hitARead-onlyInspect
The errors actually recorded against this workspace, GROUPED by fingerprint — the same failure at the same call site is one row with a hit count and first/last seen, sorted defects-first. Each row says whose side it is: ours (a defect worth fixing), user (a refusal we deliberately authored, e.g. not-connected or out-of-credits), or unknown (a vendor 4xx we cannot attribute — never guessed). Free text, tokens, emails and creative are redacted before anything is stored, so an input echo shows shapes and lengths, not content. Filter by surface (http/mcp/agent/job/client) or kind. Read-only, 0 credits. Scoped to your own workspace; an operator whose client carries the admin key sees every account.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | 'ours' = a defect; 'user' = a refusal we authored; 'unknown' = we could not tell | |
| limit | No | how many groups to return (default 50, max 200) | |
| since | No | ISO timestamp — only groups last seen at or after this | |
| surface | No | where it happened: http (an API route), mcp (an agent tool), agent (the in-app Studio agent), job (an async render/publish), client (a browser crash) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it explains grouping by fingerprint, sorting defects-first, classification of errors into ours/user/unknown, redaction of sensitive data, and scoping rules including admin key behavior. This is rich, non-redundant information that helps the agent understand exactly what the tool does and its limitations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes critical information. It front-loads the core purpose (grouping and sorting) then adds attribution semantics, redaction policy, filtering options, and scoping. Despite its length, there is zero verbosity; each clause earns its place. The structure flows logically from what the tool does to how data is handled.
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 list tool with four optional parameters, the description covers all necessary context: what is returned (grouped rows with hit counts and first/last seen), the classification of sides, redaction of sensitive content, filtering dimensions, read-only and cost implications, and scoping. With no output schema, the description adequately implies the return shape. No critical information for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all four parameters, each with detailed descriptions of their meaning and enums. The tool description does not add any additional parameter-specific information; it merely restates filtering options. With high schema coverage, the baseline of 3 is appropriate as the description does not need to compensate but also does not add extra value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'list_errors' lists errors recorded against a workspace, grouped by fingerprint, with sorting and attribution. It distinguishes itself from sibling tools like 'error_detail' by describing the grouped, filterable nature of the listing. The verb 'list' plus the resource 'errors' is explicit and 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?
The description provides contextual guidance (read-only, scoped to workspace, 0 credits) but does not explicitly state when to use this tool versus alternatives. It mentions filtering by surface and kind but does not say 'use this instead of error_detail' or outline specific conditions. The guidance is implied rather than explicit, falling short of the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_google_business_postsList Google Business Profile PostsARead-onlyInspect
List the Posts currently on the brand’s Google Business Profile listing — text, topic type, state (LIVE / PROCESSING / REJECTED / SCHEDULED / RECURRING), button and timestamps. Use it to see what is already showing before writing another, or to get the id of one to remove. Read-only, 0 credits. Needs Google Business Profile connected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many to return, max 100 (default 20) | |
| locationId | No | which listing, from list_business_locations — only needed when there is more than one |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint/destructiveHint annotations by adding 'Read-only, 0 credits' and a connection requirement. It also discloses the set of possible post states (LIVE / PROCESSING / REJECTED / SCHEDULED / RECURRING), which is useful behavioral context. No contradiction with annotations, and it adds value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences that front-load the core action and return fields, then immediately give practical usage. There is zero redundancy, and every clause earns its place. It reads as an efficient, well-structured guidance blurb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters and no output schema, the description is nearly complete. It lists the returned fields, the states, the read-only nature, credit cost, and connection prerequisite. It doesn't mention pagination or sorting, but the limit parameter covers pagination, and the tool's simplicity makes this a minor gap. Overall, it gives an agent everything needed 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 coverage is 100% because both parameters (limit and locationId) have clear descriptions. The tool description does not add parameter-level detail beyond the schema, but the schema already fully documents them (including default and max for limit, and the source for locationId). Baseline 3 is appropriate; it neither compensates nor detracts.
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 ('List') and a precise resource ('Posts currently on the brand's Google Business Profile listing'), and enumerates the exact fields returned (text, topic type, state, button, timestamps). This clearly distinguishes it from sibling list tools like list_google_business_questions and list_google_business_reviews, and aligns with the paired delete tool (delete_google_business_post).
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 provides two use cases: checking what's already showing before writing another post (prelude to post_to_google_business) and retrieving the post id for removal (feeding delete_google_business_post). It also notes a prerequisite ('Needs Google Business Profile connected'). It does not explicitly name alternatives or state when not to use, but the purpose and context are clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_google_business_questionsRead the Q&A on a Google Business listingARead-onlyInspect
The questions the public has asked on the brand’s Google Business Profile listing, with the answers so far and how many people upvoted each question. Unanswered questions sit publicly on the listing and are read as "this business does not respond" — the reply names the ones with no answer at all. Read-only, 0 credits. Needs Google Business Profile connected and the project approved.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1–20, default 10 | |
| pageToken | No | ||
| locationId | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds unique value: it explains the 0-credit cost, interprets unanswered questions as 'this business does not respond', and names the reply behavior. This goes beyond annotations without contradicting them.
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 efficient: two sentences, front-loading the main purpose and then adding nuance. The second sentence is a bit dense but still readable. 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?
The description covers what data is returned (questions, answers, upvotes), the business interpretation of unanswered questions, and prerequisites. However, it omits how 'locationId' selects a specific listing (likely required) and does not mention pagination despite the pageToken parameter. Not fully complete for a multi-listing context.
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 schema description coverage is only 33% (only 'limit' has a description). The description does not explain 'pageToken' or 'locationId' at all, so it fails to compensate for the low schema coverage. It adds no meaning beyond what the schema provides for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'list/read the Q&A on a Google Business listing' and details the content (questions, answers, upvotes). It clearly distinguishes from sibling review/post tools by focusing on Q&A, so an agent can select it correctly.
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 prerequisites (needs Google Business Profile connected and project approved) and notes read-only/0 credits, but does not explicitly state when to prefer this over alternatives like list_google_business_reviews or answer_google_business_question. Context is clear but no exclusions or routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_google_business_reviewsRead the reviews on a Google Business listingARead-onlyInspect
The reviews customers have left on the brand’s Google Business Profile listing — star rating, reviewer, the text, when it landed, and whether the business has replied. For a local business this is the highest-leverage surface there is: an unanswered review sits on the listing next to the ad you paid for. The reply says which ones have NO answer yet, so you can work the list rather than read it. Google reports the listing’s own average rating and total review count alongside the page — use those for "how are we doing", never a mean you computed over one page. An empty page is an empty PAGE, not proof the listing has no reviews. Read-only, 0 credits. Needs Google Business Profile connected AND the project approved for Google’s Business Profile APIs (a pending access request, not a setting — the error says so).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1–50, default 20 | |
| orderBy | No | default newest first | |
| pageToken | No | ||
| locationId | No | which listing — omit when only one is shared with this brand |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint), the description adds meaningful behavioral insights: '0 credits', the requirement for a connected Google Business Profile and project approval (with an error-interpretation hint), and the critical caveat that an empty page does not imply no reviews—only an empty page. These are non-obvious behaviors that an agent needs to correctly interpret results, far exceeding what annotations alone provide.
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 longer than minimal but each sentence adds value—starting with the core data, then usability ('work the list rather than read it'), then interpretation pitfalls, and finally prerequisites. It is front-loaded with the purpose, but the motivational language ('highest-leverage surface', 'ad you paid for') could be trimmed without losing essential information. Still, it is structured and not rambling, so it earns a 4.
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?
Despite lacking an output schema, the description covers what the response contains (star rating, reviewer, text, date, reply status), how to interpret aggregate metrics, handling of empty pages, prerequisites, and error scenarios (pending access request). For a read-only list tool with annotations already covering safety and open-world behavior, this description is comprehensive—nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes three of four parameters (limit, orderBy, locationId) with 75% coverage; the missing one (pageToken) has no description. The description does not explain any parameter semantics—it doesn't mention how limit, orderBy, or pageToken behave, nor does it add meaning beyond the schema. Given the high schema coverage, the baseline of 3 is appropriate; the description neither adds nor detracts.
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 opens with a clear statement of the resource—'The reviews customers have left on the brand’s Google Business Profile listing'—and enumerates the exact data points (star rating, reviewer, text, date, reply status). The title 'Read the reviews on a Google Business listing' reinforces the verb and resource. It differentiates implicitly from siblings like reply_to_google_business_review and list_google_business_posts by focusing on reading reviews, not acting on 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?
The description provides strong contextual usage guidance—why this is the 'highest-leverage surface' and how to correctly interpret the aggregate rating/count from Google rather than computing your own mean. It also states a prerequisite (connection and API approval). However, it does not explicitly mention alternatives or when not to use this tool (e.g., 'use list_google_business_posts for posts'), so it stops short of a full when/when-not differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hooksThe hook + setting libraries, and which hooks are workingARead-onlyInspect
The curated menu of VISUAL scroll-stop HOOKS (how an ad opens) and SETTINGS (where it is staged) that plan_ad and render_ad accept, PLUS this brand's measured traction per hook. Call it before planning an ad to pick a hook deliberately instead of letting the model improvise one, and call it after publishing to see which ones are actually landing. Three things it will not do: it never recommends a hook from thin data — a verdict is SUPPRESSED below 5 measured posts and the reason is stated; it never compares across channels; and it reports hooks you have NEVER TRIED as a fact, not as advice, because 'you haven't tried this' is an observation and 'you should' would be a verdict drawn from zero data. A hook marked unusable in this brief says WHY (an on-screen-text hook cannot ride an authentic/UGC render, which carries zero on-screen text). Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | product tier, used with category — changes the FINISH of the room, never the room. Default premium. | |
| channel | No | restrict the performance half to one channel (facebook, instagram, threads, x, linkedin, youtube, tiktok, reddit, pinterest) | |
| category | No | the product category (e.g. 'skincare serum', 'protein powder', 'sunglasses') — returns the setting Higgsfield's Location x Tier matrix puts that category in, with the reason | |
| authentic | No | true if the planned ad is an authentic/UGC/creator-register render — on-screen-text hooks are then reported unusable, with the reason |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds substantial behavioral context: verdicts are suppressed below 5 measured posts with the reason stated, no cross-channel comparisons, never-tried hooks reported as observation not advice, and unusable hooks explained (e.g., on-screen-text cannot ride authentic/UGC). It also states 'Read-only, 0 credits,' reinforcing the readOnly hint. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes: it opens with the core content, then usage timing, then three explicit limitations, and a concrete example of why a hook is marked unusable. It is structured with clear enumerations ('Three things it will not do') and front-loads the primary purpose. The length is justified by the tool's complexity and the need to convey important caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately describes what the tool returns: the menu of hooks/settings and measured traction per hook. It covers edge cases (suppressed verdicts with reasons, never-tried hooks, unusable hooks with explanations) and explains the effect of parameters. It does not detail the exact output structure, but the description is sufficient for an agent to call it correctly and interpret results. Complete for a read-only listing 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 coverage is 100% with each parameter already having a detailed description (e.g., tier explains it changes finish, constant never room; authentic explains on-screen-text hooks reported unusable). The description adds context beyond the schema by clarifying channel usage ('never compares across channels') and authentic's impact on hook usability. It integrates parameter behavior into the overall narrative, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: listing the curated menu of VISUAL scroll-stop HOOKS and SETTINGS accepted by plan_ad and render_ad, along with measured traction per hook. It names the resource (hooks/settings) and the consumers, clearly distinguishing it from sibling tools like plan_ad and render_ad. The verb 'list' is implied through 'menu' and 'call 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 explicitly gives usage timing: 'Call it before planning an ad to pick a hook deliberately instead of letting the model improvise one, and call it after publishing to see which ones are actually landing.' It also provides exclusions: it never recommends from thin data, never compares across channels, and reports never-tried hooks as fact, not advice. This is clear when-to-use and when-not-to-use guidance without naming alternatives because the tool is a menu consumed by other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inboxOne inbox for comments, replies, mentions, reviews and DMsARead-onlyInspect
EVERYTHING PEOPLE SAID TO THIS BRAND, across every connected channel, in one list: Facebook and Instagram comments, Threads replies and mentions, YouTube and Reddit comments, Google Business reviews, Bluesky replies and mentions, and X mentions — plus DIRECT MESSAGES on Meta (Messenger and Instagram Direct), Bluesky, X and Telegram. Use this for 'what do I need to reply to', 'any new comments', 'any new DMs', 'how are people responding'. Each item carries a composite id you hand straight to reply_to_inbox_item. A channel that is not connected is skipped silently; a channel that FAILS to read is named in notes rather than dropped, so a short list is never mistaken for a quiet week. DMs are read one conversation at a time and fold to ONE item — the newest thing the other person said — so pass conversationId (from list_meta_conversations, list_bluesky_convos or list_x_dms) to include them. FREE ON EVERY CHANNEL EXCEPT X, which bills per API call — X mentions and X DMs cost credits per item returned, and every other source only re-reads what the per-channel tools already read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items per source (default 25). | |
| postId | No | Restrict Facebook/Instagram to one post or media id (Meta reads comments per post). | |
| sources | No | Limit to these sources: facebook, instagram, threads, meta_dm, meta_webhook, threads_mention, youtube, reddit, google_business, x, bluesky, bluesky_mention, bluesky_dm, x_dm, telegram_dm. Omit for every connected channel. | |
| videoId | No | Restrict YouTube to one video. | |
| conversationId | No | Restrict DMs to one conversation (from list_meta_conversations, list_bluesky_convos or list_x_dms). DMs are read per conversation, and on X reading one costs credits. | |
| unansweredOnly | No | Only items with no reply from the brand yet. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint and destructiveHint already mark this as a safe read operation, the description adds crucial behavioral detail annotations cannot convey: skipped disconnected channels, failed channels named in notes, DMs collapsed to one newest message per conversation, and X-item-level billing. This is exactly the kind of context an agent needs.
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 long but well-ordered: resource scope first, then typical use cases, then item semantics and important caveats. The ALL-CAPS and heavy list format make it slightly overpacked, but each section genuinely contributes information an agent needs to invoke the tool correctly.
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 an open-world read-only aggregation tool with no output schema, the description is unusually complete: it covers behavior across many source types, explains failure and billing semantics, describes the composite id flow to the reply tool, and tells the agent how to include DMs. Nothing essential for a first-call decision is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all 6 parameters with 100% description coverage, so the description does not need to repeat parameter definitions. It adds meaningful context for conversationId about how to source conversation IDs and how DMs are read per conversation, but limit, postId, sources, and unansweredOnly are left almost entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins by defining exactly what the tool does: aggregate every type of inbound conversation across connected channels into one list. It also gives concrete user intents ('what do I need to reply to') and separates itself from the many per-channel list tools by describing the unified inbox and the reply_to_inbox_item handoff.
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 explicit when-to-use language and practical usage tips: how to include DMs via conversationId, why to pass it, what happens when channels are not connected, and when item results might cost credits. It does not explicitly say when to use a per-channel list tool instead, though it implies those tools are the narrower option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_instagram_mediaList the brand’s Instagram postsARead-onlyInspect
The connected Instagram Business account’s own recent media — id, caption, media type (feed / reel / story-era), permalink, timestamp, like and comment counts. This is where the media id every other Instagram tool needs comes from: resolve “my latest reel” yourself instead of asking the user for a link, then pass the id to meta_post_insights. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many (1–50, default 15) | |
| pageId | No | Facebook Page id — omit when only one Page is connected |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description explicitly restates 'Read-only, 0 credits,' which aligns with and reinforces the annotations. It also adds behavioral context not present in annotations: the tool returns a specific set of fields and serves as the canonical source for media IDs. No contradictions, and it goes beyond the structured data without being redundant.
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 exactly two sentences with zero wasted words. The first sentence delivers the core purpose and return fields; the second front-loads the critical usage context (media ID source) and a concrete recommendation. Information density is high, and the structure naturally leads from 'what' to 'why/how it matters.'
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 list tool with no required parameters and a clear field list, the description covers the essential operational context: what it returns, that it's read-only, and how it fits into the broader workflow (providing media IDs). It does not explicitly state ordering (though 'recent' is implied) or pagination behavior beyond the limit parameter, but these are minor gaps given the schema already documents the limit and the task complexity is low.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (limit and pageId) already well-described in the schema. The tool description does not add any additional parameter semantics beyond what the schema provides. Since the schema carries the explanatory burden, a baseline score of 3 is appropriate; there is no gap that the description needs to compensate for.
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 ('List'), a clear resource (the connected Instagram Business account's own recent media), and explicitly enumerates the returned fields. It also differentiates from siblings by emphasizing that it is the source of media IDs for other Instagram tools, a unique value proposition not obvious from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'This is where the media id every other Instagram tool needs comes from' and advises resolving 'my latest reel' yourself instead of asking for a link. It also directs the agent to pass the id to meta_post_insights, providing a concrete workflow. This is strong practical guidance beyond generic 'list' semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_instagram_shopping_catalogsInstagram Shopping — what can be taggedARead-onlyInspect
Whether this Instagram account can tag products at all, and which catalogs its SHOP can tag from. CALL THIS FIRST: product tagging needs an APPROVED INSTAGRAM SHOP, and if the account does not have one, tagging fails AFTER the photo is already uploaded. The reply says which of three things is true — eligible, not eligible (a Commerce Manager approval nothing in Hermoso can grant, and not a sign anything is broken), or "could not tell", which is NOT the same as not eligible. AN EMPTY CATALOG LIST IS NOT AN EMPTY CATALOG: Instagram reaches a catalog through the account's SHOP, while list_meta_catalogs reads the business PORTFOLIO — a merchant can have a full catalog there and nothing available here until the shop is approved. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Facebook Page id — omit when only one Page is connected. Its linked Instagram account is the one that gets tagged. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, destructiveHint), the description discloses critical behavioral nuances: the three possible outcomes (eligible, not eligible, could not tell), the fact that 'could not tell' is not the same as not eligible, and the misconception about empty catalogs. It also mentions 0 credits. This significantly adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose but every sentence carries essential warning or clarifications. It is front-loaded with the most critical 'call first' and the failure mode. Though slightly long, the density of useful information justifies a high score, but it's not perfectly lean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description fully explains what the reply contains (three possible truths) and covers the key semantic pitfalls (empty catalog vs empty shop). It addresses the complexity of the distinction between shop and portfolio, making it complete for an agent 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?
The schema already covers the only parameter ('pageId') with a complete description. The tool description does not add additional parameter-level semantics beyond what the schema provides, so a baseline score of 3 is appropriate given full 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 clearly states the tool's purpose with a specific verb and resource: 'whether this Instagram account can tag products at all, and which catalogs its SHOP can tag from.' It also explicitly distinguishes itself from the sibling list_meta_catalogs, making the differentiation 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?
The description gives explicit when-to-use guidance: 'CALL THIS FIRST' and explains the consequence of not calling it (tagging fails after photo upload). It also contrasts with list_meta_catalogs, explaining when not to use this tool. This is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsList render jobsARead-onlyInspect
List the most recent render jobs + how many are currently running, so you can report on or resume in-flight work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the behavioral traits of listing 'most recent' jobs and including a count of running jobs, which is useful context beyond annotations. It doesn't describe pagination or output format, but for a read-only list tool with safety covered by annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the core action ('List the most recent render jobs') and follows with the extra value (count of running jobs) and the use case. Every word earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and annotations covering safety, the description provides the essential information: it lists recent jobs and reports the running count. It clearly states what the tool returns and the intended use case. Without an output schema, this is sufficient for an agent to decide when to invoke it. The lack of pagination details is not a gap for a list tool of this type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and the schema coverage is 100% (empty schema). The baseline for 0 parameters is 4, and the description adds no parameter-specific information because none is needed. It does not repeat schema content, so a 4 is the correct 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 verb 'List' and the resource 'render jobs', and adds the specific detail that it also returns the number of currently running jobs. This immediately distinguishes it from 'get_job' (single job) and other list tools by specifying the domain (render) and the added running-count feature.
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 includes 'so you can report on or resume in-flight work', which gives a clear context for when to use it. However, it does not explicitly mention alternatives or when not to use it (e.g., 'use get_job for details on a single job'). It provides the purpose but stops short of explicit routing, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_libraryList libraryARead-onlyIdempotentInspect
Browse this workspace's Library — every image/video generated in the Studio, newest first (the same Library the web app shows). Returns served URLs you can open directly or hand to fetch_asset for a download link, plus each asset's kind, model, and age. Free, read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | filter by asset kind (default 'all') | |
| limit | No | max assets to return (default 20, max 60) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description's 'read-only' is redundant. However, it adds valuable behavioral context: that URLs are directly openable 'served URLs', that they can be passed to fetch_asset, that results are newest-first, and that each asset includes kind, model, and age. This goes beyond the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the primary purpose, then packs in scope, ordering, output content, and a usage hint (fetch_asset). Every clause earns its place; it is efficient and highly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description fully covers what an agent needs: the scope, ordering, what is returned (served URLs, kind, model, age), and how to use the results (open directly or pass to fetch_asset). Annotations cover safety, and the limit parameter handles pagination. Nothing missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both 'kind' and 'limit' have descriptive comments (enum choices, defaults, max). The description does not add any parameter-specific meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Browse'), a resource ('this workspace's Library'), and the exact scope ('every image/video generated in the Studio'), plus sorting ('newest first'). It also distinguishes itself from sibling tools like fetch_asset (for download links) and other list_* tools (only workspace-generated assets). No ambiguity.
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 clearly implies when to use this tool (to browse workspace library assets) and even suggests a complementary tool (fetch_asset for download links). It notes the tool is 'Free, read-only', which is a usage guideline. However, it does not explicitly exclude other list tools (e.g., list_drive_files) or provide a decision rule, but the context makes it obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkedin_pagesList the LinkedIn company Pages this account administersARead-onlyInspect
List the LinkedIn COMPANY PAGES the connected account administers — id, name and the role held on each. ALWAYS call this before post_to_linkedin_page when there is more than one Page: publishing to the wrong company Page is a public mistake and Hermoso never chooses for the user. If it comes back empty, the account holds no Page admin role, or LinkedIn has not granted this app the organization scopes — say that plainly rather than guessing an id. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds context beyond this: it mentions the tool is 'free,' explains the scope requirement ('LinkedIn has not granted this app the organization scopes'), and describes the empty-case behavior. This adds value without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured. It opens with the core purpose, then provides the critical usage rule, and finishes with the empty-case handling. Every sentence serves a purpose, and the critical guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only listing tool, this description is complete. It covers what is returned, when to use it, how to handle an empty result, and even mentions scope prerequisites. Nothing an agent needs to correctly invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage (trivially), so the baseline is 4. The description adds no parameter details (since none exist) but does clarify the output structure (id, name, role), which is useful even though it is not parameter-related.
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 ('List') and resource ('LinkedIn company Pages the account administers'), and specifies the returned fields (id, name, role). It clearly distinguishes from the sibling tool post_to_linkedin_page by referencing it directly, so an agent knows exactly what this tool does and what it does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is given: 'ALWAYS call this before post_to_linkedin_page when there is more than one Page,' with a clear rationale (avoiding public mistakes and that 'Hermoso never chooses for the user'). It also explains what to do if the result is empty (say plainly rather than guessing an id), covering the when-to-use and interpretation aspects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memoryList memoryARead-onlyInspect
List the durable facts & preferences saved in this workspace’s Memory (what the studio remembers about the brand, audience, taste, and do/don’t rules) — the same Memory the web app shows. These shape every future ad. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max items (default 50, max 200) | |
| category | No | filter to one bucket (Brand/Audience/Taste/Do/Don’t/Preference) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description explicitly confirms 'Read-only, free.' It adds context about the Memory's influence on future ads and that it mirrors the web app, which is useful behavioral context. However, no additional behaviors (e.g., ordering, pagination details) are disclosed beyond what annotations and schema already provide, so a baseline 3 is appropriate.
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-loaded: it states the core action and resource first, then clarifies content, impact, and safety in a few sentences. Every sentence adds value—no filler or repetition. It is appropriately sized for a simple read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two optional parameters, no output schema, and full annotation coverage, the description is complete. It explains what Memory is, its scope (workspace), its influence, and that it is read-only. An agent would have all needed information to decide when and how 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 100%; both limit and category have descriptive comments in the input schema. The description adds no parameter-specific details, relying fully on the schema. Per the rubric, with high coverage, a baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists durable facts and preferences saved in the workspace's Memory, explicitly enumerating what those facts cover (brand, audience, taste, do/don't rules). It also differentiates this from other list tools by noting it shows the same Memory as the web app, leaving no ambiguity about the resource being listed.
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 tool is the canonical way to read Memory, and the read-only/free note signals safe usage. It does not explicitly name alternatives (e.g., 'use remember to add facts'), but the context and sibling tools make the intended use clear. Lacks explicit when-not-to-use guidance, but the purpose is specific enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_catalog_productsList the products inside a Meta catalogARead-onlyInspect
A page of the actual PRODUCTS in a catalog — name, retailer id, price, availability, image and, most importantly, Meta’s REVIEW STATUS for each. A REJECTED product stays in the catalog, is counted by the catalog’s catalog.product_count field, and will never be shown in an ad — so this is how you find out why a catalog ad is serving less than the merchant expects. Use it to confirm a catalog really holds what the merchant thinks before pointing money at it. This is a PAGE, not a count: quote the catalog.product_count list_meta_catalogs reports for the total. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max rows (1–100, default 25) | |
| catalogId | Yes | the numeric catalog id from list_meta_catalogs |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, destructiveHint), the description reveals critical behavioral details: rejected products remain in the catalog, are counted by product_count, and are never shown in ads—so the tool surfaces the reason for ad under-serving. It also declares 'Read-only, 0 credits,' which is additional transparency beyond the annotations. This is substantial behavioral context not available from structured metadata.
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 bit verbose but well-structured and front-loaded. It begins with what the tool does, then explains the key insight (rejected products) and usage, and ends with the page vs. count distinction. Every sentence carries useful information; it is slightly long but not padded. A 4 reflects that it is more than minimal but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the absence of an output schema, the description is remarkably complete. It explains the return fields (name, retailer id, price, availability, image, review status), the behavior of rejected products, how to get the total count via a sibling, and that it is read-only with zero credits. An agent has everything needed to call it correctly without additional sources.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes both parameters (catalogId and limit) with clear descriptions and ranges, so the baseline is 3. The description adds no parameter-specific semantics beyond what the schema provides—it does not explain parameter syntax or additional constraints. Thus it neither adds value nor detracts, staying at 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 verb and resource ('list the products inside a Meta catalog') and enumerates the exact fields returned (name, retailer id, price, availability, image, review status). It differentiates from closely related siblings like list_meta_catalogs and list_meta_product_sets by focusing on products and their review status, and it clarifies that this is a page of products, not a catalog list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool: to confirm a catalog holds what the merchant expects before spending money, and to diagnose why a catalog ad under-serves due to rejected products. It also contrasts with list_meta_catalogs for the total count, saying 'This is a PAGE, not a count: quote the catalog.product_count list_meta_catalogs reports for the total.' This gives clear direction on when to use it versus a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_catalogsList the merchant’s Meta product catalogsARead-onlyInspect
The PRODUCT CATALOGS this Meta login can advertise from — id, name, how many products each holds, and which business portfolio owns it, WITH THAT PORTFOLIO’S NUMERIC ID. It also lists every business portfolio this login administers (portfolios), whether or not it holds a catalog yet — so this is where the businessId create_meta_catalog needs comes from, and the two tools chain with no trip to Business Manager. A catalog is the input to Advantage+ catalog ads (dynamic product ads), the highest-performing ecommerce format on Meta: one campaign that shows each person the products they are most likely to buy, with the image, name and price taken from the catalog rather than from a render. START HERE for any "advertise my products" ask, then list_meta_product_sets to pick what to advertise. AN EMPTY LIST IS A FACT ABOUT WHAT THIS LOGIN ADMINISTERS, NEVER ABOUT THE MERCHANT: Meta serves catalogs off the BUSINESS PORTFOLIO, so a full Shopify-synced catalog is invisible here if the connected user is not an admin of the portfolio that owns it — read the note and say that, never "you have no catalog". A portfolio that could not be read is reported as unreadable rather than dropped. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already include readOnlyHint=true and destructiveHint=false, but the description adds important behavioral detail beyond them: the same call also lists all administered portfolios even if they have no catalog, unreadable portfolios are reported as 'unreadable' rather than omitted, and an empty catalog list reflects the login's portfolio administration rather than the merchant's actual catalog existence. This materially changes how an agent should interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description packs a lot of high-value information in a clearly front-loaded way, but it is long and includes some Advantage+ marketing context that, while useful as motivation, is not strictly necessary for invocation. All essential usage and result semantics come before the more promotional explanatory material.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no parameters, the description carries the full burden of explaining results and edge cases. It covers what is returned, how to chain with create_meta_catalog and list_meta_product_sets, how to handle an empty result, how unreadable portfolios are represented, and the safety profile, with no meaningful gap left.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty and there are no parameters, so there is no parameter semantic burden to carry. The description still helps by clarifying what the returned records are and how they relate to the 'portfolios' array, which is more useful than a schema could be for a no-parameter list tool.
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 action and resource ('list_meta_catalogs' lists the merchant's Meta product catalogs) and spells out exactly what each entry contains: id, name, product count, and owning portfolio with numeric ID. It also distinguishes itself from the closest siblings by explaining why it is the required entry point before list_meta_product_sets and create_meta_catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing: 'START HERE for any advertise-my-products ask, then list_meta_product_sets to pick what to advertise,' and it says this is where the businessId needed by create_meta_catalog comes from. It also warns against misinterpreting an empty list and says what to do instead, leaving no ambiguity about when to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_commentsRead comments on a Meta postARead-onlyInspect
Read the comments under a Facebook Page post or Instagram media object — customer questions, objections and the exact language real people use about the product. Good raw material for ad copy, and the first step before replying or moderating. REPLIES: a reply is a comment ON a comment, and its id exists only under its PARENT — it is never returned by the post. Each row says how many replies it has; to read them (and to get the id reply_to_meta_comment / moderate_meta_comment need), call this tool again with postId set to that COMMENT id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many comments (1–50, default 25) | |
| cursor | No | the cursor from a previous call. A post with more comments than one page comes back with hasMore + a truncationNote — counts or sentiment drawn from ONE page describe a sample, not the conversation. | |
| pageId | No | Page id — omit when only one Page is connected | |
| postId | Yes | post/media id — or a COMMENT id, which returns that comment’s replies |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, so the baseline is set. The description adds significant behavioral detail beyond that: it explains the nested reply structure (a reply's id exists only under its parent and is never returned by the post), notes that each row shows a reply count, and warns that counts/sentiment from a single page describe a sample due to hasMore and truncationNote. This is rich, non-obvious behavior that helps an agent avoid mistakes.
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 longer than average but structured: the main purpose is front-loaded, followed by the ad-copy use case, then a clearly marked 'REPLIES:' section for the nested behavior. Every sentence adds value — no filler. The bold header helps an agent quickly find the trickiest part. It's slightly verbose but well-organized.
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 bears the burden of explaining returns. It covers what comes back (comments with reply counts), how to get replies, and the pagination/truncation caveat with cursor. It doesn't enumerate every output field (e.g., author, timestamp), but for a list tool with a simple output, this is adequate. The key workflow pitfalls are addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning to postId by stating that passing a comment id returns that comment's replies — a critical semantic beyond the schema's 'post/media id.' It also enriches cursor's description by explaining the hasMore and truncationNote behavior. This elevates the parameter documentation above the schema alone.
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 ('Read the comments') and resource ('a Facebook Page post or Instagram media object'), and immediately explains the value (customer questions, objections, exact language). It distinguishes itself from action tools like reply_to_meta_comment and moderate_meta_comment by calling itself 'the first step before replying or moderating.' While it doesn't name a read sibling (e.g., list_meta_conversations), its platform and object scope are 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 description gives explicit context: it's for reading raw material for ad copy and 'the first step before replying or moderating.' It also gives a specific usage pattern for replies — calling the tool again with postId set to a comment id to read that comment's replies — which is actionable guidance for a non-obvious workflow. It doesn't mention when not to use this tool versus other list tools, but the reply-handling instructions are strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_conversationsThe brand’s Messenger and Instagram DM threadsARead-onlyInspect
The DM threads on the brand’s Facebook Page and its Instagram account — who wrote, when they last wrote, how many messages and how many are unread. THIS IS WHERE THE BUYING QUESTION GETS ASKED. IT READS THE INBOX AND THE MESSAGE REQUESTS BY DEFAULT (Meta’s "other" folder), which is where a DM from someone who does NOT follow the account lands — every thread says which of the two it came from, because a message request is not an accepted conversation and whoever answers it should know that first. Omit platform to read BOTH surfaces (one question to a person, two edges to Meta); name one to narrow. AN EMPTY LIST IS NEVER "nobody has messaged you" — the reply says so and names the MEASURED causes, including one the account holder cannot fix: Instagram Direct on this edge needs an app-level Instagram messaging capability, and without it Meta answers with an empty list rather than an error. Never tell anyone to go and switch something on inside the Instagram app — there is no such setting on a professional account. Read one thread with read_meta_conversation. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | threads per surface (1–100, default 25) | |
| folder | No | narrow to ONE folder. Omit to read inbox + other, which is almost always what you want. "other" IS the message-requests folder. A folder Meta does not recognise is REFUSED rather than forwarded, because Meta answers an unknown folder with the DEFAULT inbox — so a plausible-looking spelling like "requests" would hand back the ordinary inbox and be reported as "no message requests". | |
| pageId | No | Facebook Page id — omit when only one Page is connected | |
| platform | No | omit to read both — Messenger and Instagram Direct are separate inboxes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/destructive annotations, the description discloses critical non-obvious behavior: reads inbox AND message requests by default, marks which folder each thread came from, an empty list does NOT mean 'nobody messaged you' (a missing app-level Instagram messaging capability yields an empty list instead of an error), and Meta refuses unknown folder names rather than guessing. It even instructs agents not to tell users to toggle a setting inside the Instagram app because no such setting exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the core purpose and return contents, and every subsequent sentence carries operational weight (failure modes, platform defaults, a routing hint to read_meta_conversation). It is long and heavily capitalized, which hurts readability, but none of the content is filler for a tool with as many silent failure modes as this one.
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 list-style tool with no output schema, the description covers the result shape, the default surface behavior, folder semantics, the empty-list misinterpretation risk, the unresolved capability cause, the 'don't tell users to change settings' real-world instruction, a pointer to the follow-up tool, and cost. Nothing material is missing for an agent to invoke this safely and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies. The description then adds real meaning beyond the schema: omitting 'platform' reads both surfaces in one call ('one question to a person, two edges to Meta'), and it frames the 'other' folder as message requests from non-followers — an accepted conversation versus a request. It adds nothing new for limit/pageId, but the schema fully documents those, so no gap remains.
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 (DM threads on the brand's Facebook Page and its Instagram account) and states exactly what each entry contains: who wrote, when they last wrote, message count, and unread count. It also distinguishes itself from read_meta_conversation by explicitly pointing to that sibling as the way to read a single thread.
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 concrete when-to-use context ('THIS IS WHERE THE BUYING QUESTION GETS ASKED'), explains the default behavior (omit platform/folder to read both surfaces and inbox+requests), and names the alternative for thread reading (read_meta_conversation). It does not explicitly rule out using list_inbox for this surface, but the differentiation is strong enough for an agent to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_pagesList Meta pages & ad accountsARead-onlyInspect
List the Facebook Pages (with any linked Instagram business account) and ad accounts on the connected Meta account — use before post_to_meta / create_meta_campaign to pick the target. Requires the user to have connected Meta (Settings ▸ Connectors ▸ Meta); returns a connect hint if not.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true and destructiveHint=false. The description adds value by disclosing the prerequisite of Meta connection and the behavior when not connected (returns connect hint). This goes beyond the structured data. Minor gap: it does not describe the exact return structure (e.g., whether IDs are included), but that is not critical for a list 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?
Two sentences, front-loaded with the core purpose, followed by usage context and prerequisite. No unnecessary words or redundancy. Every phrase adds value.
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 no-parameter, read-only list tool, the description covers what is returned (pages, Instagram accounts, ad accounts), the intended usage context, and prerequisite/error behavior. Since output schema is absent, this is sufficient for an agent to understand what to expect and when 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?
The tool has zero parameters, so the baseline is 4 per the rubric. The description adds no parameter info because none exists; it focuses on the output and prerequisite, which is appropriate. No ambiguity to resolve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: listing Facebook Pages (with linked Instagram accounts) and ad accounts from the connected Meta account. It also explicitly names the downstream tools (post_to_meta/create_meta_campaign) that this serves, distinguishing it from other 'list' siblings like list_meta_posts or list_meta_comments.
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 explicit guidance on when to use: 'use before post_to_meta / create_meta_campaign to pick the target.' It also states the prerequisite of a connected Meta account and mentions the 'connect hint' returned if not, which helps the agent anticipate failure modes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_partnership_creatorsPartnership Ads — the brand’s creatorsARead-onlyInspect
The creators this brand has set up for PARTNERSHIP ADS — ads that run from a CREATOR’s handle instead of the brand’s, which is what a paid collaboration looks like in feed. TWO SEPARATE LISTS come back and NEITHER IMPLIES THE OTHER: the AD-PERMISSION list is whose content this brand may run as an advert, and the TAG-APPROVAL list is who may tag this brand as a paid partner on their own organic post. Adding a creator to one does nothing for the other, and that is the mistake that makes a partnership ad fail for a reason Meta’s error does not name. Every row carries the status Meta reports VERBATIM. Meta’s own wording on the wire is prose, not the enum its docs publish — measured 2026-08-25, a fresh request reads “Pending Approval” and a revoked one reads “Canceled” (Partnership Ads Hub calls the same two rows “Request sent” and “Inactive”). PENDING means the creator has not accepted yet and this brand cannot advertise their content until they do. REVOKING DOES NOT REMOVE THE ROW: Meta keeps it and flips the status, so read the status rather than the presence of a row. An unrecognised status is passed through as Meta’s own word, never blanked. A list that could not be READ says exactly that; it is never rendered as "this brand has no creators". THE TWO LISTS ANSWER DIFFERENTLY, and Meta is the reason: the ad-permission list can be ENUMERATED, and the tag-approval list CANNOT — Meta requires user_ids on that edge and returns "a list of approved creators, filtered by the user IDs provided", i.e. it CHECKS the people you name and cannot report the rest. So pass creatorIds to ask about specific creators; anyone already on the ad-permission list is checked for you, which is what makes "on one list but not the other" answerable in a single call. With nobody to check, the reply says Meta publishes no way to list that edge rather than reporting a failed read. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Facebook Page id — omit when only one Page is connected. Both lists live on its linked Instagram account. | |
| creatorIds | No | comma-separated NUMERIC Instagram account ids to CHECK against the TAG-APPROVAL list. Meta publishes no way to list that edge — `user_ids` is required on it and the response is filtered to exactly the ids given — so without this the reply says so instead of reporting a read that failed. Handles do not work here (Meta publishes no username form for this parameter); the ad-permission list is the one that takes a @handle. Creators already on the ad-permission list are checked automatically. | |
| creatorUsername | No | narrow the AD-PERMISSION list to one creator handle. It does not affect the tag-approval list, which is addressed by numeric id only. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important actual behaviors: revoked rows remain but change status, Meta passes unrecognized statuses verbatim, read failures are distinguishable from empty lists, and the tag-approval list cannot be enumerated. This is far more transparency than the annotations alone provide.
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 dense and front-loaded, with each sentence carrying substantive warnings or distinctions. It is longer than typical definitions, and the all-caps emphasis makes it somewhat harder to scan, but it avoids filler while documenting crucial edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by explaining what the two lists contain, how statuses appear verbatim, how revoked rows remain present, how unreadable lists are reported, and how to check specific creators. No critical call-interpretation guidance seems 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?
Even though the schema has 100% description coverage, the tool description adds critical parameter-level nuance: creatorIds must be numeric and handles fail, the ad-permission list is checked automatically, creatorUsername does not affect the tag-approval list, and omitting creatorIds yields a specific Meta-message response. This strongly complements 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 identifies a specific resource (brand's Partnership Ads creators), uses precise verbs ('list', 'come back'), and distinguishes two semantically different sub-lists. It clearly conveys that this is a read-only listing tool, distinct from the sibling manage tool and general creator listing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context: it explains when to pass creatorIds, when the tool cannot enumerate a list, and that it is read-only with 0 credits. It does not explicitly name an alternative as in 'use manage_meta_partnership_creator to edit', but the usage context is clear enough to prevent misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_postsList the Page’s / Instagram account’s own postsARead-onlyInspect
List the connected Facebook Page's or Instagram account's OWN existing posts — id, caption, permalink, publish date and format. THIS IS THE TOOL THAT GETS YOU THE postId every other Meta read needs: meta_post_insights, list_meta_comments and manage_meta_post all require one, and until now the only way to have a postId was to have just published it yourself with post_to_meta. Use it for "how did our last few posts do", to find a post the user describes loosely, or before backfill_posts. Pass target:'instagram' for the linked IG account (Stories are excluded — Meta's media edge does not return them); Facebook hides unpublished drafts unless you ask for them. Only ever reads a Page the brand has connected. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many posts (default 25, max 100) | |
| cursor | No | paging cursor returned by a previous call | |
| pageId | No | which connected Page — omit when the brand has only one | |
| target | No | default facebook; 'instagram' reads the Page's linked IG business account | |
| includeUnpublished | No | Facebook only — also return unpublished drafts (hidden by default) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and destructiveHint, but the description adds critical behavioral context: 'Read-only, 0 credits', Stories exclusion on IG, Facebook draft visibility, and the restriction to connected Pages. This goes beyond the structured annotations and informs the agent of important edge behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence in the description earns its place, packing high-value info: purpose, unique value, usage examples, exclusions, and read-only/credit notes. It is dense but not bloated, and the key 'get postId' message is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the description covers all essentials: what it returns, pagination via cursor (implied in schema), exclusions, and usage context. An agent has everything needed to call it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful context for specific parameters: explains target:'instagram' for linked IG account, and includeUnpublished for Facebook drafts. This enriches the schema descriptions without redundancy, though cursor and pageId are well-documented in the schema and not elaborated further—still, the added context warrants a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the connected Facebook Page's or Instagram account's OWN posts, with specific fields (id, caption, permalink, publish date, format). It also positions itself as the source of postId for other Meta tools, distinguishing it from siblings like meta_post_insights and list_meta_comments.
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 guides when to use: 'how did our last few posts do', finding a loosely described post, before backfill_posts. It also notes limits (IG Stories excluded, Facebook drafts hidden unless requested) and mentions the target parameter for Instagram. Clearly routes the agent to appropriate scenarios without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_product_setsList the product sets in a Meta catalogARead-onlyInspect
The PRODUCT SETS inside one catalog — a set is a slice of the catalog ("summer dresses", "under $50", "everything"), and it is what an AD SET actually advertises. A catalog id is NOT a valid ad-set binding, so this is the list you pick from before building a catalog ad: pass the chosen id as productSetId on create_meta_adset or create_meta_ad. Meta normally auto-creates an "all products" set with every catalog, so an empty list points at the catalog rather than at the request. A set holding ZERO products binds without error and then serves nothing — the ad runs, spends and shows no product — so check the counts. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max rows (1–100, default 50) | |
| catalogId | Yes | the numeric catalog id from list_meta_catalogs (a catalog NAME is not an id) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses that catalog ids are not valid ad-set bindings, that Meta auto-creates an 'all products' set, that an empty list points at the catalog, and that a zero-product set binds but serves nothing. This adds substantial behavioral detail.
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 slightly long but every sentence carries distinct information, and the core purpose is front-loaded. It efficiently packs usage, edge cases, and behavioral notes without redundancy.
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 listing tool with no output schema, this description is remarkably complete. It explains the domain model, how to use the result, what to watch out for, and the cost implications, covering everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both limit and catalogId. The description adds nuance by noting catalogId must come from list_meta_catalogs and that a name is not an id, which goes beyond the schema. However, it doesn't elaborate on limit behavior beyond the schema's range note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb (list) and resource (product sets in a catalog), defines what a product set is, and distinguishes it from similar tools like list_meta_catalogs. The phrase 'what an AD SET actually advertises' pins down the resource precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'this is the list you pick from before building a catalog ad' and directs the agent to pass the chosen id as productSetId on create_meta_adset or create_meta_ad. Also explains how to interpret an empty list and the zero-products pitfall, offering clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meta_webhook_eventsWhat Meta has pushed to HermosoARead-onlyInspect
The Page events Meta has PUSHED to Hermoso — new comments, mentions, lead-form submissions and inbound Messenger/Instagram DMs — each with the moment it arrived. This is the difference between a brand learning about a comment when someone thinks to look and learning about it when it happens. Scoped to the Pages this brand can actually see, so it never shows another account’s activity. AN EMPTY FEED IS AMBIGUOUS AND THE REPLY SAYS SO: nothing has happened, or the Page is not subscribed (check meta_webhook_status — an unsubscribed Page is silent and looks exactly like a quiet one), or Hermoso restarted and rebuilt the feed from its durable mirror, which keeps recent deliveries rather than all history. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | narrow to one kind: feed, mention, leadgen or messages | |
| limit | No | how many, newest first (default 50) | |
| pageId | No | narrow to one Page — only within the Pages this brand already administers; naming an id you cannot see does not widen the answer |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, destructiveHint), the description adds that it is read-only and costs 0 credits. It also discloses the non-obvious behavior that an empty feed is ambiguous and lists three possible causes, and that the feed is rebuilt from a durable mirror, so history is not complete. This adds significant behavioral context the agent needs.
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 paragraph of about 150 words, which is somewhat long but each sentence earns its place: it states the core purpose, the value proposition, scoping, the ambiguity warning, and read-only/credit info. It is front-loaded with the main 'what' and then adds necessary caveats. Slightly verbose but well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (webhook events, ambiguous empty feeds) and the absence of an output schema, the description covers all essential aspects: event types, scoping, ambiguity handling, and read-only nature. It even links to a diagnostic tool. No critical missing information prevents an agent from calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all three parameters with descriptions (100% coverage), but the description adds extra guidance on pageId, clarifying that results are scoped to Pages the brand administers and that naming an id out of scope does not widen the answer. This goes beyond the schema's basic param description, adding practical 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 states a specific verb and resource: it lists the Page events Meta has pushed to Hermoso, enumerating the event types (comments, mentions, lead-form submissions, DMs) and includes the arrival time. It clearly distinguishes its purpose from sibling tools like list_meta_comments or list_meta_conversations by focusing on push events. No ambiguity.
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 when to use this tool (to see real-time push events) and contrasts it with the alternative of manually checking. It also directs users to meta_webhook_status for diagnosing empty feeds, which is an explicit alternative. However, it does not provide an exhaustive when-not-to-use list or compare to all related tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_onedrive_filesList OneDrive filesARead-onlyInspect
List files & folders in the user’s OneDrive — the root by default, a folder’s contents (folderId), or a name search (query). onlyFolders:true lists folders only. Paginate with pageToken (the cursor from a previous call). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | search — only items whose name matches this | |
| folderId | No | list the contents of this folder id | |
| pageSize | No | rows per page (1–200, default 50) | |
| pageToken | No | cursor from a previous call | |
| onlyFolders | No | list folders only |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. The description adds behavioral context beyond that: explains the different operational modes, the onlyFolders filter, and pagination cursor semantics. It reinforces 'Read-only' explicitly, which aligns with annotations. Does not disclose further side effects but covers typical use behavior adequately.
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 fluff. The primary purpose is front-loaded, followed by parameter usage in a compact, readable style. Every clause adds value.
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 list tool with no output schema, the description covers all input modes, filtering, and pagination. It does not describe return fields or error handling, but for a straightforward list operation this is sufficient. The read-only nature is flagged. Given the tool's simplicity and sibling context, this is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful context beyond schema: clarifies that folderId lists contents, query is a name search, onlyFolders filters, pageToken is a cursor, and that root is default. This enriches parameter understanding beyond just descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'List' with specific resource 'files & folders in the user’s OneDrive'. Distinguishes from siblings like list_drive_files by explicitly naming OneDrive and enumerating modes (root, folderId, query). An agent can immediately understand scope.
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 explicit usage context for each mode: root by default, folderId to list contents, query for name search, onlyFolders filter, and pageToken for pagination. Does not mention alternatives or when not to use, but the name and context make the OneDrive vs Google Drive distinction implicit. Lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pinterest_boardsList Pinterest boardsARead-onlyInspect
List the boards on the user’s connected Pinterest account — id, name, privacy and pin count. ALWAYS call this before post_to_pinterest and let the USER pick: Pinterest requires a board and Hermoso never chooses one for them. Read-only, 0 credits. Needs Pinterest connected (Settings ▸ Connectors ▸ Pinterest).
| Name | Required | Description | Default |
|---|---|---|---|
| privacy | No | filter by board privacy; default is everything the connection can see |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint=true and destructiveHint=false, the description adds valuable behavioral context: 'Read-only, 0 credits' and 'Needs Pinterest connected (Settings ▸ Connectors ▸ Pinterest).' The credit cost and connectivity requirement are not present in the annotations, adding new information. The 'Read-only' phrase is redundant with the annotation, but the rest provides additional transparency without contradicting the structured data.
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 concise, consisting of two sentences with no wasted words. The primary purpose is stated first, followed by critical usage guidance. The directive 'ALWAYS call this before post_to_pinterest' is front-loaded, ensuring the agent sees the most important context early. This is an efficient, well-structured 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 read-only listing tool, the description covers all essential context: it explains what is returned (id, name, privacy, pin count), the prerequisite (connected Pinterest account), and the critical usage rule (call before post_to_pinterest and let user pick). No output schema exists, so the description carries the burden of describing the return values, which it does. The tool is simple, and this description is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'privacy' is fully documented in the schema with an enum and description ('filter by board privacy; default is everything the connection can see'). The tool description does not add any additional meaning about the parameter beyond what the schema already provides. Since schema description coverage is 100%, the baseline score of 3 is appropriate; the description correctly relies on the schema for parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (List), the resource (boards on the user's connected Pinterest account), and the specific fields returned (id, name, privacy, pin count). It distinguishes itself from sibling tools like list_pinterest_pins and create_pinterest_board by focusing purely on listing boards. The additional directive to call before post_to_pinterest further helps differentiate its intended role.
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 explicitly instructs when to use this tool: 'ALWAYS call this before post_to_pinterest' and explains the reason—'Pinterest requires a board and Hermoso never chooses one for them.' This gives clear context and explicitly states the user must pick a board, preventing misuse. It also notes the prerequisite of Pinterest being connected, adding actionable steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pinterest_pinsList Pins on a Pinterest boardARead-onlyInspect
The Pins on one of the account’s boards — or, with no boardId, the account’s own Pins across all of them. Each row carries the Pin id, title, description, destination link, alt text, board, creation date, and whether it HAS BEEN PROMOTED in an ad. THIS IS WHERE THE pinId EVERY OTHER PIN TOOL NEEDS COMES FROM: post_to_pinterest returns an id only at the instant it pins, so an agent that did not itself just pin had no way to name a Pin. Prefer passing a boardId — Pinterest’s own spec warns the account-wide listing has known timeouts. Read-only, 0 credits. Needs Pinterest connected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1–100, default 25 | |
| cursor | No | the cursor a previous call returned | |
| boardId | No | numeric board id from list_pinterest_boards — omit for the account’s own Pins across all boards |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds '0 credits' and 'Needs Pinterest connected,' which are not in annotations. It also discloses the timeout risk for account-wide queries and the promoted-in-ad flag in results, giving the agent expectations about behavior and performance.
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 slightly verbose with the ALL-CAPS emphasis and long explanation about pinId sourcing, but every sentence contributes meaningful information. It is front-loaded with the primary purpose and flows logically, though it could be trimmed without losing value.
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 listing tool with no output schema, the description covers essential context: what fields are returned, how to scope by board, the critical role of pinIds, timeout caveats, and connection requirement. Pagination (cursor) is implied by the schema, and the description does not need to repeat it. The agent has everything needed 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?
The schema already covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds value by recommending boardId and explaining why (timeouts), which is not in the schema. This extra guidance moves it to a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Pins on a board or account-wide, and specifies the exact fields returned (id, title, description, etc.). It differentiates from list_pinterest_boards by resource and from post_to_pinterest by explaining it's the source of pinIds for other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use it: to obtain pinId values needed by other Pin tools, noting post_to_pinterest only returns an id at the instant of pinning. Also gives a strong preference for passing boardId due to known timeouts on account-wide listing, which is concrete guidance for selecting parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playbooksList playbooksARead-onlyInspect
List the PLAYBOOKS saved in this workspace — the reusable strategy cards (winning hooks, angles, formats and the concrete plays to run) kept from teardowns, angle mining and creatives worth repeating. The same Playbooks the web app's Playbooks tab lists. Read one before planning an ad so you re-run what already worked instead of starting cold. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | true to return every hook/angle/play in the text, not just the headline counts | |
| limit | No | max playbooks to return (default 25, max 100) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, which the description reinforces with 'Read-only, free.' Beyond that, the description adds behavioral context about the content (reusable strategy cards) and its relationship to the web app's Playbooks tab. It doesn't mention pagination or response format, but given the annotation coverage and the nature of a list tool, the description provides adequate transparency without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-organized: first defines what playbooks are, then connects to the web app, then gives a usage rationale, and ends with 'Read-only, free.' Each sentence earns its place, though it could be slightly more concise without losing meaning. No unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that tool has no output schema, 2 simple parameters, and read-only annotations, the description covers the essential context: what the tool returns (list of playbooks), why it matters, and that it is safe. It doesn't describe the return fields in detail, but for a list endpoint with optional parameters, this is reasonably complete. The only missing piece is pagination behavior, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (full, limit) are fully documented in the schema with descriptions, achieving 100% schema coverage. The description itself does not reference parameters, so it adds no additional semantic value. Per the rubric, baseline 3 is appropriate when the schema carries the full explanatory burden.
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 ('List') tied to a distinct resource ('PLAYBOOKS saved in this workspace') and elaborates on what playbooks are, clearly distinguishing them from other list_* siblings like list_hooks or list_library. It is not a tautology and provides concrete, domain-specific meaning.
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 a clear usage context: 'Read one before planning an ad so you re-run what already worked instead of starting cold.' While it doesn't explicitly contrast with alternative tools (e.g., list_hooks, mine_angles), the guidance is actionable and helps an agent decide when to call this tool. The absence of explicit 'when not to use' is a minor gap, so 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_product_photosList product photosARead-onlyInspect
List the product photos ALREADY saved in your workspace — the brand's product library plus any app-store screens (also surfaces photos locked in your OTHER creations, since a set product lands in the shared library). FREE — returns each photo's url + label. Call it before set_product_image to see the existing photos you can reuse. Reads YOUR saved brand (pass brandId to target a specific brand — that switches this key's active brand like use_brand).
| Name | Required | Description | Default |
|---|---|---|---|
| brandId | No | a brand id/name from list_brands whose product library to list; omit to use the active brand |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable context beyond that: it states the tool is 'FREE', returns url+label, and includes the side effect that passing brandId 'switches this key's active brand like use_brand'. This discloses internal state change and cost implications, which are not covered by annotations. It does not contradict the read-only hint because changing the active brand is not a destructive data modification. The description adds meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a bit lengthy but every sentence carries useful information: the scope, the free nature, the return format, the usage recommendation, and the brandId behavior. It is front-loaded with the main purpose and then details, so the structure is effective. It could be tightened slightly, but it is not verbose or repetitive, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter, no output schema, and simple return value (url+label), the description is complete. It explains what the tool returns, the scope of photos, the side effect of brandId, and when to use it. An agent has everything needed to call it correctly and interpret results. There are no missing pieces.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter brandId with a clear description. The tool description goes beyond the schema by explaining the side effect of passing brandId ('switches this key's active brand') and clarifies that omitting it uses the active brand. This adds meaning beyond what the schema provides, justifying a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists product photos already saved in the workspace, includes the brand's product library and app-store screens, and even mentions that photos from other creations are surfaced. It distinguishes the tool from set_product_image by explicitly saying to call it before that tool, and the term 'product photos' is specific enough to differentiate from list_library or other list tools. The verb 'List' plus resource 'product photos' is precise and 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?
The description provides explicit usage guidance: 'Call it before set_product_image to see the existing photos you can reuse.' This gives a clear context and workflow. It also explains the brandId parameter behavior and its side effect of switching the active brand, which helps an agent decide whether to pass it. However, it does not explicitly mention when not to use this tool or alternatives like list_library, so it is slightly less complete than a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_published_postsList what this brand has publishedARead-onlyInspect
List every post Hermoso has recorded publishing for this brand — channel, permalink, caption, format, the HOOK and SUBJECT it was written to, and its measured engagement. This is the brand's own publishing history across all nine channels in one place, and it is the memory that makes 'which hook worked?' answerable at all. Each row says how it was recorded: 'captured' (written at publish time — the hook is what the author actually intended) or 'backfilled' (reconstructed from the platform afterwards, where the hook is only known if the post matched a Hermoso creation). A dash for engagement means the platform reported no number — that is NOT zero engagement. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max posts (default 50, max 200), newest first | |
| channel | No | filter to one channel: facebook, instagram, threads, x, linkedin, youtube, tiktok, reddit, pinterest, google_business |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description reinforces this with 'Read-only, 0 credits' and adds critical behavioral nuances: the 'captured' vs 'backfilled' distinction explains how data was recorded, and the warning that a dash for engagement is NOT zero engagement prevents misinterpretation. These details go beyond the structured hints, though it could further mention pagination/rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably efficient: the main action is front-loaded, and the subsequent sentences explain data provenance and the dash nuance, both essential. However, the phrase 'the memory that makes "which hook worked?" answerable at all' is rhetorical and could be trimmed without losing selection-relevant information. Still, each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that schema covers parameters and annotations cover read-only/non-destructive behavior, the description fills all remaining gaps for correct use and interpretation: it lists the returned fields, explains how data was recorded (captured/backfilled), clarifies ambiguous engagement values, and states the cost/credit implications. No output schema exists, but the listed fields effectively serve as an output contract, making this complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both limit (with default and max, plus ordering) and channel (with the allowed list) are fully documented. The description mentions 'all nine channels' which aligns with the channel parameter and implies an aggregating behavior, but it adds no new meaning about parameter usage or constraints beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List every post Hermoso has recorded publishing for this brand' with a clear verb and resource, and enumerates the fields returned (channel, permalink, caption, etc.), making its purpose unambiguous. It differentiates from platform-specific list tools by framing it as the unified brand publishing history across all nine channels, though it does not explicitly name a sibling tool to contrast with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it by emphasizing it is the brand's own publishing history and the 'memory' for answering hook performance, and notes it is read-only and cost-free. However, it does not explicitly state when not to use it or name alternatives like list_meta_posts or list_tiktok_videos, leaving the agent to infer the scope boundary from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reddit_commentsComments on a Reddit postARead-onlyInspect
Read the comments under one of the connected account’s Reddit posts — author, text, score, whether it is the poster’s own reply, and when. On Reddit the thread IS the value of a post, and this is where the questions, objections and exact customer wording live: the same raw material for ad copy that list_meta_comments and list_youtube_comments give you on the other channels, from the audience that argues back hardest. Each row carries the fullname to pass to reply_to_reddit_comment. Read-only, 0 credits. Needs Reddit connected.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | default top | |
| limit | No | 1–100, default 25 | |
| postId | Yes | the post id, its t3_… fullname, or the permalink |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint=true and destructiveHint=false, the description adds valuable behavioral details: it specifies the operation is read-only, costs 0 credits, requires a Reddit connection, and mentions that each row includes the fullname needed for reply_to_reddit_comment. It does not contradict the annotations and enriches the safety profile with cost and dependency information. A 4 is warranted because it goes beyond the annotation baseline.
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 moderately long but efficiently structured: it leads with the action, then the fields, then the value proposition, then sibling comparison, then the fullname note, then cost/connection. Each sentence carries purpose—the marketing language ('the thread IS the value of a post') justifies the tool's importance, and the fullname detail is practical. It's not bloated, so it earns a 4, though it could be slightly trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a clear picture of what is returned (fields plus the fullname for replying). It also covers prerequisites (Reddit connected), cost (0 credits), and read-only behavior. The tool is relatively simple with only 3 parameters fully documented in the schema, and the description fills the gaps for usage context and output. Nothing critical is missing 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?
The input schema has 100% coverage with descriptions for all three parameters (postId, sort, limit), so the baseline is 3. The description does not add any extra meaning about the parameters themselves—it only mentions output fields and the fullname for replying, which is output-related, not parameter-related. Thus it meets baseline without enhancing parameter understanding.
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 opens with a clear verb+resource: 'Read the comments under one of the connected account’s Reddit posts' and enumerates the exact fields returned (author, text, score, own reply, timestamp). It also distinguishes itself from sibling tools list_meta_comments and list_youtube_comments by naming them and describing the shared raw-material purpose, making the tool's identity 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?
The description gives strong context for when to use it: it frames Reddit comments as the raw material for ad copy and points to the analogous tools on other channels. However, it doesn't explicitly state when NOT to use it or provide conditional routing (e.g., 'use list_meta_comments for Meta posts'). The context is clear enough for an agent to infer the correct use case, earning a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reddit_postsThe connected Reddit account’s own postsARead-onlyInspect
The connected Reddit account’s OWN submissions — id, title, subreddit, score, comment count, whether the subreddit removed it, and whether its body can be edited at all. THIS IS WHERE THE postId EVERY OTHER REDDIT TOOL NEEDS COMES FROM: post_to_reddit returns an id only at the instant it publishes, so an agent that did not itself just post had no way to name a post and had to ask the user for a link. Read-only, 0 credits. Needs Reddit connected.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | default new | |
| limit | No | 1–100, default 25 | |
| cursor | No | the cursor a previous call returned |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context beyond that: it states 'Read-only, 0 credits, Needs Reddit connected' and explains the data availability logic (post_to_reddit returns id only at publish). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence contributes: it lists outputs, explains the critical use case, and notes constraints. The rationale about postId sourcing is front-loaded, making it highly scannable. Slightly verbose but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with three optional parameters, the description covers purpose, output fields, usage scenario, credit cost, and connection requirement. The absence of an output schema is compensated by listing the fields returned. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter having a clear description (sort enum with default, limit range with default, cursor reference). The description does not add extra meaning beyond the schema, which is acceptable given the high coverage. No parameter ambiguity remains.
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 the specific verb (list) and resource (the connected Reddit account's own submissions), enumerates exactly which fields are returned, and explicitly explains its role as the source of postId for other Reddit tools. This makes it immediately distinct from siblings like post_to_reddit or search_reddit.
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 clearly explains when this tool is needed: when an agent needs a postId for a post it did not just publish, because post_to_reddit only returns an id at publication time. This gives strong contextual guidance on when to use this tool, though it does not explicitly mention alternatives it should be used instead of.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduledList scheduled and past postsARead-onlyInspect
Show what is queued to post and what already went out. Each fired item reports PER-CHANNEL outcomes, so you can see that (say) Instagram published and TikTok failed on the same item rather than a single misleading verdict. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the 'Read-only' line is redundant. However, the description adds valuable context by disclosing the per-channel outcome reporting, which is a behavioral trait beyond the annotations, and mentions 0 credits. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every sentence adds value. The per-channel explanation is concise and clarifies a potential misinterpretation without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-output-schema tool, the description covers the essential behavioral distinction (per-channel outcomes). It could mention pagination or time range for 'past', but given the simplicity, it is adequately complete for an agent to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the schema already fully documents the input. The description correctly omits parameter details because none exist, meeting the baseline for parameter-free tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows queued and past posts, with a specific verb ('Show') and resource ('scheduled and past posts'). It also highlights the key distinguishing feature of per-channel outcomes, which differentiates it from siblings like list_published_posts or schedule_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing the scheduling queue and history, and the per-channel detail clarifies what to expect. However, it does not explicitly name alternatives or state when not to use this tool versus other list tools, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sheet_tabsList the tabs in a Google SheetARead-onlyInspect
The tabs in a Google Spreadsheet, each with its name, numeric sheetId, row/column count and position. Call this BEFORE naming a tab in update_sheet / clear_sheet_range / manage_sheet_tabs / format_sheet, and before proposing to delete one — it is how you learn what the file actually contains instead of guessing at a name. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| sheetUrl | No | a Google Sheets URL — the id is extracted from it | |
| spreadsheetId | No | the spreadsheet id (from create_sheet, or list_drive_files for one the user picked) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat that. It adds value by specifying the exact data returned (name, sheetId, row/column count, position) and explicitly stating 'Read-only, free,' which goes beyond annotation (especially the 'free' cost hint). This extra context is useful without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with a clear purpose: the first describes the output, the second gives usage guidance with named alternatives, and the third confirms safety and cost. No filler or repetition; the most critical info (purpose) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, this is complete: it specifies the inputs (via schema), the outputs (fields listed in description), the safety profile (via annotations + description), and the proper usage context (before dependant tools). Even without an output schema, the description conveys enough for an agent to call and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both sheetUrl and spreadsheetId have detailed descriptions explaining their origin and usage. The tool description does not add any further meaning to the parameters, so it relies entirely on the schema. Per the rubric, with full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('list') and resource ('tabs in a Google Sheet'), and enumerates the returned fields (name, numeric sheetId, row/column count, position). While it doesn't explicitly contrast with sibling list_* tools, it clearly positions itself as the discovery/pre-requisite tool for tab operations, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call this BEFORE naming a tab in update_sheet / clear_sheet_range / manage_sheet_tabs / format_sheet, and before proposing deletion. This nails the when-to-use and names the dependent tools, effectively differentiating it from alternatives. The phrase 'instead of guessing at a name' also clarifies the context of use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_shopify_productsList the Shopify catalogARead-onlyInspect
The merchant's real Shopify products — id, title, description, price, images and storefront URL. This is where the productId for publish_to_shopify_product comes from, and it doubles as ground truth about what the brand actually sells (real titles and real photos, not a guess from the website). Newest-updated first. Only works for accounts created by installing Hermoso from the Shopify App Store. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many products (1–100, default 24) | |
| cursor | No | pageInfo.endCursor from a previous call, to page further |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and destructiveHint false, but the description adds beyond that: it discloses the account prerequisite ('Only works for accounts created by installing Hermoso from the Shopify App Store'), the sorting behavior ('Newest-updated first'), and that it's 'free'. It also asserts data quality ('real titles and real photos, not a guess from the website'). These are meaningful behavioral traits not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: the first states the core function and output, the second gives the primary use case and data quality, the third contains two constraints and sorting. All sentences earn their place, with the most important information front-loaded. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters and no output schema, the description covers the returned fields, ordering, prerequisite, and primary use case. It doesn't explicitly describe pagination behavior beyond the schema, but that's adequately handled by the cursor parameter definition. Minor gaps like error handling are not critical for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides full descriptions for both parameters (limit with range and default, cursor with pagination explanation). The description adds no additional parameter-level detail beyond the ordering ('Newest-updated first'), which is already implied by the schema's cursor mechanism. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List the merchant's real Shopify products') with the exact fields returned (id, title, description, price, images, storefront URL). It differentiates from sibling tools by explicitly referencing publish_to_shopify_product as the consumer of its productId and frames itself as 'ground truth' versus guessing from a website. This is a clear, distinct 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?
It provides clear usage context: 'This is where the productId for publish_to_shopify_product comes from' indicates when to use it, and it notes a hard constraint ('Only works for accounts created by installing Hermoso from the Shopify App Store') which serves as an exclusion. It doesn't compare to lists from other channels (e.g., Meta catalogs) but gives enough context to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_skillsList skillsARead-onlyInspect
List the bundled Hermoso SKILLS — multi-step workflow instructions (SKILL.md) that orchestrate the other tools (research an ad space, plan+render a finished ad, product photoshoot, raw generation) — plus the in-app strategy skills and creative recipes. Call get_skill to load a bundle. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description redundantly says 'Read-only, free' – consistent. It adds value beyond annotations by explaining that skills are the orchestration layer and that the tool lists both bundled and in-app skills. This context helps the agent understand the nature of the returned list, though it doesn't describe output format or pagination. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, reasonably concise sentence that leads with the core action ('List the bundled Hermoso SKILLS') and then elaborates. It uses em-dashes effectively to add context without excessive verbosity, though it could be broken into shorter sentences for easier scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there are no parameters and no output schema, the description sufficiently explains the tool's function and its relationship to get_skill. It mentions the types of skills (bundled, in-app, creative recipes) and gives examples, which is enough for an agent to decide if this is the tool to use. It doesn't describe the return format, but for a list tool that's less critical.
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 has zero parameters, so the description has nothing to add about parameter meaning. The schema is empty and covers 100% of params. Baseline for 0 params is 4; the description appropriately focuses on what the tool lists rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'bundled Hermoso SKILLS' and elaborates what these are (multi-step workflow instructions) with concrete examples (research an ad space, plan+render a finished ad). It also mentions the additional in-app strategy skills and creative recipes, making the resource unambiguous. It distinguishes itself from the get_skill sibling by explicitly pointing to it for loading a bundle.
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 context for when to use this tool: to see the available skills, and it instructs to call get_skill to load a bundle afterward. However, it does not explicitly state when not to use this tool or compare it with other listing tools (e.g., list_playbooks, list_library). It implies usage well but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_swipefileList the swipefileARead-onlyInspect
List this workspace's SWIPEFILE — the saved-ad research board: every named collection and the ads/creatives kept in it (advertiser, headline, body copy, media URL, platform, when it was saved, and any taste tags). The SAME board the web app's Swipefile tab shows. Use it to answer "what have we saved?", to mine the user's own taste before planning an ad, or to find a reference to remix. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max ads to return (default 50, max 500) | |
| collection | No | only list ads in this collection (by name or id) — omit for every collection |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, which this description reinforces with 'Read-only, free.' The description adds valuable behavioral context beyond those hints by enumerating exactly what data is returned (advertiser, headline, body copy, media URL, platform, saved-at timestamp, taste tags) and confirming it mirrors the web app's Swipefile tab. This enriches the agent's understanding of the tool's output without contradicting any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. It is three sentences long, each adding distinct value: the first defines what the tool does and what it returns, the second clarifies it is the same as the web app, and the third lists concrete use cases. There is no redundancy or filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description covers all necessary context: it explains what data is returned, the scoping options are clear from the schema and description, and the use cases are provided. It does not omit any crucial details that an agent would need to invoke it correctly, given the simplicity and the annotation coverage.
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 schema covers both parameters (limit and collection) with descriptions, achieving 100% schema description coverage. The tool description does not add any extra meaning to these parameters beyond what the schema already provides; it only implies that omitting collection returns all collections, which is already noted in the schema's description ('omit for every collection'). Thus, the description adds minimal incremental value for parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to list the workspace's SWIPEFILE (saved-ad research board). It specifies the verb 'list', the resource (the swipefile), and details what it returns (collections, ads/creatives with fields like advertiser, headline, etc.). It also distinguishes itself from siblings by noting it is the same board shown in the web app and is read-only, making it obvious it is distinct from save_to_swipefile or export_swipefile_deck.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage scenarios: 'what have we saved?', 'mine the user's own taste before planning an ad', and 'find a reference to remix.' It does not explicitly state when not to use it or name alternative tools, but the read-only note and the detailed content imply it is for reading, not modifying. The alternatives (save, export) are not mentioned, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_teamList team membersARead-onlyInspect
List the members of the current brand workspace — email, role (admin/member) and status. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description reinforces 'Read-only' (redundant) but adds 'free' and the specific output fields (email, role, status), which are not in annotations. This adds information about cost and returned data, going beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and resource, lists the output fields, and appends 'Read-only, free.' Every word serves a purpose; no fluff or repetition beyond the necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and annotations covering read-only and destructive behavior, the description adequately covers purpose, output, and safety. It is complete for an agent to call correctly without needing additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the description need not explain parameters. Schema coverage is 100% vacuously. The description adds value by stating the output content, which is the only relevant semantic here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), the resource (members of the current brand workspace), and the exact fields returned (email, role, status). It distinguishes itself from the many other list_* tools by scoping to team members within a brand workspace, leaving no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when team member details are needed) but does not explicitly mention alternatives like invite_member, remove_member, or list_creators, nor does it state when not to use it. However, the phrase 'current brand workspace' provides useful context about the scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_telegram_chatsFind Telegram chat idsARead-onlyIdempotentInspect
Find the chat ids this Telegram bot can be addressed by. STATE THE LIMIT WHENEVER YOU USE IT: this is NOT the list of chats the bot belongs to — the Bot API publishes no such method — it is every chat that SENT the bot an update in the last 24 hours, which is as long as Telegram keeps an update. A channel the bot posts to every day but nobody messages will NOT appear here, and its absence means nothing at all: post to it by @username or numeric id anyway. If the bot has an outgoing WEBHOOK configured the list is empty for that reason alone (Telegram: getUpdates "will not work if an outgoing webhook is set up"), and the reply says so rather than reading as an empty account. Nothing is consumed — no update offset is confirmed, so this cannot eat the bot’s pending updates. Free, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many recent updates to scan, 1–100 (default 100) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, but the description adds critical behavioral context: 'Nothing is consumed — no update offset is confirmed, so this cannot eat the bot’s pending updates.' It also discloses the webhook limitation and the cost (0 credits), enriching the agent's understanding of side effects and constraints.
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 longer than typical, but every sentence serves a purpose—clarifying scope, limitations, edge cases, and safety. It is front-loaded with the main purpose and then elaborates. While it could be trimmed, the density is justified for the complexity of Telegram's API nuances.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential context: the 24-hour retention, the webhook exception, the interpretation of missing chats, and the non-destructive nature (no offset consumption). Given the tool's subtle quirks, this description leaves no gaps for an agent to misuse it. The cost disclosure is a bonus.
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%; the only parameter 'limit' is fully described in the schema ('how many recent updates to scan, 1–100 (default 100)'). The description does not add extra parameter-level detail, which is acceptable given the schema's completeness. 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?
Clearly states the tool's function: 'Find the chat ids this Telegram bot can be addressed by.' It immediately clarifies what it is NOT (the bot's membership list), and the specificity distinguishes it from any plausible sibling (e.g., post_to_telegram). The verb 'find' and resource 'chat ids' are precise.
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?
Extensive usage guidance: explains the 24-hour update window, that absence of a chat means nothing, how to handle the webhook case (empty list for that reason), and explicitly says to 'post to it by @username or numeric id anyway' when a chat isn't listed. Also states when NOT to rely on the list (for membership). No ambiguity left.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_telegram_dmsRead messages sent to your Telegram botARead-onlyIdempotentInspect
Read what people have SENT to the connected Telegram bot — the newest message from each chat, newest chat first, so you can see who is waiting on a reply. Reply with post_to_telegram using the chatId shown. ⚠ THIS IS A ROLLING 24-HOUR WINDOW, NOT AN INBOX. Telegram keeps undelivered updates for 24 hours and publishes NO history endpoint at all, so anything older is unrecoverable — never report an empty result as 'you have no messages', report it as 'nothing in the last 24 hours'. Two more Telegram rules worth stating before someone concludes the feature is broken: a bot that has an outgoing WEBHOOK configured gets nothing from this at all (Telegram's own rule, and the reply says so), and a bot can never message someone first — they have to write to it. Free — no vendor charge and no credits. Needs Telegram connected (Settings ▸ Connectors ▸ Telegram).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many raw updates to scan, 1-100 (default 100). Messages are grouped per chat, so this is not the number of rows you get back. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description adds substantial beyond-annotation context: the 24-hour rolling window, Telegram's lack of a history endpoint, the webhook caveat (bot receives nothing), the 'bot cannot message first' rule, and the correct phrasing to avoid reporting a false 'no messages' state. This is exactly the kind of trap-prevention behavioral disclosure the rubric rewards.
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 long but every sentence earns its place: core behavior and reply path first, then the two critical caveats, then the configuration requirements. It is front-loaded with the operation an agent needs, and the warnings are phrased as actions ('never report an empty result as...') rather than abstract notes. Some minor tightening would be possible, but no sentence is 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 tool with one trivial parameter and no output schema, the description covers the behavior, the caller-visible edge cases, the security/connection prerequisite, and the follow-up action (post_to_telegram with chatId). The only small gap is that the exact return shape beyond chatId is left implied, but an agent has enough to call it correctly and interpret results, so the definition is effectively 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?
Input schema coverage is 100% — the limit parameter is already fully described with range, default, and the crucial note that it is 'not the number of rows you get back.' With complete schema coverage, the baseline is 3, and the description appropriately does not re-explain schema fields, though the mention of Telegram setup requirements could be seen as environmental context rather than parameter 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 names a specific verb and resource: "Read what people have SENT to the connected Telegram bot," and sharpens it with the exact result shape: 'newest message from each chat, newest chat first.' This clearly differentiates it from the sibling list_telegram_chats (chats vs. messages) and the title reinforces the same 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?
The description gives strong when-to-use context: it tells you this is for seeing 'who is waiting on a reply,' routes the follow-up action to post_to_telegram using the shown chatId, and instructs on how to interpret an empty result. It does not explicitly name an alternative to exclude it, but the only plausible sibling (list_telegram_chats) reads as a different resource, so the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_threads_mentionsThreads mentions of the brandARead-onlyInspect
Posts where someone MENTIONED the brand on Threads — anywhere, not just under your own posts. This is brand listening: real objections, questions and the exact language customers use, which is strong raw material for ad copy and for mine_angles. Use list_threads_replies instead when you want the conversation under one specific post.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many mentions (1–50, default 25) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, leaving no side-effect concerns. The description adds behavioral context by clarifying the tool returns posts with mentions anywhere (open world) and explains the nature of the content (objections, questions). It does not contradict annotations and provides enough beyond the structured hints to inform the agent about the tool's scope and data sources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: the first states the core purpose, the second provides the use-case rationale, and the third gives the alternative. Information is front-loaded and every sentence serves a distinct purpose with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, read-only, no destructive side effects) and the fact annotations handle safety, the description is complete. It clearly states what is returned (posts with brand mentions), explains the value, and directs to a sibling when a different scope is needed. There is no output schema, but the description suffices to convey the expected result.
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 schema has 100% description coverage for the single parameter (limit), which is fully documented as 'how many mentions (1–50, default 25)'. The tool description adds no additional parameter information, so the baseline of 3 applies; there is no added semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists posts where someone mentioned the brand on Threads, specifying it covers mentions anywhere (not just under the user's posts). It uses a specific verb (lists) and resource (Threads mentions) and explicitly distinguishes itself from the sibling list_threads_replies (which targets replies under a specific post). This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides clear usage guidance: it positions the tool as brand listening ('real objections, questions and the exact language customers use'), notes it is raw material for ad copy and mine_angles, and explicitly tells the agent to use list_threads_replies instead when wanting the conversation under one specific post. This gives both when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_threads_postsList your Threads postsARead-onlyInspect
List recent posts on the brand’s connected Threads account (id, text, media, permalink, timestamp). Use it to find a post id for threads_insights, list_threads_replies, reply_to_thread or delete_thread.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many posts (1–50, default 15) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds the specific fields returned, which helps set expectations, but does not disclose pagination, rate limits, or ordering behavior beyond 'recent.' This is acceptable given annotation coverage, but not richer context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences: the first states the operation and returned fields, the second lists concrete downstream uses. No filler, no repetition of schema info, and the most important information (what it does and when to use it) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only list tool with no output schema, the description covers purpose, use cases, and return fields. It doesn't mention pagination limits beyond the limit parameter, but that is implied by the schema. Given the tool's simplicity, this is sufficiently 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?
The single parameter (limit) is fully documented in the schema with range and default, so schema_description_coverage is 100%. The description adds no additional meaning about the parameter (e.g., how to interpret the limit or its effect on results), so it stays at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List recent posts') on a clear resource ('the brand’s connected Threads account') and enumerates the returned fields (id, text, media, permalink, timestamp). It also distinguishes its primary use case—finding post IDs for other tools—which separates it from siblings like list_threads_profile_posts or list_threads_replies.
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 explicitly says 'Use it to find a post id for threads_insights, list_threads_replies, reply_to_thread or delete_thread,' giving clear guidance on when to invoke this tool. It does not state when not to use it or name alternative tools for different needs, but the context is sufficient for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_threads_profile_postsRead a public Threads account’s postsARead-onlyInspect
The recent PUBLIC posts of any Threads account — the raw material for a teardown, for mine_angles, and for ad copy in the language the market actually uses. Use it after threads_profile, or on its own when you already know the handle, and then USE what it returns: draft the brand’s next post or plan_ad off the angles you found. AN EMPTY LIST IS NEVER PROOF THEY HAVE NOT POSTED — Meta returns nothing for a private account, for any account under 100 followers, and for handles our app is not yet approved to read; the note says which of those applies. Read-only, 0 credits. Needs Threads connected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many posts (1–50, default 25) | |
| username | Yes | the Threads handle — "nike", "@nike", or a threads.net profile link |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description reinforces this with 'Read-only, 0 credits.' It adds critical behavior beyond annotations: the empty-list caveat ('AN EMPTY LIST IS NEVER PROOF THEY HAVE NOT POSTED') with three specific reasons, and the auth requirement ('Needs Threads connected'). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, then a critical warning and credits. It is longer than typical, but every sentence earns its place—especially the detailed empty-list warning that prevents misinterpretation. It could be trimmed slightly but remains well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does, when to use it, how to use results, critical limitations (private accounts, <100 followers, unapproved handles), auth requirement, and cost. There is no output schema but the lack is mitigated by the rich usage guidance. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both `limit` and `username` are documented in the schema). The description does not add parameter-specific semantics beyond what the schema provides, but it does give context on how the output is meant to be used. Baseline 3 is appropriate because the schema carries the detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads recent PUBLIC posts of any Threads account, distinguishing it from siblings like list_threads_posts (which likely targets the user's own posts) by emphasizing 'any Threads account.' It also ties its output to downstream tasks (teardown, mine_angles, ad copy), making its role 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?
The description explicitly says 'Use it after threads_profile, or on its own when you already know the handle' and instructs to 'USE what it returns' for drafting or planning. It provides clear context on when to use it but does not explicitly state when not to use it or name direct alternatives, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_threads_repliesList replies on a Threads postARead-onlyInspect
Read the replies on a Threads post. Set conversation:true to walk the entire thread rather than only direct replies. Use before reply_to_thread so you answer with the actual conversation in view.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many replies (1–50, default 25) | |
| postId | Yes | post id from list_threads_posts | |
| conversation | No | true = the whole thread, not just direct replies |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral nuance: the conversation flag changes the traversal from direct replies to the full thread. It also positions the tool as a precursor to replying, which adds workflow context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core purpose, the second delivers the crucial behavioral differentiation (thread walking) and the workflow context. Both sentences earn their place; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with three fully documented parameters and no output schema, the description covers the essential variants (direct vs. full thread) and suggests the typical use case (before replying). There are no missing details an agent would need to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all three parameters (postId, limit, conversation). The description references conversation:true but does not add further parameter syntax or format details; it reinforces what the schema states. Baseline 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('read'), a clear resource ('replies on a Threads post'), and includes the key behavior of walking the entire thread with conversation:true. It also names the sibling workflow ('before reply_to_thread'), distinguishing this tool from related ones like list_threads_mentions and list_threads_posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit context for when to use this tool ('Use before reply_to_thread so you answer with the actual conversation in view') and explains the conversation flag's effect. It does not explicitly list alternatives for when not to use it, but the conversation flag guidance implicitly covers both direct replies and full threads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_brand_hashtag_postsPosts carrying the brand’s hashtags on TikTokARead-onlyInspect
Public posts whose captions carry one of the brand hashtags this account has enabled. It is the hashtag half of brand monitoring, where list_tiktok_mentions covers @-mentions. Omit hashtag for the top posts across every enabled tag; pass one to narrow to it. TWO TIKTOK BEHAVIOURS THAT READ AS BUGS IF NOBODY SAYS THEM: the hashtag filter is CASE-SENSITIVE and must exactly match an enabled tag, and filtering to one tag makes matched_hashtags come back EMPTY on every row. NOTHING IS RETURNED UNTIL HASHTAGS ARE ENABLED. That is a setup step rather than a result: use list_tiktok_brand_hashtags and manage_tiktok_brand_hashtags first, and allow 24 hours after enabling. Capped at the top 1,000 posts of the last 90 days. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION with the brand-insights permission. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | 1 to 90. Default 90 | |
| cursor | No | ||
| fields | No | ||
| hashtag | No | one ENABLED tag, spelled exactly as enabled. The match is case-sensitive | |
| regions | No | ||
| maxCount | No | 1 to 100; TikTok defaults this one to 10 | |
| sortField | No | ||
| sortOrder | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several non-obvious behaviors beyond the annotations: case-sensitive hashtag matching, matched_hashtags being empty when filtering to one tag, returning nothing until hashtags are enabled, the 1,000-post/90-day cap, and the required TikTok account authorization. This is exactly the kind of operational nuance an agent needs.
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 dense and every sentence carries important operational information, but the heavy ALL-CAPS emphasis and long run-on sentences make it less scannable than it could be. It is not padded, yet the structure could be cleaner without losing substance.
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 list tool with 8 optional parameters and no output schema, the description covers the major operational risks: setup prerequisites, auth permission, result caps, and two counterintuitive behaviors. It does not describe cursor-based pagination or output fields, but the essential context for calling the tool successfully 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 only 38%, so the description must compensate. It does explain the most important parameter, hashtag, with case-sensitivity, exact-match requirements, and the omit-vs-pass distinction, and it conveys the 90-day window. However, cursor, fields, regions, sortField, sortOrder, and maxCount are not meaningfully explained in the description, leaving a gap for a low-coverage 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 opens with a precise statement of what the tool does: returns public posts whose captions carry one of the brand's enabled hashtags. It also explicitly contrasts itself with list_tiktok_mentions, which covers @-mentions, making the purpose unambiguous and differentiating it from the closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative tool (list_tiktok_mentions) and the setup tools (list_tiktok_brand_hashtags, manage_tiktok_brand_hashtags) with clear conditions: hashtags must be enabled first, and 24 hours are needed after enabling. It also explains the omit-vs-pass behavior for the hashtag parameter, giving concrete call guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_brand_hashtagsThe brand hashtags TikTok tracks for this accountARead-onlyInspect
The brand hashtags this account curates, in two flavours. kind:'ENABLED' is what TikTok is currently counting (with the date each was turned on, and whether it is old enough to remove). kind:'AVAILABLE' is what TikTok will ACCEPT. A tag qualifies once it has appeared in at least three post captions, either from this account or from a post mentioning its handle. A tag containing the account handle as a substring can also be enabled even when it is not on the available list. AT MOST 50 CAN BE ENABLED PER BRAND. TikTok's own caveat on the available list: test and newly created accounts often return nothing and should not be used to judge whether this works. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION with the brand-insights permission. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | default ENABLED | |
| username | No | normally resolved from the authorization itself. Pass the @handle (without the @) only if that read is refused |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only, free.' It goes beyond annotations by disclosing the qualification logic, the 50-max limit, the handle-substring rule, and the caveat that test accounts may return empty results. This enriches the agent's understanding of both runtime behavior and edge cases.
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 long but every sentence carries essential information: the two flavours, criteria, limit, caveat, auth, and read-only status. It is front-loaded with the core purpose and structured clearly. No filler or redundancy; each clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, variants, qualification, limits, auth, and behavioral caveats. However, with no output schema provided, it does not specify the exact return shape for AVAILABLE hashtags (though it hints at fields for ENABLED). Given the complexity and lack of output schema, a brief note on return format would round it out, but the current level is high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with enums and parameter descriptions, but the description adds substantial meaning: it explains the semantic difference between ENABLED and AVAILABLE, and clarifies when the username parameter is needed (only if authorization read is refused). This goes beyond the schema's basic descriptions, earning a score above 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 verb (list) and resource (TikTok brand hashtags for this account), and explains the two variants (ENABLED and AVAILABLE) with concrete definitions. It clearly distinguishes itself from likely siblings like list_tiktok_brand_hashtag_posts and manage_tiktok_brand_hashtags, even without naming them, by focusing on curated hashtags and the enable/available 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?
Provides explicit context on when to use each kind, including the qualification criteria and the caveat about test/new accounts returning nothing. It also states the authorization requirement and the 50-hashtag limit. However, it does not explicitly contrast with sibling tools (e.g., manage_tiktok_brand_hashtags for changes), leaving some routing to inference. Still, the guidance is strong and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_comment_repliesList every reply to one TikTok commentARead-onlyInspect
All replies to a single comment on a post the authorized TikTok account owns — the complete list, where list_tiktok_comments only ever attaches three. TIKTOK DOES NOT RETURN REPLIES TO A HIDDEN COMMENT AT ALL, so an empty list against a hidden parent means 'cannot read', never 'no replies' — check the parent's status first if the answer looks wrong. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status). Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| status | No | ||
| videoId | Yes | TikTok requires the post id alongside the comment id | |
| maxCount | No | ||
| commentId | Yes | from list_tiktok_comments | |
| sortField | No | ||
| sortOrder | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only safety profile is known. The description adds genuine value beyond annotations: the critical quirk that TikTok returns nothing for hidden comments so an empty list means 'cannot read' rather than 'no replies', plus the explicit authorization requirement (tiktok_account_status). These go beyond what the annotations convey.
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?
Compact and front-loaded with the core purpose; the hidden-comment caveat is emphasized with caps but earns its place as mission-critical context. The authorization note is relevant. Slightly dense with the all-caps styling and multiple clauses, but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema and low schema coverage, the description covers the core task well (purpose, scope, sibling routing, hidden-comment quirk, auth). However, it omits any meaning for the 5 optional parameters (cursor, status, maxCount, sortField, sortOrder) and the return format, which are significant gaps given the sparse 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 29%, so the description must compensate for 5 undocumented parameters (cursor, status, maxCount, sortField, sortOrder), but it does not explain any of them. It only reinforces that this returns the 'complete list' versus three. commentId and videoId are partly covered in the schema itself. The description adds almost nothing for the majority of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('All replies to a single comment on a post the authorized TikTok account owns') with a clear scope (single comment, owned post). It differentiates itself from the sibling list_tiktok_comments by noting the sibling 'only ever attaches three' replies, letting an agent pick the right tool without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternate tool (list_tiktok_comments) and the differentiating condition (three replies vs. complete list), giving an implicit when-to-use signal. It also advises checking the parent comment's status when results look wrong, which is actionable usage guidance. It lacks an explicit 'when not to use' clause but covers the main routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_commentsList comments on one of the brand’s TikTok postsARead-onlyInspect
Read the comments on a TikTok post the AUTHORIZED ACCOUNT OWNS — this is TikTok's answer to list_meta_comments and list_youtube_comments. It sees BOTH public and hidden comments, and by default returns both: TikTok's status defaults to ALL, so the list mixes comments the owner hid with comments TikTok's own moderation, privacy or spam filters hid, and those are not the same thing (the second kind may refuse to unhide). Pass status:'PUBLIC' for only what the public sees. A row carrying parentCommentId IS A REPLY, not a top-level comment — that is how TikTok distinguishes them. include_replies attaches at most THREE replies per comment; use list_tiktok_comment_replies for all of them. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION, which is a separate consent from the TikTok Ads advertiser connection — tiktok_account_status says whether this brand has it. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| status | No | default ALL, which INCLUDES hidden comments | |
| videoId | Yes | the TikTok post id (`item_id`) — the last path segment of a tiktok.com/@handle/video/<id> URL | |
| maxCount | No | ||
| sortField | No | ||
| sortOrder | No | ||
| commentIds | No | filter to specific comment ids; TikTok caps this at 30 | |
| includeReplies | No | attach up to THREE replies per comment — not all of them |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, destructiveHint=false, openWorldHint=true) already cover safety, and the description adds substantial behavioral context beyond them: the returned list mixes owner-hidden and moderation/privacy/spam-hidden comments which 'are not the same thing', parentCommentId signals a reply (not top-level), include_replies attaches at most three replies, and it states it needs separate TikTok account authorization that differs from the Ads advertiser connection. The claim 'Read-only, free' is consistent with the annotations — no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core purpose, but it runs five-plus sentences and packs in a lot of caveats. Every sentence earns its place (reply semantics, status behavior, auth, sibling routing) with no filler, though it leans toward the verbose end. It is well-structured but could be tightened slightly.
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 complex tool with 8 parameters, 50% schema coverage, and no output schema, the description is complete: it covers scope restrictions, the auth requirement, reply-vs-top-level semantics, status default behavior, and the sibling route for full reply lists. Nothing an agent needs to call it correctly on the described dimensions is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema coverage, the description compensates for the two semantically tricky parameters: status (defaults to ALL and includes hidden comments; PUBLIC for public-only) and includeReplies (up to three replies, not all). It also clarifies that parentCommentId in the row distinguishes replies. The remaining params (cursor, maxCount, sortField, sortOrder) are left unexplicated, but they are comparatively self-evident, so the compensation is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource+scope: 'Read the comments on a TikTok post the AUTHORIZED ACCOUNT OWNS'. It explicitly names sibling tools (list_meta_comments, list_youtube_comments) and what it is NOT, so an agent can distinguish it from similar list_*_comments tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is present: it handles owned posts, and it directs the agent to list_tiktok_comment_replies for all replies when include_replies only attaches three. It also names the auth prerequisite (tiktok_account_status) and explains the status filter choice (PUBLIC vs ALL), leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_mention_commentsComments that mention the brand on TikTokARead-onlyInspect
Comments and replies anywhere on TikTok whose TEXT @-mentions the connected account's handle. This is the conversational half of brand monitoring, where list_tiktok_mentions covers post captions. Same four preconditions as that tool (public post, 90 days, adult author, BUSINESS account), so an empty list is not the same as silence. Capped at the top 1,000 by comment likes, and TIKTOK DELIBERATELY DEPRIORITISES a comment that is nothing but the @-mention with no other text, so bare tags may not appear at all. Sorts on different keys from the post list: VIDEO_LIKES, COMMENT_CREATE_TIME or COMMENT_LIKES. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION with the brand-insights and comment-list permissions. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | 1 to 90. Default 90 | |
| cursor | No | ||
| fields | No | ||
| regions | No | two-letter codes; filters on the commenting author's registration country | |
| maxCount | No | 1 to 100; TikTok defaults this one to 10 | |
| sortField | No | ||
| sortOrder | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds substantial behavioral context beyond those: it's capped at top 1,000 by comment likes, TikTok deliberately deprioritizes comments that are only @-mentions, it sorts on different keys (VIDEO_LIKES, COMMENT_CREATE_TIME, COMMENT_LIKES), and it requires specific authorizations and permissions. This goes well beyond the annotation safety profile and helps the agent set expectations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, sibling differentiation, preconditions, a data-quality caveat, sorting options, auth requirements, and read-only/free status. It is front-loaded with the core purpose, and the supplementary details are ordered logically. No filler or repetition.
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 7 parameters, this description provides a remarkably complete picture: it explains the tool's role, preconditions, limitations (cap, deprioritization), sorting options, auth needs, and safety profile. An agent can correctly decide when to call it and how to interpret results, even without parameter-level documentation for cursor or fields. The description covers all critical aspects for correct invocation and interpretation.
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 43%, so the description must compensate. It does add meaning beyond the schema: it names the exact sort keys (sortField enum), explains the cap of 1,000 (likely relates to maxCount or overall limit), and mentions the preconditions that affect the 'days' and 'regions' behavior. However, it doesn't explicitly explain cursor, fields, or regions in detail, so it doesn't fully close the coverage gap. Still, the enrichment is significant for the most impactful parameters, warranting a 4 rather than a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and resource ('TikTok mention comments') and precisely defines the scope: comments and replies whose TEXT @-mentions the connected account's handle. It explicitly distinguishes itself from the sibling tool list_tiktok_mentions (post captions), so an agent can immediately tell them apart.
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 positions this tool as 'the conversational half of brand monitoring' and names the sibling (list_tiktok_mentions) that covers post captions instead. It lists the four preconditions (public post, 90 days, adult author, BUSINESS account), warns that an empty list isn't silence, and explains the deprioritization of bare @-mentions. This gives clear when-to-use and when-not-to-use guidance, plus an important caveat about data completeness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_mentionsPosts that mention the brand on TikTokARead-onlyInspect
Who is talking about the brand on TikTok: every public post whose CAPTION @-mentions the connected account's handle. This is TikTok's answer to x_mentions and list_threads_mentions, and it is the brand-monitoring read the product had for every other channel and not for TikTok. FOUR THINGS TIKTOK ENFORCES THAT MAKE AN EMPTY RESULT AMBIGUOUS, so read them before reporting silence: the mentioning post must be PUBLIC, it must be under 90 days old, its author must not be underage or of unknown age, and THE WHOLE FAMILY ONLY WORKS FOR A TIKTOK BUSINESS ACCOUNT, so a personal account returns nothing at all (tiktok_account_insights reports which one this is). Capped at the top 1,000 mentioning posts however many exist. VIEWS AND REACH COME BACK NULL, NOT ZERO, on any post under 1,000 of either. That is TikTok withholding a number, never a measurement of nothing. Thumbnail URLs expire after 48 hours. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION with the brand-insights permission (tiktok_account_status says whether this brand has it). Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | look-back window, 1 to 90 (TikTok indexes nothing older). Default 90 | |
| cursor | No | ||
| fields | No | defaults to every field TikTok publishes; item_id, create_time, video_link, caption, likes, comments, shares, thumbnail_url, views, reach, creator_handle_name | |
| regions | No | two-letter codes to filter the MENTIONING author's registration country, e.g. ['US','GB']. TikTok publishes 162 of them and answers an unknown one with an empty result, so an unpublished code is refused here instead | |
| maxCount | No | 1 to 100 | |
| sortField | No | ||
| sortOrder | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations (readOnlyHint, openWorldHint, destructiveHint) by detailing four TikTok enforcement rules, the 1,000-post cap, NULL vs zero semantics, thumbnail expiry, and permission requirements. All disclosed behaviors are consistent with the annotation 'readOnlyHint: true' and 'openWorldHint: true' (incomplete data due to cap/enforcement).
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 dense and information-rich, front-loading the core purpose before diving into caveats. While verbose, every sentence earns its place—each detail (enforcement rules, NULL behavior, auth) is essential for correct use. The use of caps for emphasis aids scanning, though the length could be seen as slightly over-packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters and significant external dependencies (auth, account type, TikTok policies), the description covers all critical aspects: scope, limitations, error semantics, permissions, and related tools. The lack of an output schema is acceptable because the behavior of the tool is fully described, including what data may come back (and the NULL caveat). No gaps remain for an agent to misinterpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema already describes 4 of 7 parameters (days, fields, regions, maxCount), the description adds behavioral context that clarifies how parameters like 'days' map to the 90-day window and how 'regions' filter by author country. It does not explain cursor or sort fields, but those are self-explanatory. The description compensates for the incomplete schema coverage (57%) by providing real-world constraints, earning a 4 above 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 exact action (listing posts on TikTok that @-mention the brand handle) and differentiates it from siblings by calling it 'TikTok's answer to x_mentions and list_threads_mentions.' The specific resource (caption mentions) is identified, leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly ties the tool to brand monitoring, states the prerequisites (business account, authorization), and references sibling tools like tiktok_account_insights and tiktok_account_status to resolve conditions. It also warns when results might be empty, guiding appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tiktok_videosList the connected account’s TikTok postsARead-onlyInspect
The connected account’s own TikTok posts with per-video stats — views, likes, comments, shares, duration, cover image and link. TWO WAYS TO ASK: with no arguments it lists the most recent (newest first, up to 20 a page); with videoIds it reads THOSE posts directly however old they are, which is how you answer "how did that specific video do" without paging back through the account. Any id TikTok does not return comes back under unresolved — meaning it is not on this account or no longer exists, which TikTok does not distinguish — never as a zero. Only ever the connected user’s OWN videos. ⚠️ TIKTOK OFFERS NO WAY TO DELETE OR EDIT A PUBLISHED POST through its API — not the caption, not the privacy level, not the comment/duet/stitch settings, not the cover. Every one of those is fixed at the moment of publishing. If the user wants a TikTok changed or taken down, tell them plainly that it has to be done in the TikTok app; do not look for a tool for it. Read-only, 0 credits. Needs TikTok connected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1-20, default 10 (ignored when videoIds is given) | |
| videoIds | No | read these specific TikTok video ids instead of listing recent ones — up to 20 per call |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, and the description aligns by saying 'Read-only, 0 credits.' It adds crucial behavior: the `unresolved` field meaning (missing vs non-existent), pagination limits, and the impossibility of editing/deleting posts. This goes well beyond the annotations and provides complete behavioral 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 verbose but every piece is purposeful: the summary, the two modes, the unresolved behavior, and the edit/delete warning. It's front-loaded and logically ordered, though a few sentences could be tightened without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully describes the return fields (stats, cover, link, etc.), the `unresolved` behavior for missing IDs, pagination, and the connection requirement. It covers everything an agent needs to call the tool correctly and set user expectations.
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 provides basic descriptions for both parameters, but the description adds critical semantics: `limit` is ignored when `videoIds` is given, `videoIds` reads specific posts up to 20 per call, and the unresolved handling. This clarifies the interplay between parameters beyond the schema, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the connected account's own TikTok posts with per-video stats (views, likes, comments, shares, duration, cover image, link). It distinguishes from siblings by emphasizing 'own videos' and the two query modes, leaving no ambiguity about what it does.
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 explicitly explains two usage modes: no arguments returns recent posts (newest first, up to 20 per page), while videoIds reads specific posts directly. It also warns that TikTok offers no API for editing/deleting posts and directs the agent to say it must be done in the TikTok app, preventing misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_watch_findingsRead the competitor watchARead-onlyInspect
Read what the standing COMPETITOR WATCH has found — the new ads each watched brand has launched since the last check, plus the watch's own state (who is watched, when it last ran, when it runs next, and whether the last run actually succeeded). The same board the web app's Ad Spy ▸ Watching tab renders. Use it to answer "what are our competitors running that's new?", to feed a teardown, or to save something worth keeping with save_to_swipefile. Findings marked seed:true are NOT new launches — the first check of a brand has nothing to diff against, so it seeds the board with what that brand is running right now; only later runs surface genuine changes. Read-only and free — it returns the stored results of past runs and never triggers a check (set_competitor_watch({runNow:true}) is what runs one).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max findings to return (default 25, max 75 — the server keeps at most 75, and at most 15 per brand) | |
| competitor | No | only findings for this watched brand (exact name as returned in `watching`) — omit for all of them |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond that: it explains that findings marked seed:true are NOT new launches (first check seeds the board), that it returns stored results of past runs, and explicitly contrasts with the tool that triggers checks. This enriches the agent's understanding of what the tool does and how results should be interpreted, without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but every sentence earns its place: it states the purpose, describes the output, gives usage examples, clarifies the seed behavior, and distinguishes from sibling tools all in a compact block. Information is front-loaded with the core purpose first, and the seed clarification is placed where it naturally matters. It's structured and not 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?
There is no output schema, so the description must explain what the tool returns, which it does (new ads, watch state, seed flag meaning). It covers the read-only nature, the distinction from running a check, and the context of when findings are genuine vs. seeds. For a read tool with no side effects, this is nearly complete; the only minor gap is that it doesn't describe pagination or ordering, but given the sibling context and the read-only annotation, this is not critical.
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% — both 'limit' and 'competitor' have detailed descriptions including defaults, max values, and semantics. The description does not add any parameter-specific information beyond what the schema already provides; it only mentions the limit default implicitly via the schema. Since the schema carries the full weight, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Read') and a clear resource ('the standing COMPETITOR WATCH'), and immediately states what it returns: new ads per watched brand plus the watch's own state. It also explicitly contrasts itself with set_competitor_watch (which triggers a run) and save_to_swipefile (for saving), so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases ('Use it to answer "what are our competitors running that's new?", to feed a teardown, or to save something worth keeping'), and explicitly states what it does NOT do ('never triggers a check (set_competitor_watch({runNow:true}) is what runs one)'). This clearly delineates when to use this tool versus its sibling that performs the actual run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_whatsapp_accountsWhatsApp Business accounts and numbersARead-onlyInspect
The brand’s real WhatsApp Business Accounts and the phone numbers registered on each — the ids every other WhatsApp tool needs, plus each number’s QUALITY RATING, which is what decides how many messages Meta will let it send. Start here. A WABA with no number cannot send anything and the reply says so: Hermoso does not register or verify numbers, that is WhatsApp Manager. A business portfolio that could not be read is REPORTED rather than dropped — an account missing from this list would read as "the brand has no WhatsApp", which is a claim about their business and not about our read. Read-only, 0 credits (WhatsApp conversations are billed by META to the business directly, never in Hermoso credits). Needs Meta connected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false. The description adds significant value beyond this: it explains 0 credits cost with direct Meta billing, the 'Needs Meta connected' prerequisite, and detailed error semantics (portfolio read errors are reported, not dropped, to avoid false claims about the brand). No contradiction with annotations; it enriches the behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but structured: it leads with the core purpose, then important qualifiers (quality rating), then limitations and caveats, and finally cost and prerequisites. Every sentence adds relevant information, though it could be trimmed slightly without loss. It remains front-loaded and readable.
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?
Despite having no output schema, the description covers everything an agent needs: what is returned (WABAs, numbers, ids, quality rating), prerequisites (Meta connected), cost implications, error handling behavior, and what it does NOT do (doesn't register numbers). For a simple no-parameter list tool, this is remarkably complete and leaves no critical 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 has zero parameters, so schema coverage is trivially 100%. Per the baseline for 0 params, a 4 is appropriate. The description doesn't need to add parameter meaning; it instead explains the output and context, which is sufficient.
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: it lists WhatsApp Business Accounts and their registered phone numbers, providing the ids needed by other WhatsApp tools and the quality rating. It clearly distinguishes itself from siblings like list_whatsapp_templates (templates vs accounts) and send_whatsapp_message (sending vs listing), so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Start here,' establishing this as the entry point for WhatsApp operations. It explains that a WABA without a number cannot send anything, and notes that Hermoso does not register numbers (that's WhatsApp Manager). This gives clear context on when to use the tool, though it doesn't explicitly name alternative tools or exclusions for other scenarios. The guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_whatsapp_templatesWhatsApp message templatesARead-onlyInspect
The message templates on one WhatsApp Business Account with the REVIEW STATUS Meta actually holds for each. THE STATUS IS THE POINT: an APPROVED template is the only thing WhatsApp accepts outside the 24-hour customer-service window, and Meta’s own refusal for anything else says "the template does not exist in the specified language or the template has not been approved" — two completely different problems in one sentence. Each row also reports its LANGUAGE, because Meta treats en and en_US as different templates and sending against the wrong one is refused as if it were unapproved. Each row also reports the VARIABLES the template carries — the distinct {{1}}, {{2}} placeholders per component, with the total — because send_whatsapp_message must supply EXACTLY that many and Meta refuses a mismatch with 132000. Read the count off that field, never off the one-line body preview, which is capped. Read-only, 0 credits. Needs Meta connected.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | filter to one template name (Meta matches it exactly) | |
| limit | No | how many (1–200, default 50) | |
| status | No | filter to one review status, e.g. APPROVED or PENDING | |
| wabaId | Yes | the WhatsApp Business Account id, from list_whatsapp_accounts | |
| language | No | filter to one language code, e.g. en_US |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and destructive annotations, the description adds substantial behavior: it explains the ambiguous Meta refusal message, the language per-locale en versus en_US difference, the exact variable count requirement, and the capped one-line body preview. It also openly states read-only, zero-credit behavior and the Meta connection requirement.
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 text is longer than the average tool description, but each section earns its place by covering a plain-sounding distinction that changes the warning: status semantics, language variant semantics, variable count, and preview truncation. It front-loads the central point that status is the key and leaves the lower-consequence details for which the schema already 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?
There is no output schema, so the description carries the burden of describing the return surface: each row has the status, language, distinct-placeholder variable count, and the one-line body preview that should be sourced only for text. It covers preconditions, cost, side-effect profile, and downstream send requirements, leaving the agent enough to call it correctly and speak the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all 5 parameter meanings with 100% coverage, so only the baseline is needed. The description still adds useful parameter-adjacent semantics by explaining why the status parameter matters (approval vs non-approval), why language filtering must be aware of en vs en_US, and how to use the variable count before calling send_whatsapp_message.
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 makes clear these are the message templates on one WhatsApp Business Account and that each row reports Meta's review status, language, and variables. The row-level phrasing and the explicit relationship to send_whatsapp_message make the listing purpose and scope unambiguous, and it is easy to distinguish from account listing, creating templates, or sending messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong contextual guidance: it says check for APPROVED status because only approved templates work outside the 24-hour customer-service window, and it explains that send_whatsapp_message needs exactly the variable count reported here. It also states the Meta-connected prerequisite. It does not explicitly say 'use this instead of list_whatsapp_accounts' or give an alternative for the account listing, so the when-to-use guidance is clear but not exclusions complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_x_dmsRead your X direct messagesARead-onlyInspect
Read the direct messages sent to the connected X account and group them into conversations, newest first — who is waiting on a reply, in their own words. Use it for 'any new DMs on X', 'what did they say', 'anything I need to answer'. Reply with send_x_dm. COSTS CREDITS PER MESSAGE RETURNED plus one account lookup, so keep maxResults small (default 10) and tell the user the cost before pulling a big page. X KEEPS 30 DAYS of direct-message history and offers no date filter, so a short list can mean an old conversation rather than a quiet inbox — say so rather than reporting silence. There is no conversation-list endpoint at X: this builds the thread list by reading events and grouping them, so a conversation whose last message is older than the page you pulled will not appear. Needs X connected, AND an X account connected before direct messages shipped must be reconnected once (Settings ▸ Connectors ▸ X) — X only grants permissions at authorize time.
| Name | Required | Description | Default |
|---|---|---|---|
| eventTypes | No | MessageCreate (default), ParticipantsJoin, ParticipantsLeave. The join/leave events carry no message and are billed like any other, so the default is messages only. | |
| maxResults | No | how many messages to pull, 1-100 (default 10) — EVERY ONE IS BILLED, and omitting it would make X return 100 | |
| participantId | No | read just the conversation with this NUMERIC X account id (not an @handle) | |
| conversationId | No | read just this conversation (from a previous call). One-to-one ids look like "12-345"; group ids are one long number. | |
| paginationToken | No | nextToken from a previous call, to page further back. There is no since/until filter at X — this is the only way to walk history. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnly/openWorld/non-destructive, so credit per annotation-specific extras still non-obvious and consequential: per-message cost, the 30-day retention window and absence of date filters, the lack of a conversation-list endpoint with the consequence that old conversations fall outside the pulled page, and the explicit connector re-auth requirement that X only grants at belong time. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Clearly front-loaded — the first sentence delivers the function, the second delivers the cost hard warning, sibling and use cases come early. But the text is long and duplicates some cost/date-filter nuances already present in the schema describing maxResults and paginationToken. Every sentence adds something, yet the redundancy keeps it at 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and 5 params, yet the description is unusually complete: it describes return grouping and order, the missing-conversations edge case, behavioral consequences of billing, retention, and login state. There is no significant gap an agent would need for calling this safely — the page-bouncer mode and the auth caveat are both explained end-to-end.
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% (all five params have strong descriptions in the schema themselves), so this starts at baseline 3. The description adds genuine depth-up: 'keep maxResults small', 'tell the user the cost before pulling a big page', and stating default (10) in the same prose — personalized the cost-tradeoff semantics of pagination in a way the schema alone does.
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: 'read the direct messages sent to the connected X account and group them into conversations, newest first'. It distinguishes itself from sibling tools by adding the grouping behavior and frames the actual user value ('who is waiting on a reply, in their own words', which is unambiguous and platform-specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names exact triggering queries — 'any new DMs on X', 'what did they say', 'anything I need to answer' — and routes the reply path to a sibling: 'Reply with send_x_dm'. It also pre-empts misinterpretation by instructing the agent 'say so rather than reporting silence' when the 30-day window makes the list short.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_youtube_captionsList (and read) a video’s caption tracksARead-onlyInspect
List the caption/subtitle tracks on one of the connected channel’s videos, and optionally DOWNLOAD one as text. A caption TRACK is not the same thing as burned-in captions: a track is what YouTube indexes the video by, what a viewer toggles on, and what accessibility depends on. Each row says whether YouTube generated it automatically (isAutoGenerated, trackKind ASR) — those are read-only and cannot be edited or deleted. Downloading is also the fastest way to get an existing video’s full script back for repurposing. Read-only, 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | download format, default srt | |
| videoId | Yes | the YouTube video id — captions are listed per video | |
| download | No | a captionId or a language code to also download as text |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat that. It adds valuable behavioral context beyond the annotations: it explains that automatically generated tracks (ASR) are read-only and cannot be edited or deleted, and it mentions '0 credits' (additional cost info not in annotations). This exceeds the baseline and does not contradict any annotation.
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 four sentences and front-loaded with the primary action in the first sentence. Each sentence carries useful information: the track/burned-in distinction, the read-only caveat for auto-generated tracks, the download use case, and the credits/prerequisite. It is not overly verbose, though the 'Downloading is also the fastest way' tip could be considered slightly tangential. Overall it is well structured and efficient.
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 provides a reasonable indication of returns: it mentions 'Each row says whether YouTube generated it automatically' (implying output includes isAutoGenerated). It also covers the prerequisites and cost. However, it does not mention pagination, field lists beyond isAutoGenerated, or the exact download behavior (e.g., file format default is in schema but not in description). For a listing tool with only 3 simple parameters, this is adequate but not exhaustive.
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 schema covers all three parameters with descriptions (100% coverage), including the enum for format and the purpose of download. The description does not add parameter-specific semantics beyond the schema; it mentions 'optionally DOWNLOAD one as text,' which is already clear from the schema's download parameter. The description focuses on domain context (track vs. burned-in) rather than on the parameters themselves, so it earns only the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List the caption/subtitle tracks on one of the connected channel’s videos, and optionally DOWNLOAD one as text,' which gives a clear verb+resource pair and an additional action. It also distinguishes between a caption track and burned-in captions, which removes ambiguity about what is being listed. The purpose is clearly differentiated from siblings like manage_youtube_caption (manage vs. list/read) and list_youtube_videos (videos vs. captions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: it states the prerequisite ('Needs a connected YouTube channel'), notes the read-only nature, and highlights a key use case ('Downloading is also the fastest way to get an existing video’s full script back for repurposing'). However, it does not explicitly name alternative tools (e.g., 'for editing captions, use manage_youtube_caption') or state when not to use this tool. The guidance is clear but not fully explicit about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_youtube_categoriesList the video categories you can publish underARead-onlyInspect
List the video categories YouTube will accept on an upload in a given country. post_to_youtube takes a categoryId and this is the only way to discover a valid one — the id set AND the names differ by country, which is why regionCode is required rather than defaulted. Categories YouTube marks not-assignable are filtered out by default because an upload using one is refused. Read-only, 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| regionCode | Yes | ISO 3166-1 alpha-2 country code — US, GB, DE. YouTube’s category ids differ by country, so this cannot be guessed. | |
| includeUnassignable | No | also return categories YouTube will refuse on upload (default false) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it states 'Read-only, 0 credits' (consistent with readOnlyHint), 'Needs a connected YouTube channel' (a prerequisite not in annotations), and explains the default filtering of not-assignable categories and why regionCode is required. No contradiction with annotations; it enriches the agent's understanding of call requirements and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, and each sentence adds necessary context (workflow link, country-dependency, filtering behavior, prerequisites). No fluff or redundancy; it is efficiently structured for quick comprehension.
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 two parameters and no output schema, the description covers the essential context: purpose, why regionCode is required, default filtering, channel requirement, and credit cost. It doesn't describe the exact return structure, but for a list of categories the agent can infer a reasonable structure; this minor gap prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already well-documented in the schema (regionCode as ISO code with rationale, includeUnassignable with default). The description reinforces the importance of regionCode and the filtering behavior but does not add new semantic details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List') and resource ('video categories') with a precise scope ('YouTube will accept on an upload in a given country'). It distinguishes itself from sibling tools by tying to post_to_youtube and explaining it's the only way to discover a valid categoryId, which is unique among the many list_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly places this tool in the workflow: 'post_to_youtube takes a categoryId and this is the only way to discover a valid one', indicating when to use it. It also mentions that regionCode is required (not defaulted) and that unassignable categories are filtered by default. It does not explicitly exclude alternatives, but no alternative exists for this specific task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_youtube_commentsRead comments on one of your YouTube videosARead-onlyInspect
Read the comments under a video on the connected channel — the questions, objections and exact wording real viewers use. Same raw material for ad copy that list_meta_comments gives you on Meta. Returns author, text, like count, timestamp and reply count, newest first. Read-only, 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max comments, default 25, cap 100 | |
| videoId | Yes | the YouTube video id |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the annotation readOnlyHint with 'Read-only' and adds valuable context: '0 credits', channel connection requirement, and the exact return fields and ordering. These go beyond the structured annotations and help the agent anticipate behavior and output 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 compact: three sentences covering purpose, comparison, and return details plus constraints. The most important action and scope are front-loaded, and no redundant phrasing is present. It could be slightly tighter but is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool, it provides the output field list and ordering (compensating for lack of an output schema), states the prerequisite, and mentions cost. It does not address error cases or how to obtain videoId, but those are minor given the schema and annotations. Overall, sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters (limit with default/cap, videoId as 'the YouTube video id'), and schema coverage is 100%. The description does not add parameter-specific meaning beyond the schema, but the channel requirement is indirectly relevant. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Read the comments under a video on the connected channel'), explicitly differentiates from list_meta_comments by analogy, and lists the exact fields returned. It is unambiguous and distinguishes this tool from many siblings that also involve YouTube or comments.
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 clearly references list_meta_comments as the analogous Meta tool, implying use cases for YouTube vs. Meta. It also notes prerequisites ('needs a connected YouTube channel') and cost ('0 credits'). It does not explicitly state when NOT to use it, but the comparison provides strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_youtube_playlistsList the channel’s playlists (and what is in one)ARead-onlyInspect
List the playlists on the connected YouTube channel — id, title, description, privacy and video count. Pass a playlistId to get that ONE playlist plus its entries in order. IMPORTANT: each entry carries BOTH a videoId and an itemId; itemId is the playlist-ENTRY id and is what manage_youtube_playlist_items needs to remove or re-order a row, because one video can appear in a playlist more than once so a videoId does not identify the entry. Read-only, 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max rows, default 25, cap 50 (YouTube’s own maximum) | |
| pageToken | No | nextPageToken from a previous call | |
| playlistId | No | one playlist to open, with its entries. Omit to list the channel’s playlists. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive, which the description confirms and extends with '0 credits' and the channel prerequisite. More importantly, it explains the critical distinction between videoId and itemId, which affects how results should be interpreted. This goes beyond annotation coverage to prevent misuse.
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 with the purpose, followed by the optional parameter behavior and a crucial note about identifiers. The IMPORTANT callout is placed appropriately and the entire text is compact with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (optional single playlist, dual id fields, and need to interface with management tool), the description covers the return fields, the two usage modes, prerequisites, and the id nuance. There is no output schema, so the description adequately compensates. It leaves no critical ambiguity for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions fully cover all three parameters (limit, pageToken, playlistId), so baseline is 3. The description adds meaning beyond the schema by explaining that playlistId retrieves that single playlist with its entries in order, and implicitly clarifies that limit is capped at YouTube's maximum as stated in the schema. This modest extra value justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the function: listing playlists with their id, title, description, privacy, and video count, and optionally fetching a single playlist's entries. It distinguishes itself from management tools like manage_youtube_playlist_items by explaining the itemId role. This is a precise verb+resource description with clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells when to pass playlistId versus omitting it to list all playlists, and points to manage_youtube_playlist_items for removal/reordering. It also notes the requirement of a connected channel and that it's read-only with 0 credits, providing clear context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_youtube_report_jobsList YouTube bulk reporting jobsARead-onlyInspect
The YouTube BULK reporting jobs running on this channel — which report each one generates, its report type id, and when it was scheduled. Call this to find out whether thumbnail-CTR history is already accumulating, and since when, BEFORE promising a user a number: the bulk API can only answer about days after a job existed. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by confirming 'Read-only, 0 credits' and revealing the timing constraint of the bulk API—that answers are only available days after a job existed. This gives agents actionable knowledge about data freshness and cost, which goes beyond the annotations. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, tightly packed with purpose, usage scenario, and behavioral caveat. The key action is front-loaded, and every sentence earns its place. No fluff or redundancy.
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 parameterless list tool with no output schema, the description is complete: it states what it lists, why to use it, when to use it, and a caveat about data availability. The agent has all necessary context to decide whether and when to call it. No missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty (100% coverage). Per the rubric, baseline is 4 when no parameters are present. The description doesn't need to explain parameters; it instead explains what the tool returns (job info) and when to use it, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists YouTube bulk reporting jobs, including specific details like report type and schedule time. It explicitly differentiates itself from other list_* tools by focusing on the bulk reporting jobs context and mentions a specific use case (thumbnail-CTR history) that ties to its purpose. The verb 'list' plus resource 'YouTube bulk reporting jobs' is specific and 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?
The description gives explicit guidance on when to call this tool: 'BEFORE promising a user a number' and explains the bulk API's latency limitation ('can only answer about days after a job existed'). It doesn't name alternative tools explicitly, but the instruction to check this before promising numbers clearly differentiates it from other tools that might provide analytics data. It lacks a direct 'use X instead' mention, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_youtube_videosList the brand’s own YouTube uploadsARead-onlyInspect
List the connected channel’s OWN recent uploads — video id, title, publish date and privacy — so you can resolve a video WITHOUT asking the user for a link. Call this whenever the user names a video loosely ("my latest", "the shorts one", part of a title) and match it yourself; only ask them when two titles are genuinely ambiguous. This is the tool that gets you the videoId every other YouTube tool needs — youtube_channel returns counts only, and search_youtube searches the PUBLIC index, not your uploads. Includes UNLISTED and PRIVATE videos, which are invisible to any public search. Read-only, 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many recent uploads to return (default 25, max 50) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds valuable context beyond these: it includes UNLISTED and PRIVATE videos, states it costs 0 credits, and mentions the need for a connected YouTube channel. This goes beyond the annotations and helps the agent understand visibility and prerequisites, though it doesn't detail pagination or exact response shape. With annotation coverage, a 4 is appropriate.
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 concise and well-structured: it front-loads the core purpose, then gives usage guidance, then differentiates from siblings. Each sentence adds value, and it's not bloated. It runs a bit long but only because it packs in meaningful routing and scope details; there is little waste. A 4 reflects good balance between conciseness and informational density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter, annotations covering read-only and non-destructive behavior, and no output schema, the description is sufficiently complete. It explains what the tool does, when to use it, what it returns (fields), what it includes (unlisted/private), and prerequisites (connected channel). An agent has everything it needs to invoke this tool correctly without additional external knowledge.
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 schema covers the only parameter (limit) with a full description (default 25, max 50), so schema_description_coverage is 100%. The tool description does not add any extra meaning or syntax beyond the schema. Per the rubric, baseline 3 is correct when the schema does the heavy lifting, and the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (list), a specific resource (the connected channel's OWN uploads), and the exact fields returned (video id, title, publish date, privacy). It also explicitly differentiates from siblings: youtube_channel returns counts only, and search_youtube searches the public index, not the user's uploads. This makes the purpose unambiguous and distinguishes it clearly from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: call this whenever a user names a video loosely and match it yourself, only asking when two titles are genuinely ambiguous. It also lists when-not-to-use by naming alternatives (youtube_channel for counts, search_youtube for public index) and clarifies that it is the prerequisite for other YouTube tools needing a videoId. This is complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_youtube_video_statsBatch YouTube video statsARead-onlyIdempotentInspect
Views, likes and comment counts for up to 50 YouTube videos IN ONE CALL, which is how to answer "how are my last twenty uploads doing" without one youtube_video_insights per video. Pass videoIds from list_youtube_videos. IT CARRIES NO TITLES, and that is the resource rather than a bug: VideoStatsSnippet publishes only publishTime, so join on videoId with list_youtube_videos when a name is needed. YouTube calls this endpoint "intentionally not atomic", so a short answer is normal: a video that is private, deleted, or not visible to the connected account simply does not come back, and this tool names the missing ids. Never report a missing id as zero views. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | defaults to snippet + statistics. An unknown part 400s the whole call, so it is refused here | |
| videoIds | Yes | up to 50 video ids, from list_youtube_videos |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnly, idempotent, open-world, and non-destructive hints. The description adds crucial non-obvious behavior: the endpoint is 'intentionally not atomic', omitting missing/private/deleted videos rather than returning errors or zeroes, and the tool reports missing IDs. It also warns against misreporting missing entries as zero views and clarifies the response omits titles. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place: the batch capability is front-loaded, followed by the title caveat, the join instruction, and the non-atomicity warning. There is no fluff; each clause addresses a distinct potential misstep. The all-caps warning on 'no titles' appropriately highlights a critical constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety/behavior and the schema covering parameters, the description fills all remaining gaps: how to source IDs, how to handle missing results, when to join for titles, and the 'free' read-only nature. An agent has everything needed to correctly select and invoke the 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 coverage is 100% and both parameters are described, but the description enriches meaning: `videoIds` are confirmed as up to 50 and sourced from `list_youtube_videos`, while `part` defaults to 'snippet + statistics' and unknown parts cause a 400, which is why it is restricted. This provides pragmatic guidance that the schema alone does not convey.
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 precise verb-resource pair: 'list_youtube_video_stats' returns 'views, likes and comment counts' for up to 50 videos in one call. It explicitly contrasts with the singleton `youtube_video_insights`, making the tool's distinct purpose obvious. The scope (batch, stats only, no titles) is clearly defined.
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 a concrete use case ('how are my last twenty uploads doing') and explicitly routes the agent to pass videoIds from `list_youtube_videos`. It also explains when to use `list_youtube_videos` for title joining, effectively stating when not to use this tool in isolation. Alternatives are named and conditions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_explainerMake an explainer videoAInspect
Turn a TOPIC into a finished narrated explainer video. Writes a sectioned script, paints a BURST of pictures per section (about one every 1.5s — most of them one-detail edits of the frame before, so it reads as movement rather than a slideshow), narrates each section with TTS, holds each picture PERFECTLY STILL for its own slice of the narration (the motion is the CUT RATE, exactly as Higgsfield's stills pipeline does it — a slow move on a still shimmers), then composites the end card (and any on-screen text you asked for) with the Chrome+ffmpeg engine the ads use (text is never model-painted, so it never garbles). BURNED ON-SCREEN TEXT IS OFF BY DEFAULT — the narration carries the point and the pictures carry the story, so the film ships clean unless the user asks otherwise; captions:true adds held key points and subtitles:true adds narration-timed CAPS (see both). It is an image film WITH motion, not N video-model renders — that's what keeps it affordable. style picks the visual family: the default 'cinematic' is photoreal editorial; every other id is a STYLED, strictly non-photoreal look (illustrated / collage / clay / pixel …) that first renders ONE style-key image and then locks every scene to it, so the whole film holds one look. Cost at the default frame density: a ~130-credit hold for a 60s explainer on the default style, ~100 styled; frameDensity:'lean' roughly halves it and 'minimal' (one picture per section) is ~30. All settle to the exact per-frame image + narration spend (a longer target = more sections = more). Takes SEVERAL minutes — one image render per frame; independent frames are painted concurrently, so it is far faster than the frame count suggests. Needs the writing model and a narration voice engine connected. NOT the tool for a short product ad — use render_ad or generate_video for those, and make_template_ad for the deterministic native formats.
| Name | Required | Description | Default |
|---|---|---|---|
| music | No | music bed under the narration, measured to sit about 14 dB under the voice and sidechain-ducked beneath it. Omit and the KIDS and FAIRYTALE channels get their recommended bed COMPOSED for this film — those two are the only channels a bed is due on unasked, and it costs a small flat fee; every other channel ships dry. 'off' forces silence. 'library' takes a free curated track only, and ships dry when none is on file. NAME A MOOD — upbeat / calm / warm / epic / tense / playful / elegant / hype / chill / dramatic — to compose one on ANY channel, at the same fee. hermoso_capabilities reports the exact figure as explainerMusicCredits; quote it before you turn a bed on or pick a mood. | |
| style | No | visual style. 'cinematic' (default) is photoreal; the rest are non-photoreal styled looks — editorial_collage (halftone cutouts + marker accents), flat_vector, stickman, whiteboard, ink_marker, silhouette, storybook (gouache), paper_diorama, isometric, claymation, pixel_art, watercolor, fluffy_toy (felted plush), low_poly, stylized_3d (matte clay render), studio_3d (preschool toy 3D on a white sweep — the Kids default), mannequin (clay-render reenactment figures — a History alternate). Ask the user which they want rather than picking silently; a styled pick costs more (see the cost note). | |
| topic | Yes | what the explainer should teach or explain — a topic or a short brief | |
| voice | No | narration voice name — omit for the default warm read | |
| channel | No | the CHANNEL TYPE — it sets the pacing, the narration register and the default look, and is orthogonal to `style` (a named style always wins): explainer (casual second-person, fast cuts), history (witty chronological retelling / documentary), kids (fastest, question-first, warm teacher), fairytale (slow, atmospheric myth or folklore). Default 'explainer'. | |
| endCard | No | append the branded end card (default true) | |
| upscale | No | optional FINAL upscale — 2 doubles each side, 4 quadruples. Captions and the end card are burned BEFORE it so they upscale with the frame. It is priced BY LENGTH and it is the expensive part — several times the cost of rendering the film itself. hermoso_capabilities reports the exact figures per length as explainerUpscaleCredits. Never turn it on unasked: quote the number and let the user choose. | |
| captions | No | turn ON-SCREEN TEXT on. DEFAULT FALSE, and leave it false unless the user asks — the narration already says the point and the pictures carry it, so the clean film is the better default. `captions:true` on its own burns SUBTITLES (see below), because that is what a caption is for: showing what is being said when the phone is on mute. Slim white CAPS, thin black outline, bottom safe band, no plate, no box. | |
| brandName | No | brand name for the end card — omit to leave it unbranded | |
| subtitles | No | which on-screen text, once `captions` is on. LEAVE IT UNSET (or true) for SUBTITLES — every spoken word, in order, timed to the narration; free, no extra render, no extra credits, and there is NO cue limit, so the whole film is subtitled however long it runs (at most 5 words / 32 characters a line). Set it FALSE only if the user explicitly wants section HEADINGS instead: one short summary label held over each ~7-15s section. That is NOT what is being said — it is a label about it — so it is the wrong answer to "add captions" and to anyone watching on mute. `subtitles:true` also implies `captions:true`. TIMING: each cue is anchored to that section’s REAL measured narration length and distributed inside the section by character count — exact at every section boundary, approximate to a few tenths of a second within one. It is not a word-level speech clock, so never promise frame-accurate sync. | |
| aspectRatio | No | '9:16' default | |
| frameDensity | No | how many pictures per second of narration, and therefore what it costs. 'standard' (default) is a frame about every 1.5s — the density Higgsfield's own stills pipeline enforces; 'lean' is one about every 2.5s (the longest hold that still reads as a film, ~40% of the frames and ~40% of the cost); 'minimal' is ONE picture per narration section, which is cheapest and is frankly a slideshow. Only drop below the default if the user asked for something cheaper. | |
| durationSeconds | No | target length 20-120s (default 60); drives the section count — ~10s of narration each, 3-8 sections |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations, detailing the exact render behavior: per-frame image generation, motion via cut rate, text compositing with Chrome+ffmpeg, concurrency, and the several-minute runtime. It explains the default for on-screen text and cost implications, giving the agent a complete mental model. No contradiction with annotations (readOnlyHint=false is consistent with creating a video).
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 dense, single-paragraph wall of text. It is front-loaded with purpose and contains no fluff, but it lacks visual structure (no headers, bullets, or breaks) that would help an agent parse key facts quickly. Given the tool's complexity, length is justified, but structure could be improved for scannability; it's not concise in the sense of brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters, no output schema, and a complex generation pipeline, the description covers all essential operational context: prerequisites, time expectations, cost ranges for different settings, defaults, and interaction between parameters (e.g., subtitles implying captions). It also names the exact engine (Chrome+ffmpeg) and the motion philosophy. Nothing an agent needs to decide whether and how to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter has a baseline description. The tool description adds crucial context beyond that: it explains defaults (captions off, subtitles implication), cost multipliers per style and frameDensity, and the nuance of `captions:true` implying subtitles. This significantly enriches understanding, though it doesn't exhaustively restate every parameter — a 4 is warranted for the added value.
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 opens with a precise statement: 'Turn a TOPIC into a finished narrated explainer video' — a specific verb, resource, and outcome. It goes on to detail the pipeline (script, pictures, TTS, end card) and explicitly distinguishes itself from siblings like render_ad and generate_video, making its scope unmistakable.
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 states exactly when to use the tool (turning a topic into an explainer) and when not to ('NOT the tool for a short product ad'), naming explicit alternatives with conditions. It also lists prerequisites (writing model, narration voice engine) and covers cost variants, so an agent knows the trade-offs before invoking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_template_adMake template adAInspect
Render a NATIVE-STYLE TEMPLATE ad from pure HTML — no AI video/image model in the loop, renders in ~30 seconds for a couple of credits. Perfect for native-feel social ads at volume. YOU author the content (short, casual, believable — never marketing-speak). Templates (pass as config.template): 'imessage-chat' (VIDEO ~15s: a real-looking iMessage thread where a friend reveals the product as a rich-link card; config: { thread: { contactName, messages: [{from:'them'|'me', text?, product?:{image,title,domain}}] }, theme?:'dark'|'light', endCard:{headline,cta,domain,logo?,color} } — 4-6 short lowercase bubbles, product card mid-thread from 'me', 1-2 excited replies after); 'chatgpt-chat' (VIDEO: a ChatGPT answer streams the punchline; config: { question, answer (may bold the brand), productImage?, endCard }); 'apple-notes' (VIDEO: an iPhone note types itself out; config: { title, lines: string[], theme?, endCard }); 'value-prop' (VIDEO ~17s kinetic typography: config: { hook (≤40 chars), claims: string[] (3-5 COMPLETE phrases, ≤6 words / ≤34 chars each — a finished thought, NEVER a clipped clause like 'Looks good on any'), productImages: string[] (2-3 DISTINCT photos — one rotates per card), palette: string[], endCard }); 'static-mockup' (IMAGE: config: { style:'imessage'|'notes'|'card', size?:{w,h}, ...style fields }); 'airdrop-carousel' (VIDEO ~10s: an iOS AirDrop share card springs up and cycles 3-16 REAL product photos to a full-lineup payoff; config: { brandName, products: [{image, title?}], contactLine?, endCard }); 'app-ui-tour' (VIDEO ~12-16s for APP brands: floating-iPhone mockup walks through REAL app screenshots with kinetic captions; config: { hook?, appName, iconImage?, beats: [{screenImage, caption}] (2-6), palette?, fontStack?, endCard }); 'imessage-cascade' (VIDEO ~12s: iOS notification banners spring in and stack over a blurred backdrop; config: { notifications: [{sender, text}] (4-8), backgroundImage?, endCard }); 'photo-grid' (VIDEO ~8s: collage assembles real photos one at a time; config: { title?, photos: [{image, label?}] (4-9), palette?, fontStack?, endCard }); 'vignette' (VIDEO ~12s: cinematic Ken-Burns hero film; config: { hook, lines: [2-4 ≤40ch], heroImage, palette?, fontStack?, endCard }); 'kinetic-type' (VIDEO ~9-15s typographic motion design with NO VOICEOVER — it is NOT a silent asset: it always carries its own synthesised SFX (whoosh/tick/chime) and, once a curated track is on file, the family's loudest music bed at -16 LUFS; config.music:'off' silences the bed but never the SFX: 3-6 short phrases each land word by word on a full-bleed brand card (product beats caption the phrase over the photo instead), the longest word picked out in the brand accent, and a skewed accent slab wipes every cut; supply productImages and every OTHER beat becomes a full-bleed product shot with its phrase captioned over it — with none it renders as pure typography, so it needs NO photos; config: { phrases: string[] (3-6, ≤34 chars each — punchy, declarative, ONE idea per phrase, a finished thought never a clipped clause), productImages?: string[] (up to 4 DISTINCT photos), palette?: string[], fontStack?, endCard }); 'myth-vs-fact' (VIDEO ~15-26s VO-FIRST kinetic explainer with a real VOICEOVER — the family's ONE paid-audio format: a calm-authority read busts 2-4 myths, each MYTH line slamming in with a red per-line strike then the counter FACT line landing bold+affirmative, word-level KARAOKE lighting each word as the VO speaks it; config: { pairs: [{ myth (≤50ch, the common wrong belief), fact (≤60ch, the corrective truth — wrap its payoff phrase in [brackets] to accent it) }] (2-4), palette?, fontStack?, endCard }. Real product truths only — NEVER invent stats. Costs the flat template credits PLUS a small voiceover charge); 'carousel' (MULTI-IMAGE: 5-10 branded 1080×1080 PNG slides for Meta/LinkedIn/IG carousels — returns an images[] array, one PNG per slide; config: { cover: { hook?, title }, slides: [{ headline (≤8 words), support? (≤16 words), stat?: { value, label } }] (3-8; a stat slide is a REAL user-supplied number like '94%' or '40k+' + a label, never invented), cta: { headline, cta?, domain? }, productImage?, logo?, palette?, fontStack?, endCardColor? }). Every VIDEO format except myth-vs-fact (VO-first, deliberately dry) also gets a mood-matched MUSIC BED when a curated track is on file (the library ships empty — no track means no bed, never a paid generation) under its own SFX, from the curated library — free, no model, no extra credits; set config.music:'off' for a silent cut or a mood name (upbeat/calm/warm/epic/tense/playful/elegant/hype/chill/dramatic) to re-mood it. Image URLs may be any public URL — the server localizes them. Spends a couple of credits.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes | the template config — MUST include config.template (one of the template ids above) plus that template's fields |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false but no other behavioral detail. The description compensates richly: it discloses cost ('couple of credits'), render speed (~30 seconds), output formats (video, image, multi-image), the absence of AI models, music bed behavior with SFX and how to silence ('config.music:'off''), and even per-template behavior (e.g., myth-vs-fact includes a voiceover charge). No contradiction with annotations exists; it adds substantial value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely long (~800 words) but every sentence carries unique specification for one of 11 templates. It is structured with each template delimited by quotes, config inline, and behavioral notes grouped per template. It could improve by using bullet points or subheadings, but given the breadth and density, the current prose is organized and front-loaded with the core value proposition before diving into template details. It earns a 4 for being appropriately sized relative to complexity.
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 multi-template tool with no output schema, the description is exhaustive: it covers every template's configuration, output type, duration, visual/audio characteristics, costs (including the voiceover add-on for myth-vs-fact), and even content authoring rules (e.g., 'NEVER invent stats'). An agent could invoke any template correctly with zero further information. The absence of an output schema is fully compensated by explicit output descriptions (e.g., 'returns an images[] array, one PNG per slide').
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only one 'config' property with empty properties and a generic note. The description is the entire semantic payload: it defines config.template, enumerates each template's exact config keys, value constraints (e.g., '≤40 chars', '3-5 COMPLETE phrases'), and per-template behaviors. With schema coverage at 100% but literally zero property definitions, the description fully compensates and goes far beyond the schema's placeholder.
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 opens with a precise verb ('Render') and a specific resource ('a NATIVE-STYLE TEMPLATE ad'), explicitly distinguishing itself from AI video/image model generation. It names 11 distinct templates, each with a clear output type (video, image, multi-image), making the tool's scope unmistakable and separating it from siblings like make_explainer, render_ad, and generate_video.
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 the tool is 'Perfect for native-feel social ads at volume' and instructs the agent that it 'YOU author the content (short, casual, believable — never marketing-speak)', giving clear usage context. It doesn't explicitly name alternative tools or conditions for when not to use it, but the positioning against AI-heavy generation and the emphasis on template-based rendering makes the intended use clear. A brief contrast with a sibling like make_explainer would elevate it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_thumbnailMake video thumbnailAInspect
Render a click-driving YOUTUBE / Shorts / Instagram THUMBNAIL or video cover — the full production pipeline (concept framework → casting → scene → render → surgical tweaks → text), not a bare image prompt. Use this for any "thumbnail", "video cover", "video preview" or MrBeast-style packaging ask INSTEAD of generate_image. About 9 credits per variant; the headline overlay is free.
CONCEPT — every thumbnail must open an INFORMATION GAP (the image raises a question the title answers) while staying truthful to the video. Brainstorm ≥5 concepts across the 16 frameworks before you pick, and feel free to combine two. Frameworks (pass as framework): before_after · social_ui · three_step · screenshot · posed_portrait (the default) · posed_action · specific_day · graphical · landscape · map_aerial · product · adding_text · repetition · size_difference · news_clip · amplified_reality. Call hermoso_capabilities for each one's full 'realize it with' note plus the emotion, overlay-style, font and rim-colour catalogs.
THREE GATES, all BEFORE you render:
WHO IS IN FRAME — never assume and never silently substitute a stranger. If the framework puts a person in frame and no face photo is attached, the tool refuses (nothing rendered, nothing charged) and tells you to ask the user once: themselves (send a face photo → the identity gets locked), a generated person (
castGenericPerson:true), or a people-free framework.TEXT — the default is a CLEAN render with the headline TYPESET OVER THE TOP afterwards (free, always legible, correctly spelled). Just pass
headline. Only setbakeText:trueif the user explicitly asks for the words painted INTO the image — verified live, that renders the asked-for words correctly but leaks garbled invented text across the rest of the frame. Never infer text intent from the topic or the framework.HOW MANY — ask once whether they want one thumbnail or a SET (offer 4: the same concept at different emotions and/or camera takes). Default is 1;
variantscaps at 16.
IDENTITY LOCK is automatic for every attached face photo. emotion is the single biggest CTR lever on a face: shock · hype · fear · confusion · determination · smug · charisma · disgust · awe · rage · laugh (or your own phrase). Finished thumbnail needs a fix? Re-call with tweak + sourceImage for a surgical, pixel-faithful edit (emotion / background / background_color / rim_light) instead of re-rendering — tweaks chain. ALWAYS check the returned postRenderCheck against the image before you present it.
PROMPT LANGUAGE — write every DESCRIPTIVE field in ENGLISH (sceneBrief, keyElements, location, composition, background, topic, each person's describe, and every reference field), translating the user's wording where needed: the image models are trained on English and a non-English scene description renders noticeably worse. Text that gets BAKED OR TYPESET stays verbatim in the user's own language — headline, headlineLines and bakedUiText are never translated.
| Name | Required | Description | Default |
|---|---|---|---|
| font | No | headline font (default Anton). Alternatives incl. Bebas Neue, Oswald, Archivo Black, Montserrat, Inter, Playfair Display | |
| logo | No | a brand logo URL or path to place into the composition | |
| split | No | split/panel LAYOUT — only when the user asks for one ("split", "before/after", "versus screen"). "X vs Y" as a SCENE stays one unified frame | |
| takes | No | camera takes per emotion, 1–4: designed framing / low-angle hero / extreme close-up / wide dutch tilt | |
| topic | No | the video's topic — used to pick the hero object when you don't name keyElements | |
| tweak | No | surgical pixel-faithful edit of a FINISHED thumbnail — needs sourceImage | |
| logo3d | No | first turn the flat logo into a volumetric 3D render (one extra billed image), then composite that | |
| people | No | people described in prose instead of by photo (each still gets the chosen expression) | |
| emotion | No | the expression on the face (default 'shock') — a preset id or your own phrase | |
| bakeText | No | default false. true paints the headline INTO the generation — only on an explicit user ask; it leaks garbled text elsewhere in the frame | |
| emotions | No | render one variant per emotion (variants = emotions × takes, max 16) | |
| headline | No | 2–4 word headline. Typeset OVER the finished render by default (free, always legible); newlines split it into stacked lines | |
| location | No | place, time of day, weather, atmosphere | |
| rimColor | No | colored back+hair light — ONLY when the user names one: 'ice-blue' / 'neon-magenta' / 'toxic-lime' / 'amber-gold' / 'pure-white' | |
| variants | No | how many thumbnails to render (default 1, max 16). Each is its own billed render — offer a set of 4 rather than assuming | |
| framework | No | concept framework id (default 'posed_portrait'); see the list in this description / hermoso_capabilities | |
| reference | No | fields YOU extracted by eye from a reference thumbnail. Extract ALL of: brief (one dense sentence on the concept), subject (pose/action generically, NEVER a specific identity), elements, location, composition, background, split (boolean), split_count, person_count (0-3), emotion (one of the 11 presets or 'other'), emotion_detail (one vivid sentence covering eyes, brows, mouth, head angle). emotion + emotion_detail carry the reference's actual facial performance, which is the single biggest CTR lever on a face; split/split_count reproduce its panel structure. The reference image itself is never sent to the model | |
| background | No | override the default bold saturated colour-field background | |
| faceImages | No | up to 3 face photos (URLs or local paths) — each becomes a locked CHARACTER identity, in order | |
| sceneBrief | No | what the thumbnail depicts — the concept in one dense sentence, rendered exactly | |
| aspectRatio | No | '16:9' (YouTube, default) / '9:16' (Shorts) / '4:5' (Instagram) / '4:3' / '1:1' | |
| bakedUiText | No | short label for a text-carrying framework (a chat bubble, a DAY N badge, a news lower-third, a map callout) — needs frameworkRequested:true | |
| composition | No | override the default large-foreground-subject composition | |
| keyElements | No | signature props / effects that make it pop — oversized, flying toward camera | |
| sourceImage | No | the finished thumbnail URL a `tweak` edits; tweaks chain, so feed each accepted output into the next | |
| overlayStyle | No | headline style: 'beast' (default, white + heavy black stroke) / 'fire' / 'neon-lime' / 'clean-glass' / 'marker' | |
| forceGenerate | No | render the 'screenshot' framework anyway (it is normally a real video frame, not a generation) | |
| headlineLines | No | explicit headline lines (up to 3) — overrides splitting `headline` on newlines | |
| headlinePlace | No | where the headline sits — never over the face (default 'bottom') | |
| restrainedGrade | No | true for a calm / premium / muted look instead of the default punchy poster grade | |
| castGenericPerson | No | pass true only after the user has explicitly chosen a generated stranger over their own face | |
| frameworkRequested | No | true ONLY when the USER named this framework — it is what authorizes a text-carrying framework (social_ui / news_clip / specific_day / map_aerial) to bake its short UI label |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses numerous behavioral traits beyond the sparse annotations: it refuses to render when a person is in frame without a photo, charges ~9 credits per variant, leaks garbled text if bakeText is used, automatically locks identities, supports chained tweaks, and requires checking postRenderCheck. These are rich, non-obvious behaviors that go well beyond what annotations convey.
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 long but well-structured with clear headers (CONCEPT, THREE GATES, IDENTITY LOCK, PROMPT LANGUAGE) and front-loads the core purpose. Each section carries actionable guidance; while some redundancy exists (e.g., the framework list is repeated), the complexity of 32 parameters justifies the length. It earns a 4 rather than 5 due to being somewhat verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and complex generation behavior, the description covers the full workflow: gates, credit costs, language requirements, and post-render verification. It mentions postRenderCheck but doesn't detail the response structure, which is a minor gap. Overall it is highly complete for a generation tool with 32 parameters.
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?
Although the schema covers all parameters with descriptions (100% coverage), the tool description adds substantial contextual meaning. It explains when to use key parameters (e.g., bakeText only on explicit ask, headline for typesetting over the top, variants cap at 16, emotion as the biggest CTR lever) and clarifies how they interact with the pipeline. This goes far beyond schema help text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: rendering click-driving thumbnails/video covers through a full production pipeline. It explicitly distinguishes itself from generate_image, identifying the exact use case and resource. The verb 'render' and specific platforms (YouTube/Shorts/Instagram) make the purpose 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?
The description gives explicit guidance on when to use this tool vs alternatives: 'Use this for any thumbnail... ask INSTEAD of generate_image.' It also directs the agent to call hermoso_capabilities for framework details, and outlines specific gates (e.g., when a face photo is required) that dictate when to pause and ask the user. This provides clear decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_instagram_product_tagsRead or update the product tags on a published Instagram postAIdempotentInspect
READ the product tags on a post the brand has already published, or ADD/MOVE tags on it. Pass tags to update: Meta's own behaviour is "updates coordinates if the product is already tagged; otherwise adds new tag" — so it is ADD-OR-MOVE, never replace-all, and it CANNOT be used to take a tag off. THERE IS NO WAY TO REMOVE A PRODUCT TAG: Meta documents Creating, Reading and Updating on this edge and no delete at all, so Hermoso will not guess at one — deleting the post is the only thing that removes its tags, and the reply says so rather than implying otherwise. The answer is always READ BACK from Instagram, and it separates tags that are STORED from tags that will actually be SHOWN — only an "approved" product ever appears on a published post. Read is free; the update costs 0 credits too.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ADD or MOVE these tags. x and y are FRACTIONS of the image, 0.0 (left/top) to 1.0 (right/bottom) — 0.5,0.5 is the middle. Omit to just read. Max 20 on a feed post. | |
| pageId | No | Facebook Page id — omit when only one Page is connected | |
| mediaId | Yes | the numeric Instagram media id, from list_instagram_media |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=true, destructiveHint=false) by disclosing exact behavioral nuances: Meta's add-or-move behavior, the impossibility of deletion, the read-back requirement, and that only 'approved' products show. It also clarifies that Hermoso will not guess at a delete operation, aligning with the destructiveHint=false annotation. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence contributes critical information—purpose, semantics, limitations, read-back behavior, and cost. It is front-loaded with the core action and then details constraints. While it could be tightened, the density justifies the length given the tool's complexity. The structure is logical, so a 4 fits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description fully compensates by explaining what the tool returns ('The answer is always READ BACK from Instagram' and separates stored vs shown tags). It covers read vs update, the coordinate system, max tags, permission to omit pageId, and cost. An agent has everything needed to call this correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions already cover parameters thoroughly (100% coverage): tags explains coordinates and max count, pageId explains omission, mediaId explains source. The description adds value by reinforcing the add-or-move semantics for the tags parameter and mentioning the credits behavior, which isn't in the schema. Since the schema does the heavy lifting but the description adds meaningful nuance, a 4 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 explicitly states the tool's purpose: 'READ the product tags on a post the brand has already published, or ADD/MOVE tags on it.' It clearly distinguishes the two operations and even notes what it cannot do (remove tags). The verb 'READ' and 'ADD/MOVE' are specific and tied to the resource, making the purpose 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?
The description provides clear usage guidance: 'Pass `tags` to update' and explains the add-or-move semantics. It explicitly states when NOT to use it for removing tags (it CANNOT be used to take a tag off and there is NO WAY TO REMOVE A PRODUCT TAG). This gives both positive and negative usage conditions, leaving no ambiguity about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_linkedin_postEdit or delete a LinkedIn postADestructiveIdempotentInspect
Edit or delete a published LinkedIn post — personal profile or company Page. Pass postUrn, the full urn returned when it was published. action:"edit" changes ONLY THE COPY: LinkedIn does not allow the image or video of a published post to be replaced, so a new visual means a NEW post — tell the user that instead of promising a swap. action:"delete" is immediate and public and requires confirm:true.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | the new copy, for action:"edit" | |
| action | Yes | ||
| confirm | No | REQUIRED true to delete | |
| postUrn | Yes | the full LinkedIn post urn returned by publishing |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructive and non-readonly, but the description goes further: it explains LinkedIn's limitation on replacing visuals, the side effects of delete (immediate/public), and the confirm requirement. It fully discloses behavior beyond the hints, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every phrase serves a purpose: it defines scope, parameter requirements, behavioral constraints, and user guidance. There is no fluff or repetition, and it's front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool without output schema, the description covers all necessary operational details: parameters, action-specific conditions, platform limitations, and how to handle edge cases (visual changes). An agent has everything needed 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 covers 75% of parameters with descriptions, but the description adds crucial context: postUrn must be the full urn from publishing, action ties to edit/delete, text is only for edit, and confirm is mandatory for delete. It enriches the semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool edits or deletes a published LinkedIn post, specifying both personal profile and company Page. It differentiates the two actions and their effects, making the purpose unambiguous and distinct from siblings like post_to_linkedin.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to pass the postUrn, explains the edit action only changes copy and that a new visual requires a new post, and states delete requires confirm:true and is immediate/public. This gives clear when-to-use and constraints without needing to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_meta_partnership_creatorAdd or remove a Partnership Ads creatorAIdempotentInspect
Add a creator to — or remove one from — this brand’s Partnership Ads lists. Name at least one list: allowAds (whose content this brand may RUN AS AN ADVERT) and/or allowTagging (who may TAG this brand as a paid partner on their own post). NEITHER DEFAULTS ON, because one of them lets somebody attach this brand’s name to their own post. ADDING IS A REQUEST, NOT AN APPROVAL: Meta’s own name for the operation is "send permission request", the creator accepts on their own Instagram account in their own time, and until the read-back reports approved this brand cannot advertise their content. Never tell anyone a partnership is live off the back of this call — report the status the reply carries. THE OUTCOME IS READ BACK OFF META’S OWN LIST, NEVER TAKEN FROM THE WRITE’S REPLY — because Meta answers the ADD with HTTP 500 (code 1, “Please reduce the amount of data you’re asking for”) while performing it, measured 4/4 on 2026-08-25. If this reply carries metaWriteError alongside a successful summary, that error is Meta noise about a write that HAPPENED: do not retry, and do not tell the user it failed. The reply’s verdict is one of applied / already / unchanged / unknown, and unknown means the list could not be re-read — which is not the same as nothing having changed. REMOVING FLIPS A STATUS TO “Canceled”; it does not delete the row. One tool does both lists because Meta removes from them with two DIFFERENT verbs (DELETE on one, a revoke flag on the other) and a caller who assumes one silently does nothing on the other. 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Facebook Page id — omit when only one Page is connected | |
| remove | No | revoke instead of add | |
| creator | Yes | the creator’s Instagram @username, or their numeric Instagram account id. The ad-permission list accepts either; the tag-approval list takes numeric ids ONLY, because Meta publishes no username form for its parameter — use instagram_profile to turn the handle into that id. An id that did not come from Meta is rejected with “An unknown error has occurred.” (HTTP 500, code 1), which names no cause and looks like an outage rather than a bad argument. | |
| allowAds | No | the Partnership Ads permission list — whose content this brand may run as an advert | |
| creatorIds | No | for `allowTagging`, which accepts several NUMERIC ids at once. A handle here is refused by name rather than sent and rejected by Meta — run instagram_profile on each handle first and pass the ids it returns. | |
| allowTagging | No | the tag-approval list — who may tag this brand as a paid partner on their own organic post |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: Meta answers the ADD with HTTP 500 on success, a metaWriteError can accompany a successful summary, removing flips status to Canceled rather than deleting the row, and the outcome is read back from Meta’s list. These are exactly the non-obvious traits an agent needs to avoid misreporting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but nearly every sentence carries an important operating constraint, and the core operation is front-loaded. Some repetition and design rationale could be trimmed without losing signal, but the length is mostly justified by the semantic complexity and the misleading Meta error behavior.
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 available, the description covers the verdict vocabulary, the read-back semantics, the metaWriteError condition, the Canceled-not-deleted behavior for removal, and the list differences. An agent has enough context to call the tool correctly and report the outcome without overstating a partnership as being live.
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?
Even though schema coverage is 100%, the description adds critical meaning: the tag-approval list accepts numeric ids ONLY, creatorIds is only for allowTagging, offsets hand are refused by name, and a nickname from Meta can produce a misleading 'unknown error.' This materially improves argument construction beyond what the schema documents.
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 opens with a specific verb and resource: 'Add a creator to — or remove one from — this brand’s Partnership Ads lists.' It then names the two concrete lists, allowAds and allowTagging, so an agent can clearly distinguish this tool from read-oriented siblings such as list_meta_partnership_creators.
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 clearly states when the tool is needed: adding or removing a creator from the two Partnership Ads lists, and it warns against treating an add as an approval. It does not explicitly name sibling alternatives such as list_meta_partnership_creators or delete_creator for the read-back path, but the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_meta_postEdit or delete a published postADestructiveInspect
Edit the text of, or delete, a published post. target:"facebook" → edit the message (action:"edit", message:…) OR delete (action:"delete"); target:"threads" → delete only (Threads has no edit API); target:"instagram" → DELETE ONLY — Meta lets you change nothing on a published Instagram post except whether comments are enabled, so a caption cannot be fixed; deleting covers ordinary posts, Stories, Reels and ENTIRE carousel albums (Instagram cannot remove one card out of an album — pass the album’s own media id, from list_instagram_media). Deleting is permanent. FOR INSTAGRAM, CALL IT WITHOUT confirm FIRST: nothing is deleted and you get back the post’s real caption, its likes and comments and how many carousel cards go with it — show the user exactly that, then call again with confirm:true plus confirmName (and confirmChildren for an album) if the refusal asks for them. A post nobody has liked or commented on yet stays a one-call delete. INSTAGRAM DELETE NEEDS A RECONNECT ON AN OLD CONNECTION: the instagram_manage_contents permission joined Hermoso’s Meta grant on 2026-08-05, so any Meta connection made before then must be reconnected (Settings ▸ Connectors ▸ Meta) before Instagram will accept a delete. Call the tool rather than pre-refusing — every refusal it can raise names the one thing that fixes it.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | edit the text (FB only) or delete the post | |
| pageId | No | which Page to use — needed when the post id has no page prefix, or when the brand has several Pages and you are deleting an Instagram post | |
| postId | Yes | the post id returned by post_to_meta — for Instagram, the media id from list_instagram_media | |
| target | No | default facebook | |
| confirm | No | REQUIRED true to delete (permanent) | |
| message | No | the new post text (action:"edit" on facebook) | |
| confirmName | No | Instagram only: the post’s exact caption line, exactly as the unconfirmed call reported it — required once the post has any likes or comments | |
| confirmChildren | No | Instagram only: how many carousel cards the delete also destroys, as the unconfirmed call reported |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations: it discloses that deletion is permanent, that Instagram cannot edit captions, that deletion removes entire carousel albums, and that old connections need reauthorization (with a specific date). It also describes the unconfirmed-call behavior (returns caption, likes, comments, carousel count) and the confirmation workflow. This fully informs the agent about side effects and prerequisites, complementing the annotations (destructiveHint=true) with concrete specifics.
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 long but information-dense, with no wasted words. It starts with the core purpose, then systematically covers target-specific rules, the required two-step confirm workflow, and a critical permission note. Each sentence contributes essential knowledge (e.g., Threads has no edit API, Instagram delete covers whole albums, reconnect date). The structure is logical and scannable, front-loading the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers every aspect needed to call correctly: per-platform capabilities, deletion permanence, the unconfirmed-call return value and how to act on it, the confirmName/confirmChildren requirements, the album handling, the reconnect requirement, and the directive not to pre-refuse. There is no output schema, but the description compensates by explicitly describing what the unconfirmed call returns. For an 8-parameter destructive tool with multi-step flow, this is 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?
The description adds substantial meaning beyond the 100% schema coverage: it explains the semantic role of confirmName (must match exact caption from unconfirmed call), confirmChildren (carousel card count), pageId (needed for multiple Pages or Instagram deletes), and clarifies that action:'edit' only applies to facebook. It also contextualizes postId as either a post id or an Instagram media id. This is rich, practical guidance that the schema descriptions alone do not provide.
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 precisely what the tool does: edit or delete a published post, with distinct behaviors per target platform (facebook, threads, instagram). It clearly distinguishes from siblings like 'comment_on_meta_post' and 'post_edit' by covering both edit and delete across Meta's platforms, and by specifying exactly what is possible on each. The purpose is unambiguous and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use guidance is provided: when to edit (facebook only), when to delete (all platforms), when to use the two-step confirm flow for Instagram (posts with likes/comments), when to pass confirmName/confirmChildren, and which sibling tool to use for album IDs (list_instagram_media). It also instructs to call the tool rather than pre-refusing, and explains the reconnect requirement. This is comprehensive and leaves no ambiguity about when and how to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_sheet_tabsAdd, rename or delete a sheet tabADestructiveInspect
Add, rename or delete a tab in a Google Spreadsheet. action:"add" + title · action:"rename" + tab + newTitle · action:"delete" + tab. Name the tab by its TITLE or its numeric sheetId (list_sheet_tabs gives both); an unknown tab is refused with the real list rather than a Google error nobody can map back. DELETING a tab destroys everything on it: call it without confirm first to get the filled-cell count, then confirm:true + confirmCells. Google does not allow removing the LAST remaining tab in a file, and that is refused by name with the way out (clear it, or delete the whole file with delete_drive_file). Every action is read back from the spreadsheet before it is reported as done.
| Name | Required | Description | Default |
|---|---|---|---|
| tab | No | which tab — its title or numeric sheetId (rename / delete) | |
| title | No | the name for the new tab (action:"add") | |
| action | Yes | ||
| confirm | No | ||
| newTitle | No | what to rename the tab to (action:"rename") | |
| sheetUrl | No | ||
| confirmCells | No | ||
| spreadsheetId | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses critical behaviors: deletion destroys data and requires a confirm step, unknown tabs are refused with a real list instead of a cryptic error, Google disallows removing the last tab, and every action is verified by reading back from the spreadsheet. These are non-obvious operational details an agent needs, and they exceed what annotations alone convey.
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 dense and well-structured, with action examples first, then safety warnings, then verification note. Every sentence adds value—no fluff. It is slightly long, but the content justifies the length. A very concise 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all actions, identifier resolution, deletion confirmation, and edge cases. The one notable gap is it never mentions how the spreadsheet itself is identified (sheetUrl or spreadsheetId), which are present in the schema. Since those are likely needed for any call, this is a minor omission. Overall quite complete for a complex 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?
With schema description coverage at only 38%, the description compensates thoroughly. It maps action to the required companion parameters (title, tab+newTitle, tab), explains tab can be title or sheetId, and clarifies the confirm/confirmCells pair for deletion. It gives meaning to almost every parameter that matters, despite the schema being sparse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pairing: 'Add, rename or delete a tab in a Google Spreadsheet.' It explicitly enumerates the three actions and ties parameters to each, and distinguishes the tool from siblings like create_sheet (whole file) and delete_drive_file (file-level deletion). The purpose is unmistakable.
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 explicit usage patterns for each action (e.g., 'action:"add" + title'), tells the agent to use list_sheet_tabs to obtain tab identifiers, and provides a two-step confirmation workflow for deletion. It also explains when deletion is impossible (last tab) and suggests alternatives. This is exemplary when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_tiktok_brand_hashtagsTurn a brand hashtag on or off for TikTok trackingAIdempotentInspect
Enable or disable the hashtags TikTok counts as this brand's. ADD takes a LIST of up to 10 per call (50 enabled per brand in total); REMOVE takes exactly ONE, because TikTok publishes no bulk removal and a list would silently drop all but one. TWO TIMING RULES THAT ARE EASY TO TRIP: a newly enabled hashtag is not counted for 24 HOURS, so list_tiktok_brand_hashtag_posts shows nothing for it until then; and it CANNOT BE REMOVED FOR 7 DAYS after being enabled, so this tool reads the enable date first and reports the exact wait rather than relaying TikTok's undated refusal. A tag must either be on the AVAILABLE list or contain the account handle as a substring, or TikTok rejects it. THE ANSWER IS THE READ-BACK, not the 200: TikTok's remove response is an empty body, so success means the tag has left the enabled list. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION with the brand-insights permission.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| hashtag | No | REMOVE only. Exactly one | |
| hashtags | No | ADD only. Up to 10, with or without the leading # | |
| username | No | normally resolved from the authorization itself |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond annotations: 24-hour delay before a new hashtag is counted, 7-day removal lock, the read-back being the success signal (not the 200), authorization requirement, and validation rules (available list or handle substring). Annotations only indicate readOnly=false, idempotent=true, non-destructive; the description supplies the crucial trap-avoidance details. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries necessary information—timing rules, constraints, answer semantics, authorization. It is front-loaded with the main action and uses capitalization to highlight key pitfalls. A bit dense but not wasteful; it earns its 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?
Given the tool's complexity (timing rules, read-back semantics, authorization, validation), the description covers all critical aspects. It explains how to interpret success (list read-back) and references the sibling list tool for verification. No output schema exists, but the description clarifies what the answer is. Complete for an agent 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 already documents each parameter (enum for action, one for hashtag, up to 10 for hashtags, username resolved from auth). Description adds meaning: the total cap of 50 enabled per brand, and the critical reason why REMOVE takes exactly one (bulk removal would silently drop all but one). This extra explanation helps avoid misuse and is not present 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?
States a specific verb and resource: 'Enable or disable the hashtags TikTok counts as this brand's.' Distinct from sibling list tools, and clarifies ADD vs REMOVE actions. Clearly tells an agent exactly what the tool does.
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 strong context on when to use ADD vs REMOVE and timing constraints. Mentions list_tiktok_brand_hashtag_posts as the tool to see posts for newly enabled hashtags. Does not explicitly state 'use list_tiktok_brand_hashtags for viewing the current list' but that is implied by the context. Still, it gives enough guidance for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_youtube_captionUpload, replace or delete a caption trackADestructiveInspect
Attach a real subtitle track to one of the connected channel’s videos, replace one, or delete one. Pass the caption file BODY itself as text (SRT or WebVTT), not a URL. language is required and may not be guessed — YouTube uses it to decide which viewers see the track. A track YouTube generated itself (trackKind ASR) is refused by name: YouTube owns it and it cannot be edited or deleted through any API; to replace it, upload your own track in the same language and YouTube prefers yours. Delete is confirm-gated — viewers with captions on lose them immediately and YouTube stops indexing the video by that text, though it can be re-uploaded if you still have the file. 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | a label shown in YouTube’s caption picker | |
| text | No | the caption file body — SRT or WebVTT. Required for upload. | |
| draft | No | true keeps the track unpublished while you review it | |
| action | Yes | upload | update | delete | |
| confirm | No | required to delete | |
| videoId | No | required for upload; strongly recommended for update and delete so the track can be resolved and read back | |
| language | No | BCP-47 code such as en, es, pt-BR. Required for upload. | |
| captionId | No | required for update and delete (from list_youtube_captions) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that delete is confirm-gated, that viewers lose captions immediately, and that YouTube stops indexing the video text. It also explains that ASR tracks are owned by YouTube and cannot be edited or deleted via any API, which is a critical behavioral constraint. It states the credit cost is 0. These go far beyond the annotations (destructiveHint=true) and provide essential operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but packs in a lot of necessary detail without verbosity. It is front-loaded with the core purpose and then moves into critical constraints. Each sentence earns its place (file format, language requirement, ASR exception, delete consequences, credits). It could be slightly more organized (e.g., bullet points) but remains concise for the complexity.
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 an 8-parameter tool with three possible actions, no output schema, and annotations present, the description covers all essential context: required fields, file formats, language constraints, special cases (ASR), destructive consequences, confirmation requirement, and credits. An agent has everything needed to call this tool correctly without further research.
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 schema covers all parameters with descriptions, but the tool description enriches several: it specifies that `text` must be the body in SRT or WebVTT format, not a URL; clarifies that `language` is required and must be accurate; explains that `confirm` is required for delete; and notes that `draft` keeps a track unpublished. It also ties `captionId` to list_youtube_captions. These additions go beyond a simple restatement of schema fields, adding practical meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action set (upload, replace, delete) on a specific resource (caption track on one of the connected channel's videos). It distinguishes itself from list_youtube_captions by mentioning that captionId comes from that tool, and from other manage tools by focusing on captions. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: the file body must be passed as `text` (not a URL), language is required and cannot be guessed, and ASR tracks are refused by name. It explains how to replace an ASR track (upload your own in the same language). It mentions that captionId comes from list_youtube_captions, implying that listing should be done first. However, it doesn't explicitly state when to use this tool versus alternatives for other caption actions, like if there were a dedicated tool for reading captions, but it covers enough context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_youtube_channel_sectionChannel homepage sectionsADestructiveInspect
THE SHELVES ON THE CHANNEL HOMEPAGE — what a visitor sees first, and the only place a chosen playlist can be put above YouTube’s own default layout. action:'list' reads them in the order they appear, 'create' adds one, 'update' replaces one, 'delete' removes one (confirm-gated, and there is no undo — the layout has to be rebuilt by hand). EVERY WRITE IS PUBLIC IMMEDIATELY: a channel homepage is not a draft. type decides what the shelf holds — singlePlaylist and multiplePlaylists take playlist ids, multipleChannels takes channel ids and those two plus multiplePlaylists take a title you choose, while popularUploads, recentUploads, subscriptions and the rest are filled by YouTube and take neither. position is zero-based and is what re-orders the page. DO NOT TREAT A LIST AS A READ-BACK: YouTube's own section list lags a write by a few seconds in BOTH directions — measured, it returned nothing right after a create and still returned a deleted section right after a delete — so a write reports what YouTube returned and a delete reports as ACCEPTED, and re-listing straight away can show the old layout. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| hl | No | language for the returned titles, e.g. "en" | |
| type | No | singlePlaylist | multiplePlaylists | popularUploads | recentUploads | likes | allPlaylists | likedPlaylists | recentPosts | recentActivity | liveEvents | upcomingEvents | completedEvents | multipleChannels | postedVideos | postedPlaylists | subscriptions. Required to create or update | |
| style | No | leave it off to let YouTube choose | |
| title | No | the heading, and only multiplePlaylists and multipleChannels take one — YouTube writes the heading for every other type | |
| action | No | defaults to 'list' | |
| confirm | No | must be true to actually delete | |
| channels | No | channel ids to feature. Required for multipleChannels | |
| position | No | zero-based position on the homepage. Leave it off and YouTube places the section | |
| playlists | No | playlist ids, from list_youtube_playlists. Required for singlePlaylist (exactly one) and multiplePlaylists | |
| sectionId | No | for update and delete — from action:'list' |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and not read-only, but the description goes far beyond: it warns that writes are public immediately, delete is confirm-gated with no undo, and crucially warns about the list lag phenomenon (reads may not reflect recent writes). This is significant behavioral context beyond annotations that prevents incorrect agent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds critical information: placement importance, action semantics, public-write warning, type interactions, position semantics, and the list-lag trap. No filler; all content is operationally essential. It's structured to front-load the most consequential warnings.
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 10 parameters, no output schema, and complex conditional behavior, this description covers all necessary aspects: actions, parameter dependencies, behavioral caveats, and even reconciliation guidance (deletes report ACCEPTED). Nothing an agent needs to correctly invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds extra meaning by explaining how `type` affects other parameters (e.g., which types take playlists vs channels vs titles, which are system-filled), and clarifies `position` is zero-based. This enhances the agent's understanding beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages channel homepage sections (shelves), with explicit actions list, create, update, delete. It distinguishes itself from broader channel tools by focusing on the layout sections and even explains the unique placement benefit over YouTube's default layout. The verb 'manages' plus specific resource makes purpose 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?
The description provides detailed when-to-use guidance for each action and type, explaining which parameters are needed for singlePlaylist vs multipleChannels etc. It doesn't explicitly name alternative sibling tools, but the context of channel homepage sections is clearly distinct from other YouTube tools. A clear exclusionary note is missing, but the action semantics are well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_youtube_playlistCreate, rename or delete a YouTube playlistADestructiveInspect
Create, update or delete a playlist on the connected channel. CREATE makes it PRIVATE unless you pass privacy — a public playlist appears on the channel immediately, so publishing is always a deliberate choice. UPDATE merges: an omitted title or description is LEFT ALONE rather than erased. DELETE is confirm-gated and does NOT delete the videos — what dies is the playlist, its ordering and every link or embed pointing at its URL; a playlist that is public or has videos in it additionally needs confirmTitle echoed back exactly, because confirm alone proves you meant to delete something and not that you aimed at the right playlist. To take a playlist out of public view WITHOUT destroying it use action="update" with privacy="private" — that is reversible and delete is not. 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | required on create; on update, omit to leave unchanged | |
| action | Yes | create | update | delete | |
| confirm | No | required to delete | |
| privacy | No | default private on create | |
| playlistId | No | required for update and delete | |
| description | No | on update, omit to leave unchanged | |
| confirmTitle | No | the playlist’s EXACT title — required to delete one that is public or non-empty |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description discloses key behavioral nuances: CREATE defaults to PRIVATE, public playlists appear immediately, UPDATE merges with omitted fields preserved, DELETE does not remove videos and requires confirmTitle for public/non-empty playlists. It also notes the destructive and irreversible nature of delete, and mentions the connected channel prerequisite. This goes well beyond the annotation 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?
The description is a single, dense paragraph that front-loads the core purpose and then logically expands into actions and caveats. Every sentence contributes crucial information—cost, channel requirement, merge behavior, delete safety—without redundancy. Despite its length, it remains concise for the complexity of a three-action tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 actions, conditional requirements, destructive behavior) and the absence of an output schema, the description covers all needed aspects: action selection, parameter interdependencies, safety warnings, and reversible alternatives. An agent can correctly invoke create, update, or delete without further clarification.
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?
While the schema covers all 7 parameters with descriptions, the tool description enriches them: it explains the conditional requirement of confirmTitle (needed for public/non-empty playlists), the default for privacy on create, the semantics of omitted title/description on update, and the necessity of playlistId for update/delete. This adds meaning beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function as 'Create, update or delete a playlist on the connected channel.' It names the resource (playlist) and the actions (create, update, delete), making it readily distinguishable from siblings like manage_youtube_playlist_items or list_youtube_playlists. The title reinforces this with 'Create, rename or delete a YouTube playlist'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it explains when to use update instead of delete for reversible privacy changes, details the confirm-gating for delete, and notes the 0-credit cost and channel requirement. It also clarifies that omitting fields in update leaves them unchanged, advising against unintended erasure. This is actionable and specific, exceeding mere implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_youtube_playlist_imageCustom playlist cover imageAInspect
PUT A CUSTOM COVER ON A PLAYLIST — the last call in a chain that already existed, since make_thumbnail renders the artwork and the playlist tools own the playlist. Without one YouTube shows the first video's thumbnail. action:'list' reads what is on a playlist, 'set' uploads a cover, 'delete' removes it. imageUrl must be a Hermoso-hosted URL, up to 50MB — a Hermoso render, a make_thumbnail result, or the user’s OWN artwork brought in with upload_file, which turns any local or external file into a URL this accepts. Nothing else is fetched server-side. YOUTUBE ANSWERS EVERY FAILURE HERE AS AN HTTP 500 "Internal error encountered" with the real reason buried inside it, so a plain relay would report a missing playlist id as a Hermoso outage — the refusals here are the real ones. If it comes back refused, the first thing to check is CHANNEL VERIFICATION: custom imagery needs a verified YouTube channel (add a phone number at youtube.com/verify), and on an unverified channel the sibling call that sets a custom video thumbnail is refused in the same way. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | defaults to 'list' | |
| imageId | No | for action:'delete' — from action:'list' | |
| imageUrl | No | for action:'set' — a Hermoso render or make_thumbnail URL | |
| playlistId | Yes | from list_youtube_playlists |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description surfaces important behavioral details beyond the annotations: YouTube returns HTTP 500 for all failures with the real reason buried inside, so refusals are the real errors, and channel verification is required for custom imagery. It does not contradict the annotations (readOnlyHint=false, destructiveHint=false) and even clarifies the delete action. This is far beyond what structured fields provide.
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 dense and information-rich, with the primary purpose front-loaded and critical warnings in caps. It is somewhat lengthy but every sentence adds value; the final 'Free' is minor and could be omitted. The structure is a single paragraph rather than bullets, which slightly hurts scannability, but overall it's well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, three actions, and no output schema, the description covers all necessary context: the intended chain, URL constraints, failure behavior, and channel verification. It leaves no critical gap for an agent to correctly invoke the tool and interpret refusals.
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?
Although schema coverage is 100%, the description adds significant meaning: it specifies that imageUrl must be Hermoso-hosted and up to 50MB, how to generate such a URL (make_thumbnail, upload_file), and that imageId comes from action:'list'. These clarifications are not in the schema and directly inform correct parameter selection.
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 ('PUT A CUSTOM COVER ON A PLAYLIST') and immediately differentiates it from sibling tools by referencing the chain (make_thumbnail) and the playlist tools. It also enumerates the three actions (list/set/delete) with clear purposes, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when to use the tool ('Without one YouTube shows the first video's thumbnail'), what inputs are valid (Hermoso-hosted URL, size limit, how to obtain URLs via make_thumbnail or upload_file), and what not to do ('Nothing else is fetched server-side'). It also provides troubleshooting for failures (channel verification) and references the sibling tool that behaves similarly on unverified channels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_youtube_playlist_itemsAdd, remove or re-order a video in a playlistAInspect
Add a video to a playlist, remove an entry, or move an entry to a new position. ADD takes playlistId + videoId and returns the new entry’s itemId. REMOVE and MOVE take that itemId — NOT the videoId — because one video can sit in a playlist more than once, so a videoId does not identify which row to touch; list_youtube_playlists with a playlistId returns the itemId of every entry. Removing an entry does NOT delete the video, only its place in the playlist. Positions are zero-based. 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | add | remove | move | |
| itemId | No | the playlist-ENTRY id — required for remove and move (from list_youtube_playlists) | |
| videoId | No | required for add | |
| position | No | zero-based position; required for move, optional on add (default: appended) | |
| playlistId | No | required for add |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations indicate readOnlyHint=false, destructiveHint=false, the description adds critical behavioral detail: removing an entry does not delete the video, positions are zero-based, add returns an itemId, and the tool requires a connected YouTube channel with 0 credits. These disclosures go well beyond the annotations and prevent common misuse. The description does not contradict any annotation.
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 concise and well-structured: it front-loads the core actions, then explains the critical distinction between itemId and videoId, then covers side-effects and prerequisites. Every sentence earns its place, with no fluff or repetition. It is a model of efficient documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, no output schema, and multiple actions, the description covers all necessary aspects: required parameters per action, how to obtain identifiers, positional indexing, impact of removal, auth requirements, and cost. It references the related list tool for itemIds, making the context complete for an agent to invoke the tool correctly and handle results appropriately.
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?
Even though schema coverage is 100%, the description adds substantial meaning: it explains why itemId is required for remove/move (video can appear multiple times), clarifies that videoId is only for add, and details that position is zero-based. This goes far beyond the schema descriptions and helps avoid the most likely mistake with this tool. The additional rationale about itemId vs videoId is especially valuable.
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 three operations (add, remove, move) with a specific resource (playlist items), and immediately distinguishes between videoId and itemId to clarify the target of each action. It differentiates itself from related tools like list_youtube_playlists by explaining how to obtain itemIds, and implicitly separates from manage_youtube_playlist by focusing on items. The purpose is unambiguous and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: when to use add vs remove/move, and explicitly points to list_youtube_playlists as the way to obtain itemIds. It does not explicitly state alternatives or exclusions (e.g., 'use this instead of manage_youtube_playlist to change playlist metadata'), but the guidance is sufficiently clear for an agent to select the right tool. Slight deduction for not naming a sibling like manage_youtube_playlist, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_bluesky_convo_readMark a Bluesky conversation as readAInspect
Clear the unread count on one Bluesky DM conversation, optionally only up to a specific message. Useful after triaging an inbox so the next list_bluesky_convos does not surface the same thread again. Reports the unread count Bluesky reads back, not the one requested.
| Name | Required | Description | Default |
|---|---|---|---|
| convoId | Yes | from list_bluesky_convos | |
| messageId | No | mark read only up to this message; omit to clear the whole conversation |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so agents know it mutates state but isn't destructive. The description adds a valuable behavioral detail: 'Reports the unread count Bluesky reads back, not the one requested,' which hints at a potential discrepancy between request and response. This is beyond annotations and helps the agent set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences: the action, the use case, and the response behavior. It's front-loaded with the primary action and has no fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers the purpose, a concrete use case, and an important behavioral detail about the return value. It doesn't dive into authentication or rate limits, but those are not typical for such an operation and are unlikely to be needed. Overall, it's complete for effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both convoId and messageId have descriptions (convoId from list_bluesky_convos, messageId marks read up to a specific message). The description mostly reinforces the schema's semantics. It doesn't add significant new meaning beyond restating the purpose, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Clear the unread count on one Bluesky DM conversation', with a specific verb and resource. It also distinguishes itself from siblings like list_bluesky_convos, read_bluesky_dm, and send_bluesky_dm by focusing on the 'mark read' operation. The optional up-to-message qualifier adds precision.
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 a clear usage scenario: 'Useful after triaging an inbox so the next list_bluesky_convos does not surface the same thread again.' This tells the agent when to use it. It doesn't explicitly mention alternatives, but the sibling list clearly separates read/send actions, and the description implies it's for clearing unread state, which is distinct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_catalog_blast_radiusWhat deleting a Meta catalog would destroyARead-onlyInspect
Read what is INSIDE a product catalog — how many products, which product sets — and get the exact sentence describing what deleting it would destroy. Free and read-only. CALL THIS BEFORE PROPOSING A DELETE: deleting a catalog is permanent and Meta offers no archive and no undo, so naming the cost should not require aiming the destructive call at the target and reading its refusal. It also gives you the catalog’s exact name, which delete_meta_catalog requires echoed back. 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| catalogId | Yes | numeric catalog id from list_meta_catalogs |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's reinforcement of 'Read-only' and 'Free' adds no new safety info. However, it adds unique behavioral context: the tool's output includes the exact name that delete_meta_catalog requires echoing back, and it explains that using this read-only call avoids aiming a destructive call at the target. This goes beyond the annotations without contradicting them.
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 four sentences, front-loading the core purpose before the usage rationale. While slightly verbose, every sentence contributes value: the purpose, the safety rationale, the name echo requirement, and the cost note. It is structured logically and avoids redundancy with 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 description carries the full burden of explaining return values, and it does: how many products, which product sets, the exact deletion sentence, and the catalog's exact name. It also covers the 'before delete' workflow and cost (0 credits). For a single-parameter read-only tool, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes catalogId as 'numeric catalog id from list_meta_catalogs' with 100% coverage, so the description adds no new parameter semantics. It repeats the source but doesn't provide additional format, validation, or usage constraints beyond what the schema already states. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb (Read) and specific resource (product catalog), states exactly what it returns (products, product sets, deletion impact sentence, exact name), and implicitly distinguishes itself from the destructive sibling delete_meta_catalog and the listing tool list_meta_catalogs. An agent can immediately grasp the tool's unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'CALL THIS BEFORE PROPOSING A DELETE' and justifies why (permanent, no archive, no undo), and notes it provides the exact name required by delete_meta_catalog. This clearly tells the agent when to use this tool versus invoking the destructive alternative, with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_page_insightsFacebook Page + Instagram insightsARead-onlyInspect
Organic performance for the brand’s connected Facebook Page — views and unique reach (page_media_view / page_total_media_view_unique, Meta’s own replacements for the impressions family it retired), post engagements, video views, daily follows, plus follower and Page-like counts — with the linked Instagram account’s headline numbers alongside. This is ORGANIC reach; use meta_insights for paid ad performance, and instagram_insights for the full Instagram set and its audience demographics. Any metric Meta returns no value for is named as MISSING data, which must never be reported as zero.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Page id — omit when the brand has exactly one Page connected | |
| period | No | window (default week) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnlyHint=true and destructiveHint=false, so the safety profile is already provided. The description adds valuable behavioral context: it explains that metrics are organic, that the tool returns both Facebook and Instagram data, and that missing values are labeled MISSING and must not be zero. This goes beyond the annotations and provides important handling behavior, though it doesn't detail response structure or rate limits, which are minor gaps.
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 dense but well-organized. It front-loads the main purpose, then lists metrics, then gives sibling differentiation, and ends with a critical handling rule. Every sentence adds value, but it is fairly long. It could be slightly more concise, but the structure is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by listing the metrics returned and clarifying the MISSING data rule. It also positions the tool among siblings. It doesn't describe pagination or response format, but for a read-only insights tool this is sufficient. Overall, the essential context for correct usage 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 100% and both parameters (pageId and period) are already fully described in the input schema. The description adds no additional meaning beyond the schema, so the baseline score of 3 applies. It doesn't clarify defaults or edge cases beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool returns organic performance for a connected Facebook Page, listing specific metrics (views, unique reach, post engagements, video views, daily follows, follower and Page-like counts) and also includes the linked Instagram headline numbers. It explicitly differentiates from meta_insights and instagram_insights, making its purpose unambiguous and distinct 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?
The description gives explicit when-to-use and when-not-to-use guidance: 'use meta_insights for paid ad performance, and instagram_insights for the full Instagram set and its audience demographics.' It also provides a critical data-handling rule (MISSING data must never be reported as zero), which serves as a usage instruction. This fully routes the agent to the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_post_insightsInsights for one Facebook/Instagram postARead-onlyInspect
Performance for a single organic post — on Facebook views/reach (post_media_view, post_total_media_view_unique — Meta’s own replacements for the retired impressions family), clicks, reactions and video watch time; on Instagram views, reach, likes, comments, saves, shares, total interactions and (where the media type has them) follows, profile visits, story navigation and reel watch time. Use it to find which organic posts earned their reach before turning one into a paid ad. A metric Meta returns no value for is reported by name as MISSING — never read it as zero.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Page id — omit when only one Page is connected | |
| postId | Yes | post/media id returned by post_to_meta | |
| target | No | which metric set to ask for (default facebook) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, openWorldHint=true, destructiveHint=false), the description discloses the important quirk that metrics with no value are reported as MISSING and should never be read as zero. It also notes that certain metrics (follows, profile visits, story navigation, reel watch time) are only present where the media type supports them, adding behavioral context not available from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but every sentence earns its place: it lists metrics, gives a use case, and explains the MISSING convention. It is front-loaded with the core purpose and ends with a critical interpretation note. Slightly dense, but not 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?
Given no output schema, the description adequately covers return semantics (MISSING instead of zero), platform-specific metrics, conditional metrics, and the organic-post scope. An agent calling this tool knows exactly what data it will get and how to interpret missing values. No gaps remain for a read-only analytics 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 coverage is 100% — all three params (pageId, postId, target) have descriptions. The tool description does not add new information about parameters beyond the schema, aside from restating that postId comes from post_to_meta (already in schema). Since the schema does the heavy lifting, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reports performance for a single organic post across Facebook and Instagram, listing specific metric families (views/reach, clicks, reactions, video watch time, etc.). This distinguishes it from page-level tools like meta_page_insights and account-level instagram_insights, and the explicit 'single organic post' scope removes ambiguity.
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 a concrete use case: 'Use it to find which organic posts earned their reach before turning one into a paid ad,' which clarifies when the tool is appropriate. However, it does not explicitly contrast with sibling tools like meta_page_insights or instagram_insights, nor state when not to use it. The guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_webhook_statusWhat a Page is subscribed toARead-onlyInspect
What Meta ACTUALLY has recorded for this app on a Page — the fields it will push, read straight back from Meta rather than from anything we stored. CHECK THIS BEFORE CONCLUDING THAT WEBHOOKS ARE NOT WORKING: an unsubscribed Page is completely silent and looks identical to a quiet one, so an empty event feed is not evidence of anything until you have seen the subscription. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Facebook Page id — omit when only one Page is connected |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds beyond that: it clarifies the data is fetched live from Meta ('read straight back from Meta rather than from anything we stored'), explains the silent behavior of unsubscribed Pages (they look identical to quiet ones), and states '0 credits'. This adds useful operational context, though it doesn't disclose auth requirements or rate limits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it front-loads the core purpose, then provides a high-value usage warning, then a short trait note. The phrase 'Read-only, 0 credits' is a little redundant with the readOnlyHint annotation, but the cost info is new. Overall no wasted sentences, and the critical warning is prominent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential context: what the tool does, why it matters (diagnostic prerequisite), and that it reads from Meta. It does not explicitly describe the return format or how to interpret a subscription with no fields, but given the tool's simplicity (1 param, no output schema) and the annotation-provided safety profile, the description is nearly complete. A short mention of the response structure would be ideal, but it's not a significant 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?
There is only one optional parameter (pageId) and the schema already provides a clear description ('Facebook Page id — omit when only one Page is connected'). Schema description coverage is 100%, so the baseline is 3. The tool description does not add any extra param-specific meaning beyond what the schema already provides, so it stays at 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 verb+resource: 'What Meta ACTUALLY has recorded for this app on a Page — the fields it will push' — reading the subscription configuration directly from Meta. It clearly distinguishes this from sibling tools like subscribe_meta_webhooks (which changes subscription) and list_meta_webhook_events (which lists events). No ambiguity about what this tool does.
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 explicit when-to-use guidance: 'CHECK THIS BEFORE CONCLUDING THAT WEBHOOKS ARE NOT WORKING' and explains why an empty event feed is not evidence until the subscription is seen. This effectively tells the agent when to call this tool versus alternatives (subscribe/unsubscribe/list events) and provides a critical diagnostic workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mine_anglesMine customer anglesARead-onlyInspect
Mine ad ANGLES from real customer language: gathers the customer's own words (Reddit, TikTok, the brand's review page + review-site results) and returns a RANKED angle bank — each angle tagged (pain / outcome / identity / fear / competitive-displacement / social-proof / contrast), 2-5 VERBATIM proof quotes, a 0-100 score with breakdown, and a ready-to-run hook in the customer's own voice. Reads YOUR saved brand (pass brandId to target a specific brand — that switches this key's active brand like use_brand). To tear down a COMPETITOR use competitor_teardown instead. Spends a few ScrapeCreators credits + LLM tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| brandId | No | a brand id/name from list_brands to mine for; omit to use the active brand |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds valuable context: it spends credits and LLM tokens, reads the user's saved brand, and that passing brandId switches the active brand like use_brand. This goes beyond the annotations and informs the agent of important side effects (cost, state change) without any contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but well-structured with dashes and clear enumeration. It front-loads the core purpose and then details outputs, costs, and alternatives. While it is lengthier than some, every sentence adds value and nothing is fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description thoroughly defines the return structure (angle bank, tags, verbatim quotes, score, hook). It also covers cost implications, brand switching, and the alternative tool. No critical information for correct invocation seems 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?
The only parameter brandId is fully described in the schema, but the description adds crucial semantics beyond the schema: that omitting it uses the active brand and passing it switches the active brand like use_brand. This clarifies behavior that is not inferable from the schema alone.
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 ('Mine') and resource ('ad ANGLES from real customer language'), and goes on to enumerate the exact outputs (ranked angle bank with tags, quotes, score, hook). It also explicitly distinguishes itself from the sibling 'competitor_teardown', so an agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use competitor_teardown instead for competitors, and explains the brandId parameter and active-brand switching. This gives clear when-to-use and when-not-to-use guidance, including the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moderate_meta_commentHide, unhide or delete a Meta commentADestructiveIdempotentInspect
Moderate a comment on the brand’s Facebook or Instagram post. Prefer hide over delete — hiding is reversible and invisible to the commenter. Deleting is PERMANENT and requires confirm:true after the user has agreed.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | default hide | |
| pageId | No | Page id — omit when only one Page is connected | |
| confirm | No | required (true) only for delete | |
| commentId | Yes | comment id from list_meta_comments |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already flag readOnlyHint=false and destructiveHint=true, the description adds meaningful behavioral context: hiding is reversible and invisible to the commenter, while deleting is permanent and requires confirmation. This goes beyond the annotation flags and explains the consequences of actions, which is valuable for an agent deciding between hide and delete. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, tightly written, and front-loaded with the core purpose. The second sentence delivers critical usage guidance (prefer hide, permanent delete, confirm) without repetition or fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderation tool, the description covers the essential operational details: platform (Facebook/Instagram), the actions available, and the critical safety caveat about permanence and confirmation. The schema fills in the rest (commentId source, pageId optionality) and there is no output schema to worry about. It is sufficiently complete for an agent to call the tool correctly, though it could mention that commentId comes from list_meta_comments, which is already in the schema 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%, with each parameter (action, pageId, confirm, commentId) already described in the schema. The description reinforces that confirm:true is required for delete, which is already in the schema's description. No new parameter information is added 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?
The description clearly states the action: 'Moderate a comment on the brand’s Facebook or Instagram post.' The title also explicitly lists the three actions (hide, unhide, delete). This is a specific verb (moderate) with a specific resource (Meta comment) and distinguishes from sibling tools like moderate_tiktok_comment by naming the platform context (Facebook/Instagram). No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on which action to prefer ('Prefer hide over delete') and the requirement for confirm:true when deleting, but it does not explicitly say when to use this tool versus alternatives (e.g., moderate_tiktok_comment, reply_to_meta_comment). The platform context is implicit but no explicit when/when-not guidance is given. This leaves the tool-selection decision to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moderate_tiktok_commentLike, hide or delete a TikTok commentADestructiveIdempotentInspect
Moderate one comment on a TikTok post the authorized account owns: LIKE, UNLIKE, HIDE, UNHIDE or DELETE. TWO RULES TIKTOK ENFORCES AND THIS TOOL STATES UP FRONT. (1) YOU CAN ONLY DELETE A COMMENT THIS ACCOUNT WROTE — anyone else's can be hidden but never deleted, so HIDE is the tool for an unwanted comment from a stranger, and it is reversible. DELETE is permanent and confirm-gated. (2) UNHIDE IS NOT GUARANTEED: TikTok says a comment may stay hidden because ITS OWN moderation, privacy or spam filters are what hid it, in which case accepting the request changes nothing — so pass videoId and the reply reads the comment back and reports its real status rather than claiming success from a 200. HIDE and UNHIDE require videoId; LIKE, UNLIKE and DELETE do not. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| confirm | No | REQUIRED true for DELETE, which is permanent — call without it to see exactly what would happen | |
| videoId | No | REQUIRED for HIDE and UNHIDE; pass it on the others too and the reply reads the comment back to prove the change landed | |
| commentId | Yes | from list_tiktok_comments |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, readOnlyHint=false, and idempotentHint=true, but the description goes further by detailing that DELETE is permanent and confirm-gated, HIDE is reversible, and UNHIDE is not guaranteed to work. It also clarifies that passing videoId causes the reply to read back the real comment status rather than assuming success from a 200. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core actions, then explains the two key rules and the readback behavior. Every sentence adds value, but the length is high and could be tightened slightly (e.g., the UNHIDE rule could be condensed) without losing clarity. Still, it is well-structured and not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (five actions, conditional requirements, auth needs, permanent-delete consequences, unreliable UNHIDE), the description covers all necessary information: what each action does, when to use which, required parameters per action, confirm gate, readback behavior, and authorization dependency. It even points to the relevant status tool. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, but the description adds critical meaning: action enum values are mapped to their effects, confirm is required for DELETE, videoId is required for HIDE/UNHIDE and enables readback verification, and commentId comes from list_tiktok_comments. This goes well beyond the schema, compensating for the 25% uncovered.
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 ('Moderate') and resource ('a TikTok comment on a post the authorized account owns') along with the enumerated actions (LIKE, UNLIKE, HIDE, UNHIDE, DELETE). It clearly distinguishes from sibling tools like comment_on_tiktok_video, reply_to_tiktok_comment, and moderate_meta_comment by specifying the account ownership constraint and the set of actions.
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 explicit when-to-use guidance for each action: HIDE for stranger comments (reversible), DELETE only for own comments (permanent and confirm-gated), and notes UNHIDE may not work due to TikTok's own moderation. It also specifies when videoId is required and points to tiktok_account_status for authorization, leaving no ambiguity about prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moderate_youtube_commentHide, reject, spam-report or delete a YouTube commentADestructiveInspect
Moderate a comment on the connected channel — the YouTube twin of moderate_meta_comment. ACTIONS: publish (make it visible again) · hold (hide it pending review) · reject (hide it as unfit for display) · spam (report it to YouTube — a REPORT, not a removal, so do not tell the user it is gone) · delete (permanent; YouTube has no undelete for a comment). hold, reject and publish are all reversible with each other, so only delete is confirm-gated. If the goal is just to take a comment out of public view, use reject rather than delete. banAuthor is valid ONLY with action="reject" — that is YouTube’s own restriction — and auto-rejects every future comment that author leaves on the channel. Get commentId from list_youtube_comments. 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | publish | hold | reject | spam | delete | |
| confirm | No | required for delete | |
| banAuthor | No | reject only — also auto-reject every future comment from this author | |
| commentId | Yes | id of the comment (from list_youtube_comments) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond annotations by disclosing that spam is a report not a removal ('so do not tell the user it is gone'), delete is permanent with no undelete, hold/reject/publish are mutually reversible, and delete is confirm-gated. This significantly enriches the destructiveHint and readOnlyHint flags with concrete action outcomes.
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?
Dense but efficient; every sentence earns its place. It fronts the core purpose and twin reference, then systematically covers actions, reversibility, usage guidance, parameter constraints, and setup requirements with zero 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?
Covers purpose, all five actions with their side effects, reversibility, confirm gating, banAuthor restriction, ID source, cost (0 credits), and the required connected channel. The only minor gap is the absence of an explicit return-value description, but given it's a mutation tool with openWorldHint, that is a small 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?
Schema already covers all parameters at 100%, so baseline is 3. The description adds meaningful context: banAuthor is restricted to reject and auto-rejects future comments, confirm is required for delete, and commentId is sourced from list_youtube_comments. These details go beyond the schema's terse field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States it moderates a YouTube comment, lists five specific actions (publish, hold, reject, spam, delete), and names its sibling 'moderate_meta_comment' as its twin, clearly differentiating it from other platform moderation tools. The action list makes the tool's scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use reject over delete ('If the goal is just to take a comment out of public view, use reject rather than delete'), tells the agent to get commentId from list_youtube_comments, and notes that banAuthor is valid only with reject. The 'YouTube twin' phrasing signals platform scope, and the spam warning prevents the agent from misinforming the user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_ads_async_reportPinterest deep (async) ad reportARead-onlyInspect
The DEEP Pinterest ad report — Pinterest’s ASYNCHRONOUS lane, which reaches 914 DAYS back (2.5 years) where pinterest_ads_report stops at 90, and carries roughly three times the metric columns (conversion, ROAS and cross-device families the quick report does not have). Use it for anything older than three months, and for revenue questions. Levels: ADVERTISER / CAMPAIGN / AD_GROUP / PIN_PROMOTION / KEYWORD / PRODUCT_GROUP / PRODUCT_ITEM plus their *_TARGETING twins. Pinterest generates it asynchronously, so this may come back pending:true with a token — CALL AGAIN WITH THAT TOKEN to pick it up, and never re-submit without it (a second submit generates a second report). Pinterest’s own windows are enforced here with the reason rather than as an opaque 400: 914 days back over at most 186 days; at HOUR granularity 8 days back over 3; at a PRODUCT_ITEM level 92 back over 31. A finished report link is valid five minutes and the report one hour, so an EXPIRED status means run it again, not that anything failed. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | ||
| level | No | ADVERTISER | CAMPAIGN | AD_GROUP | PIN_PROMOTION | KEYWORD | PRODUCT_GROUP | PRODUCT_ITEM (+ _TARGETING variants) — default CAMPAIGN. An unknown level is refused with the list. | |
| since | No | YYYY-MM-DD (default 30 days ago) | |
| token | No | RESUME a pending report — pass the token back instead of re-submitting | |
| until | No | YYYY-MM-DD (default today) | |
| columns | No | Pinterest async metric columns — omit for the standard spend/impressions/clicks/CTR/conversions set | |
| adGroupIds | No | ||
| adAccountId | No | ||
| campaignIds | No | ||
| granularity | No | ||
| reportFormat | No | ||
| targetingTypes | No | only valid with a *_TARGETING level |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnly/destructive hints, but the description goes far beyond: async generation with pending:true and token, re-submission rules, expiry windows, enforcements, and credit cost. All critical behavioral traits are disclosed, with no contradiction to annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and efficient, covering many critical details in a structured flow. It front-loads the async distinction and uses bullet-like semicolons. Slightly long but every clause earns its place, keeping value high without redundancy.
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 complex async report tool with 12 parameters, the description covers the async lifecycle (submit, pending, token, expiry), level list, validation rules, and credit cost. It also gives clear usage context relative to its sibling. No essential information for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and the description compensates by explaining the token resume semantics, level variants, targeting restrictions, and granularity windows. Some parameters like adIds, adGroupIds, adAccountId, campaignIds lack description both in schema and the description, but the tool's core usage is well documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact resource ('Pinterest deep ad report'), distinguishes it from sibling tool 'pinterest_ads_report' by history depth and metric coverage, and lists all supported levels. It is impossible to confuse with other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the trigger conditions: 'anything older than three months, and for revenue questions', names the alternative (pinterest_ads_report) and its limitations (90 days), and provides detailed retry instructions for the async flow. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_analyticsPinterest organic analyticsARead-onlyInspect
ORGANIC Pinterest performance — impressions, saves, Pin clicks, outbound clicks and their rates, for the whole ACCOUNT, for the TOP PINS, for the TOP VIDEO PINS (with view-through and average watch time), or for ONE Pin. This is unpaid reach; pinterest_ads_report covers paid. Use scope:"top_pins" to answer "what is actually working on our Pinterest" — it ranks the account’s own Pins by whichever metric you sort on. NOTE Pinterest keeps only 90 DAYS of organic analytics and refuses a longer window, which is refused here with the reason rather than as an opaque error. A VIDEO Pin takes a different metric set from a static one (pass video:true for scope:"pin"). THERE IS NO BOARD ANALYTICS: Pinterest’s v5 API publishes no such endpoint, so board-level performance genuinely does not exist in any API — do not promise it. An unknown metric is refused by name, and a metric Pinterest omits from a row is MISSING data ("if a column has no value, it may not be returned"), never a measured zero. Works on Pinterest’s Trial access tier — unlike creating Pins, every read row in Pinterest’s access-tier table is available on Trial. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | top_pins / top_video_pins: how many (1–50, default 10) | |
| pinId | No | required for scope:"pin" — the id post_to_pinterest returned | |
| scope | No | default account | |
| since | No | YYYY-MM-DD, default 30 days ago; Pinterest allows at most 90 days back | |
| until | No | YYYY-MM-DD, default today | |
| video | No | scope:"pin" only — true when the Pin is a VIDEO, which has its own metric set | |
| sortBy | No | top_pins / top_video_pins: the metric to rank by (default the first metric) | |
| appTypes | No | ||
| splitField | No | account: NO_SPLIT | APP_TYPE | OWNED_CONTENT | SOURCE | PIN_FORMAT | |
| metricTypes | No | which metrics; omit for all of the ones valid at this scope. Unknown values are refused with the valid list. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, openWorldHint), the description reveals crucial behaviors: 90-day data window with refusal reason, unknown metric refusal, missing-data handling (not zero), Trial access tier availability, and different metric sets for video vs static pins. This enriches the agent's understanding well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense, with each sentence providing distinct value. It is front-loaded with the core capability, then scopes, then caveats. While it could be trimmed slightly, the structure is logical and no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters and no output schema, the description covers scope options, metric behaviors, limitations (90-day), access tier, and video-pin specifics. It lacks explicit explanation of the return structure, but given the absence of an output schema, the description addresses the most critical operational aspects comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 90% of parameters with descriptions. The description adds little new parameter-specific meaning beyond what's in the schema, though it reinforces the pinId origin (from post_to_pinterest) and notes unknown metrics are refused. This does not significantly exceed the schema's baseline, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: organic Pinterest performance metrics for multiple scopes (account, top pins, top video pins, single pin), listing specific metrics (impressions, saves, clicks, rates). It distinguishes from paid coverage by referencing pinterest_ads_report and explicitly states board analytics are unavailable, clearly differentiating 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?
Provides explicit when-to-use guidance: top_pins for 'what is actually working,' video:true for video pins, and notes the 90-day limit and refusal behavior. It also names alternatives (pinterest_ads_report for paid) and exclusions (no board analytics), making the use case unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_audience_insightsPinterest audience insightsARead-onlyInspect
WHO the Pinterest audience IS, rather than what it did — interest categories each carrying an affinity INDEX, plus demographics (ages, countries, devices, genders, metros). Three audiences: YOUR_TOTAL_AUDIENCE, YOUR_ENGAGED_AUDIENCE, and PINTEREST_TOTAL_AUDIENCE as the baseline to compare the other two against. This is an input to a creative brief, not a performance report. SAY THIS WHEN REPORTING: an affinity index is how much MORE likely this audience is to engage with a category than Pinterest’s baseline — it is a comparison, never a count — and when Pinterest flags size_is_upper_bound the audience size is an upper bound, not a measurement. There is no date range: Pinterest returns its current snapshot and names the date it is for. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| adAccountId | No | ||
| insightType | No | default YOUR_TOTAL_AUDIENCE |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond annotations: it explains the affinity index as a comparison, the size_is_upper_bound flag, the absence of a date range (current snapshot), and the read-only, 0-credit nature. These details help the agent interpret and report results correctly, going well beyond the readOnlyHint annotation.
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 longer than average but every sentence adds distinct value: core purpose, audience list, usage context, reporting guidance, and data characteristics. It is front-loaded and well-organized, though slightly dense; a minor trim could improve scannability 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?
Given the tool has no output schema and only 2 parameters, the description provides a thorough explanation of what the tool returns (interest categories, affinity index, demographics, audience types) and how to interpret it. It covers data boundaries (no date range, upper bound flag) and the read-only nature, making it sufficiently complete 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?
The description enriches the insightType parameter by explaining the three audience values and their baseline relationship, adding value beyond the schema's enum description. However, it does not clarify the adAccountId parameter, which lacks a schema description and is not addressed in the tool description, leaving a small gap at the boundary of 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 clearly states what the tool does: provides audience insights (interest categories with affinity index, demographics) rather than performance metrics. It explicitly contrasts with 'what it did' and lists the three audience types. This distinguishes it from sibling tools like pinterest_analytics and pinterest_targeting_analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says it is 'an input to a creative brief, not a performance report,' which gives clear usage context and an implicit exclusion. It also notes there is no date range, helping the agent know when to use it. However, it does not explicitly name alternative tools for performance reporting, leaving some ambiguity among related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_targeting_analyticsPinterest ads by audience segmentARead-onlyInspect
WHICH AUDIENCE SEGMENT actually delivered on Pinterest — ad performance broken down by keyword, targeted interest, age bucket, gender, location, region, country, placement, app type, media type and more. targetingTypes is REQUIRED because it is what the report breaks down BY. scope:"account" covers the whole ad account; "campaign" / "adGroup" / "ad" each REQUIRE their own id list, because Pinterest publishes no all-of-them form at those levels — that is Pinterest’s shape, not a limitation here. 90 days back in windows of at most 90 days, refused locally with the reason. An unknown targeting type is refused BY NAME; note Pinterest’s four per-level enums differ slightly, so a value valid at one level can still be refused at another. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | ||
| scope | No | default account | |
| since | No | ||
| until | No | ||
| columns | No | ||
| adGroupIds | No | ||
| adAccountId | No | ||
| campaignIds | No | ||
| granularity | No | ||
| targetingTypes | Yes | REQUIRED — e.g. KEYWORD, AGE_BUCKET, GENDER, LOCATION, PLACEMENT, MEDIA_TYPE, TARGETED_INTEREST, PINNER_INTEREST, COUNTRY, REGION |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral detail: read-only and 0 credits, 90-day max window with local refusal, unknown targeting types refused by name, and per-level enum differences. This goes well beyond the annotations, providing a true behavioral contract for the agent.
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 information-dense and front-loaded with the core question 'WHICH AUDIENCE SEGMENT actually delivered'. It packs multiple nuances (scope levels, id requirements, date windows, enum validation) without fluff. Every sentence earns its place; there is no repetition of schema details already present.
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 complex report tool with 10 parameters, no output schema, and low schema coverage, the description is not fully complete. It covers required params, scope, date limits, and targeting validation, but omits the meaning of columns, granularity, adAccountId, and what the response returns. An agent would still need to make educated guesses on those, so it is adequate but not fully self-sufficient.
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 20% (scope and targetingTypes have descriptions). The description adds meaning for these two: clarifies targetingTypes as the breakdown dimension and explains scope's id requirements. However, it does not explain other parameters like adIds, campaignIds, columns, granularity, or since/until beyond the date window mention. It compensates partially but leaves most parameters undefined, so value-added is moderate.
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 immediately states it reports ad performance broken down by audience segment (keyword, interest, age, etc.) — a specific verb+resource. It distinguishes from sibling tools like pinterest_analytics and pinterest_audience_insights by emphasizing the breakdown dimension and the 'targetingTypes' requirement. The purpose is unambiguous and concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage rules: targetingTypes is REQUIRED, scope='account' covers all, while campaign/adGroup/ad require their own id lists. It explains why (Pinterest's API shape) and even notes the 90-day window limitation. However, it does not compare directly with alternative tools (e.g., when to use pinterest_analytics instead), so it lacks an exclusion clause, though context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_adPlan an ad conceptAInspect
Creative director: turn a brand + product/brief into a finished ad CONCEPT — copy variants (headline/primary/cta) plus an image_concept.prompt OR a video_storyboard, with the resolved recipe + the model ids to render with. Renders nothing; chain its output into generate_image / generate_video. THE USER’S EXPLICIT LENGTH IS SOVEREIGN: when they name a duration ("a 30 second ad", "make it 45s"), pass it as durationSeconds — the board is then AUTHORED to that length (its scenes sum to it) and render_ad renders it as one clip or stitched acts accordingly. Leaving it out lets the planner pick its own default, which is how an explicit ask silently becomes a 15s spot. Spends LLM tokens, 0 ScrapeCreators credits.
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | force the VISUAL scroll-stop mechanic the opening beat is built on — a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "macro_asmr"). Omit to let the planner pick. A hook that cannot be delivered in this brief is DROPPED with the reason rather than rendered wrongly — an on-screen-text hook on an authentic/UGC ad is the one that bites, because that register carries zero on-screen text. | |
| brand | No | brand name, or a brand profile object {name,domain,category,palette,products,…}. OMIT to use the workspace’s SAVED brand + memory automatically (see get_brand); use draft_brand to onboard a new one | |
| format | No | 'image', 'video', or 'auto' when unspecified | |
| recipe | No | a recipe id from hermoso_capabilities to force an archetype | |
| product | Yes | what to advertise + any angle/offer the user specified | |
| setting | No | force the WHERE — a setting id from list_hooks (e.g. "kitchen", "gym", or a surreal one like "volcano_rim" / "airplane_wing", which are played 100% straight and never acknowledged). Omit for a neutral setting. | |
| language | No | output language for the ad copy (e.g. Spanish) — default English | |
| reference | No | a reference ad URL to remix the angle from — Facebook Ad Library, LinkedIn Ad Library or Google Ads Transparency links (the real ad’s copy/advertiser are fetched and fed into the concept) | |
| durationSeconds | No | VIDEO ONLY — the total spot length the user explicitly asked for, in seconds, copied verbatim (30 for "a 30 second ad"). The planner authors the storyboard TO it: the scenes’ seconds sum to it and the script is word-budgeted for it. Supported range 4–180; anything outside is CLAMPED to it (the reply says so). A length that fits ONE clip of the render model renders as a single continuous pass; anything longer is STITCHED from acts filled to that model’s clip maximum with the remainder last (on a 15s-clip model, 40 → 15+15+10 and 17 → 13+4) — never time-compressed. The maximum is the model’s own: 15s on most, 30s on the longest-clip model, so a 30s ad can be one unbroken take rather than two acts. Omit when the user named no length; do NOT pass a guess, an omitted value keeps the recipe-aware default. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (readOnlyHint false, idempotentHint false), so the description carries the full burden. It discloses that it spends LLM tokens and 0 ScrapeCreators credits, explains the durationSeconds clamping and stitching behavior, and notes how hooks that cannot be delivered are dropped with reasons. This goes well beyond annotations, offering operational transparency that prevents misusage.
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 long but well-structured and front-loaded with the core purpose. Each paragraph adds operational value, particularly the durationSeconds section which is detailed but essential to avoid silent user-default discrepancies. While it could be trimmed slightly, the density of information justifies its length; it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, two output paths, chaining requirements, length semantics), the description covers all critical aspects: what it produces, how it chains, cost model, duration handling, and parameter nuances. It doesn't include an output schema but describes the outputs explicitly. No essential information for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all 9 parameters with 100% description coverage, so the baseline is 3. The description adds meaningful nuance beyond the schema, particularly for durationSeconds (explaining clamping, stitching, and model-specific limits), and also adds context on hook (dropped if not deliverable) and brand (omit to use saved brand). This additional semantic value justifies a 4, though the schema already does the heavy lifting for basic parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: turn a brand + product/brief into a finished ad CONCEPT, detailing copy variants and image/video storyboard outputs, and explicitly states it renders nothing. This clearly distinguishes it from siblings like render_ad, generate_image, and generate_video, and it names the chaining relationship. The purpose is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: it instructs the agent to chain the output into generate_image/generate_video and warns about the durationSeconds handling, including the consequences of omission. It also mentions when to use draft_brand for onboarding a new brand. It clearly implies when to use this tool versus alternatives, even if it doesn't list explicit 'use instead of X' cases, the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_variationsPlan ad variationsAInspect
Fan a brief into N DISTINCT ad angles (different hooks/mechanics/audiences), each with its own headline + visual brief — then render each with generate_image and rank with score_ad. LLM planning only; renders nothing itself.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | brand name or profile object; OMIT to use the workspace’s saved brand | |
| count | No | how many distinct variants (default 6) | |
| product | Yes | what to advertise | |
| language | No | output language for the variant copy (e.g. Spanish) — default English |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are sparse (all hints false), so the description carries the burden. It discloses that the tool itself does not render anything ('renders nothing itself') and that it delegates to other tools, which is important behavioral context. It goes beyond the annotations by clarifying the division of labor. However, it does not disclose whether the downstream calls (generate_image, score_ad) produce side effects or what the final output format is, so some transparency is lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action and outcome, and then names the downstream tools. Every word earns its place: it states what the tool does, what it produces, and what it doesn't do. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a planning tool with no output schema, the description gives a strong sense of what the agent can expect: it produces variants with headline and visual brief, then hands off to generate_image and score_ad. It does not specify the exact return format or how the plans are surfaced, but given the delegation model and the fact that the tools it calls are explicit, this is reasonably complete. The description covers the purpose, the workflow, and the limitation, which is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (brand, count, product, language) are already described in the schema. The description adds conceptual context (e.g., 'N DISTINCT' and 'headline + visual brief') but does not add specific parameter-level detail beyond the schema. Since the schema fully documents parameters, the baseline of 3 is appropriate; the description adds marginal value by tying parameters to the overall workflow.
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 very specific action: fan a brief into N distinct ad angles with specific components (headline + visual brief), then delegates to generate_image and score_ad. It clearly distinguishes itself from siblings like plan_ad, mine_angles, and render_ad by emphasizing 'LLM planning only; renders nothing itself.' The verb-resource pairing 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?
The description provides clear context for when to use the tool: it is for planning ad variations before rendering/scoring. It explicitly mentions the downstream tools (generate_image and score_ad) and declares it is 'LLM planning only', which implies it should be used instead of direct rendering tools. However, it does not explicitly name alternatives or state when not to use it, leaving some ambiguity for an agent comparing against similar planning tools like mine_angles or plan_ad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_editPost-production editAInspect
MECHANICAL post-production on an EXISTING rendered video (its served mp4 URL) — an ordered plan of whitelisted primitives executed by ffmpeg (+ Chrome for typeset cards) in seconds for ~2 credits flat, NO AI model, the original untouched (returns a NEW video). The lane for: append a branded end card ('add an end card with our logo and website' — ADDS its seconds, never re-renders), trim, speed (0.5-2x), mute (whole or a window), audio_gain (-20..+6 dB), fade_out, corner logo watermark, anti-AI film grain. Up to 6 ops per plan, applied in order. Brand assets (name/domain/logo/accent) load from the workspace brand automatically; override per-call if needed. NEVER use generate_video/render_ad for these mechanical asks.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | the ordered edit plan (max 6 ops) | |
| accent | No | override the brand accent hex | |
| domain | No | override the brand website | |
| videoUrl | Yes | the served URL of the video to edit | |
| brandName | No | override the workspace brand name |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the original is untouched, it returns a NEW video, is executed by ffmpeg in seconds for ~2 credits flat, and has no AI model. It also clarifies brand asset loading behavior. This adds substantial context beyond the annotations (readOnlyHint=false, etc.) without contradicting them.
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 long but information-dense; every sentence contributes. It is front-loaded with purpose and constraints. Could benefit from bullet-point formatting for the operation list, but it remains efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and absence of an output schema, the description covers what it does, how (ffmpeg, no AI), constraints (6 ops, order), brand handling, and exclusions. It lacks error-handling details but is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds operational semantics: 'Up to 6 ops per plan, applied in order', 'append end card ... ADDS its seconds', and 'brand assets ... load from the workspace brand automatically; override per-call'. This enriches parameter understanding beyond the schema alone.
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 precise verb ('MECHANICAL post-production') on a specific resource ('EXISTING rendered video (its served mp4 URL)'), and enumerates the exact operations it supports (trim, speed, mute, audio_gain, fade_out, append_card, watermark, grain). It explicitly distinguishes itself from generate_video/render_ad, making its scope unmistakable.
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 says 'The lane for: ...' listing specific use cases, and explicitly instructs 'NEVER use generate_video/render_ad for these mechanical asks.' This provides clear when-to-use and when-not-to-use guidance, even if it does not contrast with every sibling video tool, the primary alternatives are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_performanceWhich hooks and subjects are getting tractionARead-onlyInspect
Aggregate this brand's published posts to answer WHICH HOOKS AND SUBJECTS WORK. Groups by hook (default), subject, channel, media format or posting hour, and reports the engagement RATE within each channel. THREE THINGS IT DELIBERATELY WILL NOT DO, and you should repeat them rather than paper over them: (1) it never sums metrics across channels — a LinkedIn impression and a TikTok view are different units, so every comparison is within one channel; (2) it SUPPRESSES a verdict below 5 measured posts and says so, because a confident recommendation from 3 posts is worse than none; (3) a post with no recorded hook (published outside Hermoso, or backfilled without a creation match) counts toward channel and format totals but never votes on which hook works. Present the finding verbatim if there is one, and the reason if there is not. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | No | what to group by — default hook | |
| channel | No | restrict to one channel |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses significant behaviors beyond the annotations: never sums across channels, suppresses verdicts below 5 posts, excludes hook-less posts from hook voting, and instructs to present 'finding' verbatim or the reason. Annotations cover read-only and non-destructive, but the description adds methodological caveats that an agent must know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence. The three 'will not do' items are formatted as a clear, scannable list. Every sentence carries critical information — no filler, and the length is proportionate to the tool's complexity.
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?
Comprehensive for an analytics tool with no output schema. Covers what it does, how to group, the metric used, critical exclusions, small-sample behavior, and how to present findings. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already documents both parameters (axis enum with types and channel string) with 100% coverage, so baseline is 3. The description adds the key context that results are reported as engagement RATE within each channel, which clarifies the meaning of the output and how the axis parameter affects analysis. This extra semantic value justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Aggregate'), resource ('this brand's published posts'), and the analytic question ('WHICH HOOKS AND SUBJECTS WORK'). Lists the grouping dimensions (hook, subject, channel, media, hour) which clearly distinguishes it from listing or collection tools like list_published_posts or collect_post_metrics.
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 clear usage context: it answers traction questions about hooks/subjects, and explicitly enumerates what it deliberately will not do (cross-channel aggregation, small-sample verdicts, voting from unclassified posts). It does not name alternative sibling tools, but the exclusions strongly imply when not to use it, which is adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_blueskyPost to BlueskyAInspect
Publish a post to Bluesky as the connected account. Text up to 300 characters — Bluesky ALSO caps a post at 3000 UTF-8 bytes, so an emoji-heavy post can be under 300 characters and still be refused; Hermoso checks both before spending the round trip and says which limit and by how much. MEDIA: either up to 4 images (imageUrls + altText) OR one MP4 video (videoUrl + videoAlt), never both — a Bluesky post record carries a single embed and images and video are two different embed types. Video is MP4 only, up to 300MB at Bluesky's end (Hermoso can fetch up to 150MB from a URL), with optional WebVTT caption tracks; the aspect ratio is measured from the file. Bluesky requires a CONFIRMED EMAIL on the account before it will process any video — if it is unconfirmed you get a refusal saying so, and reconnecting will not help. Links in the text are made clickable automatically. LINK CARDS: Bluesky does NOT scrape links, so a URL posted bare renders as plain blue text — the client composing the post has to build the card. Hermoso builds one AUTOMATICALLY when the post has a URL and NO media: it fetches the page, uses its title/description and uploads its image as the card thumbnail. Pass linkCard:false to suppress it, or linkCard:{uri,title,description,thumbUrl} to control it (give both title and description and the page is not fetched at all). A POST CARRIES ONE EMBED, so a card and images/video cannot both ride: if you pass linkCard explicitly ALONGSIDE media the call is REFUSED by name rather than silently dropping one, and if the URL was merely in the text the MEDIA WINS and the reply says the card was skipped (the link stays clickable either way). Returns the post's public bsky.app URL. Connect at Settings ▸ Connectors ▸ Bluesky with a handle and an APP PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The post, up to 300 characters / 3000 UTF-8 bytes. | |
| langs | No | BCP-47 language tags, e.g. ['en']. | |
| altText | No | Alt text — an ARRAY, one per image in the same order, or a single STRING to describe every image with it. WRITE ONE: Bluesky’s own lexicon makes `alt` a REQUIRED property of every image, so a post without it is undescribed by design rather than by omission, and Bluesky users expect it. No maximum length is published, so nothing is truncated. | |
| captions | No | Up to 20 WebVTT caption tracks: [{lang:'en', url:'https://…/en.vtt'}] or [{lang:'en', content:'WEBVTT\n\n00:00…'}]. Each file is capped at 20000 bytes. | |
| linkCard | No | Rich link card (`app.bsky.embed.external`). OMIT for the default (a card is built automatically when the post has a URL and no media). `false` never builds one. `true` builds one from the first URL in the text. An object {uri,title,description,thumbUrl} overrides any field — supply BOTH title and description and the page is never fetched. Cannot be combined with imageUrls/videoUrl: a post has ONE embed, so an explicit linkCard beside media is refused. | |
| videoAlt | No | Alt text describing the video, for accessibility. | |
| videoUrl | No | One public MP4 URL. Cannot be combined with imageUrls. Bluesky transcodes it, which takes a minute or two. | |
| imageUrls | No | Up to 4 public image URLs to attach. Cannot be combined with videoUrl. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state the operation is not read-only, not idempotent, and not destructive, but the description adds substantial behavioral detail: exact character and byte limits (including the UTF-8 nuance), media type exclusivity, automatic link-card generation logic, refusal-on-conflict behavior, and the confirmed-email prerequisite. It also discloses the return value. This far exceeds what structured annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, every sentence carries essential information—no filler. The structure flows logically: purpose, text limits, media constraints, link cards, conflicts, return value, and connection. Information is front-loaded with the core action first, and the detailed rules are organized by theme, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, many with nuanced constraints, the description covers all foreseeable edge cases: byte vs. character limits, media exclusivity, link-card suppression and override, refusal behavior, and the confirmed-email prerequisite. It also states the return value and connection method, so an agent can call it correctly without consulting external docs.
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 schema has 100% coverage with descriptions, so the baseline is 3. However, the description enriches every parameter with practical context: text explains the byte-limit and pre-check behavior, altText explains Bluesky's required property and the array vs. string semantics, linkCard explains the default auto-build and override behavior, videoUrl notes transcoding time. This goes well beyond the schema phrases.
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 first sentence states exactly what the tool does: 'Publish a post to Bluesky as the connected account.' It is a specific verb+resource combination that clearly distinguishes it from sibling post_to_* and delete_bluesky_post tools. No ambiguity.
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?
While the description does not explicitly name competing post tools, it gives extensive platform-specific conditions: use linkCard for URLs without media, avoid combining media types, confirmed email requirement, and refusal conditions. It clearly explains when to use each optional parameter but stops short of an explicit 'use this tool for Bluesky vs. use post_to_meta for Meta' stance, which would be redundant given the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_google_businessPost to Google Business ProfileAInspect
Publish a Post to the brand’s Google Business Profile — the panel that appears on Google Search and Maps for the business. Text, optionally ONE PHOTO, and a call-to-action button. Google’s Posts API accepts NO VIDEO, so pass a still image. This PUBLISHES immediately and publicly on the business listing — show the user the exact text, photo and button and get an explicit yes BEFORE calling. If the account manages several listings, call list_business_locations first and pass locationId. EVENT and OFFER posts both REQUIRE a title and a start date (Google’s rule). On an OFFER, Google IGNORES the button’s link — pass redeemOnlineUrl instead. A CALL button dials the number on the listing and takes no link. Needs Google Business Profile connected (Settings ▸ Connectors ▸ Google Business Profile).
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| link | No | the URL the button opens — not for CALL, and ignored on an OFFER | |
| title | No | headline — REQUIRED for EVENT and OFFER | |
| endDate | No | YYYY-MM-DD, defaults to startDate | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| summary | No | the body text of the Post | |
| imageUrl | No | a Hermoso render image URL (or an upload_file url) to show on the Post | |
| startDate | No | YYYY-MM-DD — REQUIRED for EVENT and OFFER | |
| topicType | No | default STANDARD | |
| actionType | No | the button on the Post | |
| couponCode | No | OFFER only | |
| locationId | No | which listing, e.g. 'locations/123' from list_business_locations — only needed when the account manages more than one | |
| languageCode | No | BCP-47 language of the Post, default 'en' | |
| redeemOnlineUrl | No | OFFER only — this is the link Google actually uses on an offer | |
| termsConditions | No | OFFER only |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say readOnlyHint=false), the description discloses critical behavior: publishing is immediate and public, requires explicit user consent, and the API does not accept video. These are vital operational details an agent must know to avoid unwanted side effects, and they are not captured in annotations or 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 dense but every sentence carries critical information: platform-specific constraints, conditional rules, and prerequisites. It is front-loaded with the core purpose, then logically flows into constraints and edge cases. No wasted words; the length is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 15 parameters and multiple conditional behaviors (EVENT/OFFER requirements, OFFER button behavior, CALL specifics, locationId handling), the description covers all necessary context. It also mentions connection requirements and the need for explicit confirmation, leaving nothing an agent needs to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions already cover all 15 parameters at 100% coverage, so the baseline is 3. The tool description adds extra value by stating the no-video rule for imageUrl and clarifying that on OFFER the button link is ignored, though the schema also mentions this for individual params. This extra context nudges the score above 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 tool's function: 'Publish a Post to the brand's Google Business Profile' with specific details about the panel on Search and Maps. It distinguishes itself from the many other post_to_* siblings by naming the exact platform and key constraints (one photo, no video), leaving no ambiguity about its scope.
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 explicit when-to-use guidance, including a prerequisite (call list_business_locations first when multiple listings), a confirmation requirement before publishing, and conditional rules for EVENT/OFFER posts. It also clarifies the behavior of CALL and OFFER buttons, which helps the agent decide how to configure parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_linkedinPublish to LinkedInAInspect
Publish a post to the user’s connected LinkedIn profile — text, and optionally an image (pass its served URL as imageUrl). The image does NOT have to be something Hermoso generated: LinkedIn is served the bytes from us, so the URL must be Hermoso-hosted, and upload_file turns ANY file the user already has into exactly that. This PUBLISHES immediately and PUBLICLY — ALWAYS show the user the exact text and get an explicit yes BEFORE calling. Needs a connected LinkedIn account (Settings ▸ Connectors ▸ LinkedIn).
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| text | Yes | the post text | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| imageUrl | No | a Hermoso-hosted image URL to attach (≤12MB) — a Hermoso render, or ANY file of the user’s own put through upload_file first. An arbitrary external host is refused (we fetch the bytes ourselves). | |
| imageUrls | No | A CAROUSEL IS NOT AVAILABLE ON A PERSONAL PROFILE — LinkedIn's organic multi-image post publishes from a COMPANY PAGE. Passing several here is refused by name rather than posting slide 1; use post_to_linkedin_page instead. | |
| visibility | No | default PUBLIC | |
| allowDuplicate | No | post it even though an identical post was just made or attempted. Only pass this when the user genuinely wants the same thing posted twice, or when you have LOOKED at the account and confirmed a timed-out attempt did not land. | |
| idempotencyKey | No | SAFE RETRIES. Publishing can take minutes (a video upload, a carousel of ten slides) and a transport can time out while the post SUCCEEDS — retrying blind is how the same thing gets posted twice. Pass any stable string here and a repeat of the SAME publish returns the ORIGINAL post id instead of posting again (24h). You do not have to: an identical publish is auto-recognised for 10 minutes anyway. If a call times out or errors ambiguously, CALL AGAIN WITH THE SAME KEY — that is the safe move, and it will either report the original post or publish it for the first time. It never posts twice. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by explicitly stating 'PUBLISHES immediately and PUBLICLY' and mandates showing the exact text and getting explicit consent. It also clarifies that the image must be Hermoso-hosted and explains how to achieve that with upload_file. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but each sentence serves a purpose: purpose, image clarification, urgent warning, and prerequisite. It is front-loaded with the key action and safety warning. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with 8 parameters (1 required) and no output schema, the description covers the critical safety and connectivity aspects. The parameter descriptions handle the rest. The only thing not covered is explicit routing to the page variant, but that is in the schema. The description is sufficient for an agent to call it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions are already very detailed. The description adds some context about the image flow (upload_file) and the consent requirement, but it does not add substantial meaning beyond the schema for most parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Publish', the resource 'post to the user’s connected LinkedIn profile', and optional image. It distinguishes from page-based posting by specifying 'user's connected LinkedIn profile' and later mentions the carousel restriction. It is specific and distinct.
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 a clear prerequisite (connected LinkedIn account) and a strong behavioral instruction (get explicit yes before calling). It doesn't explicitly name alternative tools like post_to_linkedin_page for company pages, though that is hinted in the schema. It could improve by mentioning when to use the page variant, but the context is clear enough for profile posting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_linkedin_pagePublish to a LinkedIn company PageAInspect
Publish a post to one of the user’s LinkedIn COMPANY PAGES — text, plus optionally an image, a video, a 2–20 image CAROUSEL (LinkedIn calls it a MultiImage post; pass the slides in order as imageUrls[]), or a LINK POST with a real preview card (linkUrl). USE linkUrl WHENEVER THE POINT OF THE POST IS A LINK: LinkedIn disables URL scraping for API partners, so a url sitting in the text renders as plain text with no card, and the card’s title, description and image only exist if you pass linkTitle / linkDescription / linkThumbnailUrl — read them off the page and supply them. The media need not be a Hermoso render — it must be Hermoso-HOSTED because we upload the bytes to LinkedIn ourselves, and upload_file turns ANY file the user already has into such a URL. ORGANIC CAROUSELS ARE COMPANY-PAGE ONLY — a personal profile cannot publish one and is refused by name, so send a deck here rather than to post_to_linkedin. This is a DIFFERENT thing from post_to_linkedin, which publishes to the person’s own profile: pick the one the user actually asked for and never substitute. organizationId comes from list_linkedin_pages; omit it only when the account administers exactly one Page. This PUBLISHES immediately and PUBLICLY — ALWAYS show the user the exact text and get an explicit yes BEFORE calling. A VIDEO POST CAN CARRY CAPTIONS AND ITS OWN COVER, and both are attached only during the upload: pass captionsSrt (SubRip content — LinkedIn is watched with the sound off) and videoThumbnailUrl (otherwise LinkedIn picks a frame for you). LinkedIn does NOT allow the image, video, captions or thumbnail of a published post to be swapped afterwards, so get all of that right first (the copy can still be edited with manage_linkedin_post).
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| text | Yes | the post text | |
| title | No | video title | |
| altText | No | accessibility alt text (max 4086 characters, ~120 recommended). A STRING describes every image; an ARRAY describes each slide of a multi-image post separately, in slide order — LinkedIn stores altText per image, and their own sample request carries a different one on each. Not available on a PERSONAL-profile post: LinkedIn’s member posting API has no alt-text field at all. | |
| linkUrl | No | publish a LINK POST — LinkedIn renders a real preview card for this URL instead of leaving a bare link in the text. Mutually exclusive with imageUrl / videoUrl / imageUrls: LinkedIn’s content field is a union, so combining them is refused by name rather than one being dropped. | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| imageUrl | No | a Hermoso-hosted image URL — a render (list_library), or ANY image of the user’s own passed through upload_file first. An arbitrary external host is refused. | |
| videoUrl | No | a Hermoso-hosted video URL — a render, or the user’s own footage via upload_file. LinkedIn processes it before publishing, which takes a minute. | |
| imageUrls | No | CAROUSEL — an ORDERED list of image (and, where the channel allows, video) URLs published as ONE post the viewer swipes through. THIS IS NOT “post several” — it is a single post with several slides, which is what a multi-slide creative (a listicle, a “1/6 · SWIPE” deck) actually needs; publishing only its first slide tells the viewer to swipe at something that cannot. The ORDER is the product. Limits per channel: Instagram 2–10 (images, videos or a mix), Threads 2–20 (mix allowed), Facebook 2+ (Meta publishes no documented maximum; Hermoso caps the upload fan-out at 30 and says so), LinkedIn company Pages 2–20 (images only), Pinterest 2–5 (images only), TikTok up to 35. One url here is simply an ordinary single post. Anything a channel cannot do is REFUSED with the real reason — nothing is ever quietly downgraded to one slide. | |
| linkTitle | No | the headline ON the preview card. LINKEDIN NEVER SCRAPES THE PAGE — their Posts API disables URL scraping for API partners outright — so if you do not pass this the card renders UNLABELLED. Fetch the page’s own title and pass it. | |
| visibility | No | default PUBLIC | |
| captionsSrt | No | CLOSED CAPTIONS for a videoUrl post — the SubRip (.srt) CONTENT itself, cue numbers and `00:00:00,000 --> 00:00:02,000` timing lines included, NOT a URL and NOT the plain script (a file with no timings is refused, because LinkedIn would accept it and then silently never show it). Most of LinkedIn is watched with the sound off, so an uncaptioned video is one most of the feed never hears. LinkedIn allows ONE caption file per video and ENGLISH ONLY; it can be attached only WHILE the video is uploaded, never added to a published post; and it is processed asynchronously, so the reply confirms it was UPLOADED and never that it is visible yet. Requires videoUrl — passing it on an image, carousel or link post is refused by name. | |
| allowDuplicate | No | post it even though an identical post was just made or attempted. Only pass this when the user genuinely wants the same thing posted twice, or when you have LOOKED at the account and confirmed a timed-out attempt did not land. | |
| idempotencyKey | No | SAFE RETRIES. Publishing can take minutes (a video upload, a carousel of ten slides) and a transport can time out while the post SUCCEEDS — retrying blind is how the same thing gets posted twice. Pass any stable string here and a repeat of the SAME publish returns the ORIGINAL post id instead of posting again (24h). You do not have to: an identical publish is auto-recognised for 10 minutes anyway. If a call times out or errors ambiguously, CALL AGAIN WITH THE SAME KEY — that is the safe move, and it will either report the original post or publish it for the first time. It never posts twice. | |
| organizationId | No | numeric Page id from list_linkedin_pages | |
| linkDescription | No | the sub-line on the preview card. Same rule as linkTitle: absent means blank, because LinkedIn will not fetch it. | |
| linkThumbnailUrl | No | a Hermoso-hosted image used as the card’s picture (uploaded to LinkedIn for you). Without it the card has no image. | |
| videoThumbnailUrl | No | the COVER IMAGE for a videoUrl post — a Hermoso-hosted image (a render, or any picture of the user’s via upload_file). Without it LinkedIn adds a system-generated thumbnail, which on an ad is usually whatever the first frame happens to be. Like captions this can only be set WHILE the video is uploaded, never afterwards. Requires videoUrl. This is NOT linkThumbnailUrl, which is the picture on a link-preview card. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations, disclosing that LinkedIn disables URL scraping, that media cannot be swapped after publishing, that captions require specific SubRip content, and that publishing is immediate and public. These are critical behavioral facts not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-organized, with key constraints (link posts, carousels, consent) front-loaded. For a tool with 18 parameters, the length is justified, and every section adds value without fluff. It's not as tight as it could be, but it earns its 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?
The description covers an extensive range of edge cases: link post card fields, carousel limits, caption and thumbnail attachment timing, immutability, idempotency, and integration with post_performance via hook/subject. It even explains how to source organizationId. For a complex publishing tool, this is exceptionally 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?
The schema already covers all 18 parameters with 100% description coverage, so the baseline is 3. The tool description adds significant extra meaning: it explains how to structure altText arrays for carousels, that linkTitle is mandatory because LinkedIn never scrapes, the exact format of captionsSrt, and the purpose of idempotencyKey for safe retries. This adds real value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb ('publish') and resource ('LinkedIn company pages'), and immediately distinguishes itself from post_to_linkedin which targets personal profiles. The distinction is explicit and leaves no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: use linkUrl for link posts, explains that organic carousels are company-page only, and clearly says 'pick the one the user actually asked for and never substitute.' It also mandates getting explicit consent before publishing, an important operational guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_metaPost to Facebook, Instagram or ThreadsAInspect
Publish to a connected Facebook Page, its linked Instagram, OR the brand’s Threads account — text/link/image/VIDEO/CAROUSEL. A MULTI-SLIDE creative is a CAROUSEL, not several posts: pass the slides in order as imageUrls[] and they publish as ONE swipeable post (Instagram album, Threads carousel, Facebook multi-photo post). Never publish slide 1 of a deck on its own — the creative tells the viewer to swipe. target:"facebook" (default) posts to the Page; target:"instagram" publishes a photo or Reel to the linked IG business account (needs an image or video); target:"threads" posts to the connected Threads account (text, image, or video). Works with ANY media — a finished Hermoso ad OR an arbitrary user file: imageUrl/videoUrl accept a public https URL, a data: URI, or a Hermoso /generated path; for a LOCAL file (e.g. on the user’s desktop) call upload_file first and pass the url it returns. INSTAGRAM COLLAB: pass collaborators (up to 3 usernames) to invite other accounts to CO-AUTHOR the post — it then shows on their profile too once they accept, which is the reach play behind every creator partnership. This PUBLISHES immediately — confirm the copy + media with the user first. Needs a connected Meta account (Settings ▸ Connectors ▸ Meta) with posting permission; Threads needs its own connection.
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| link | No | a URL to attach (FB text post only) | |
| async | No | publish in the BACKGROUND and return a job id to poll with get_job, instead of waiting. USE THIS FOR VIDEO: a Facebook or Instagram video publish routinely outlives an agent transport, and a timeout on the synchronous path leaves you unable to tell whether the post is live. With async:true nothing can time out — the job reports the post id and url when it lands. | |
| pageId | No | target Page id (from list_meta_pages); omit = first Page | |
| target | No | default facebook; instagram → the Page’s linked IG; threads → the brand’s connected Threads account | |
| altText | No | ACCESSIBILITY — the description screen readers announce, and what the platform otherwise auto-generates badly or not at all. Describe what is actually IN the picture, never the caption. ONE STRING describes the picture; on a CAROUSEL it describes EVERY slide. Pass an ARRAY of strings instead to describe each slide separately, aligned to the slide order — that is strictly better on a multi-slide post, because one sentence read out over six different pictures is wrong for five of them. More descriptions than pictures is refused rather than dropped. WHERE IT LANDS, per Meta’s own docs: INSTAGRAM image posts and the IMAGE slides of an Instagram carousel (up to 1000 characters; dropped rather than sent on a Reel or a video slide, which Meta do not support); FACEBOOK Page photos including every photo of an album, via alt_text_custom (Meta publish no length for it, so nothing is truncated); THREADS on a single-image or single-video post ONLY — Meta document no way to attach alt text to a Threads CAROUSEL slide, so a Threads carousel publishes undescribed and the reply says so rather than risking the whole post on a guess. (AI disclosure is separate and automatic — every Instagram post Hermoso publishes is flagged is_ai_generated, which is not a caller setting.) | |
| message | No | post text / caption | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| imageUrl | No | public https URL, a data: URI, or a Hermoso /generated path (upload_file gives you one for a local file) | |
| topicTag | No | THREADS ONLY — one topic tag for discovery, 1–50 characters. A leading # is stripped for you; Threads refuses "." and "&". | |
| videoUrl | No | public https URL, data: URI, or /generated path — FB video post / IG Reel | |
| imageUrls | No | CAROUSEL — an ORDERED list of image (and, where the channel allows, video) URLs published as ONE post the viewer swipes through. THIS IS NOT “post several” — it is a single post with several slides, which is what a multi-slide creative (a listicle, a “1/6 · SWIPE” deck) actually needs; publishing only its first slide tells the viewer to swipe at something that cannot. The ORDER is the product. Limits per channel: Instagram 2–10 (images, videos or a mix), Threads 2–20 (mix allowed), Facebook 2+ (Meta publishes no documented maximum; Hermoso caps the upload fan-out at 30 and says so), LinkedIn company Pages 2–20 (images only), Pinterest 2–5 (images only), TikTok up to 35. One url here is simply an ordinary single post. Anything a channel cannot do is REFUSED with the real reason — nothing is ever quietly downgraded to one slide. | |
| trialReel | No | INSTAGRAM TRIAL REEL — publish this Reel to NON-FOLLOWERS ONLY at first, so a hook can be tested on a cold audience without spending it on the people who already follow the brand. Instagram then shows it to followers only if it graduates. MANUAL = the creator graduates it by hand in the Instagram app; SS_PERFORMANCE = Instagram graduates it automatically if it performs well. REELS ONLY and INSTAGRAM ONLY: an image, a carousel, a Facebook post or a Threads post is REFUSED BY NAME rather than quietly published as an ordinary post — a trial that silently goes to every follower is the exact opposite of what was asked for. Omit it for a normal Reel. | |
| locationId | No | Threads only — a place id from search_threads_locations, to geotag the post to a physical location (restaurant, storefront) | |
| scheduleAt | No | FACEBOOK ONLY — schedule instead of posting now. ISO timestamp (2026-08-01T09:00:00Z) or unix seconds; must be 10 minutes to 30 days ahead. Facebook holds the post and publishes it at that time, so nothing has to stay running on our side. Instagram and Threads have NO scheduling in Meta’s API — passing this for them is refused rather than silently posted immediately. | |
| productTags | No | INSTAGRAM SHOPPING — make the post SHOPPABLE by tagging products from the brand’s own catalog; tapping a tag opens the product’s price sheet inside Instagram. Instagram only. ON A PHOTO each tag is {product_id, x, y}, where x and y are FRACTIONS of the image from 0.0 (left/top) to 1.0 (right/bottom) — 0.5,0.5 is the middle — and BOTH are required, max 20. ON A REEL it is {product_id} ALONE with no coordinates, max 30. ON A CAROUSEL it is an array PER SLIDE ([[{…}], [], [{…}]]) because Instagram tags each slide’s own container, max 5 per slide and 20 across the post. Ids come from search_instagram_shopping_products; call list_instagram_shopping_catalogs FIRST, because tagging needs an APPROVED Instagram Shop and without one this fails after the media is already uploaded. A tag whose product is not “approved” is stored and shown to nobody. | |
| quotePostId | No | THREADS ONLY — the id of a post to QUOTE. A quote post is a distinct post type, not a formatting option. | |
| countryCodes | No | THREADS ONLY — restrict the post to these ISO 3166-1 alpha-2 countries. ⚠ This is an ALLOWLIST, so the post becomes INVISIBLE in every country not named — it narrows reach, it does not target. | |
| replyControl | No | THREADS ONLY — who may reply. Default is everyone. | |
| collaborators | No | INSTAGRAM COLLAB — up to 3 Instagram usernames invited to CO-AUTHOR this post. Once one accepts, the post appears on THEIR profile too, with both handles in the header and the likes and comments shared — it is how a brand reaches a creator’s audience without paying for placement, and it is the single most-asked thing a scheduler normally cannot do. Pass handles only ("hermosoai"), not profile links; a leading @ is fine. INSTAGRAM ONLY — Facebook and Threads have no collab post at all and are refused BY NAME rather than silently dropping the co-authors — and never on a Story. AN INVITE IS NOT A CO-POST: publishing SENDS a request the other account must accept in their Instagram notifications, and until they do the post is on this brand’s profile ALONE; they may also decline, and Instagram sends no notification either way. So never report the post as live on both accounts — read the invite status back out of the reply, and use instagram_collaborators later to find out whether they accepted. | |
| allowDuplicate | No | post it even though an identical post was just made or attempted. Only pass this when the user genuinely wants the same thing posted twice, or when you have LOOKED at the account and confirmed a timed-out attempt did not land. | |
| idempotencyKey | No | SAFE RETRIES. Publishing can take minutes (a video upload, a carousel of ten slides) and a transport can time out while the post SUCCEEDS — retrying blind is how the same thing gets posted twice. Pass any stable string here and a repeat of the SAME publish returns the ORIGINAL post id instead of posting again (24h). You do not have to: an identical publish is auto-recognised for 10 minutes anyway. If a call times out or errors ambiguously, CALL AGAIN WITH THE SAME KEY — that is the safe move, and it will either report the original post or publish it for the first time. It never posts twice. | |
| linkAttachment | No | THREADS TEXT POSTS ONLY — a full http(s) URL rendered as a clickable link card. This is how a Threads post carries a destination at all; without it a link is just text. Meta allows at most 5 links per post and refuses a link attachment on a post that also carries an image or video, so Hermoso refuses that combination up front rather than letting Meta silently drop it. | |
| crossreshareToIg | No | THREADS ONLY — ALSO share this Threads post to the linked Instagram account AS A STORY (not a feed post), in the same publish. NOT available on a Threads CAROUSEL, which is refused by name rather than silently dropped. THERE IS NO CONFIRMATION: Threads returns no field saying whether the Story was created, so report it as REQUESTED and tell the user to check their Instagram Stories — never that it is live. | |
| crossreshareDarkMode | No | THREADS ONLY — render that Instagram Story in dark mode. Only meaningful alongside crossreshareToIg; on its own it is refused rather than silently ignored, because a parameter that never reaches the wire must not look accepted. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a few hints (readOnlyHint=false, openWorldHint=true), so the description carries the full burden. It discloses that publishing is immediate, that collab invites are not co-posts (must be accepted), that crossreshareToIg has no confirmation, that idempotency guarantees safe retries, and that unsupported combinations are refused rather than silently downgraded. This goes well beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but appropriately so for a tool with 25 parameters and three channels. It is front-loaded with the core purpose and then covers critical warnings. While not broken into discrete sections, it flows logically from general to specific and every sentence contributes. Some redundancy (e.g., repeated mention of refusal by name) but acceptable given the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (25 params, multi-channel, many edge cases), the description covers nearly all necessary context: media handling, refusals, safety, scheduling limits, and account prerequisites. The schema already documents parameter details, so the description focuses on cross-cutting behaviors. It is comprehensive and leaves little ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra semantic value beyond schema by explaining the carousel concept (not multiple posts), trial reel behavior, collab mechanics, and safe retry with idempotencyKey. It clarifies nuanced interactions like linkAttachment restrictions and countryCodes being an allowlist. Slightly above baseline due to these enriching clarifications.
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 ('Publish') with a clear resource ('a connected Facebook Page, its linked Instagram, OR the brand’s Threads account') and specifies media types ('text/link/image/VIDEO/CAROUSEL'). It clearly differentiates from sibling post tools like post_to_linkedin and post_to_tiktok by naming the exact channels.
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 extensive when-to-use guidance: explains target selection, when to call upload_file for local files, that carousels are single posts, when to use async, scheduling constraints, and refusal-by-name edge cases. It also instructs to confirm with the user before publishing and to reuse hook wording for performance grouping. This is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_pinterestCreate a PinAInspect
Create a Pin on one of the user’s Pinterest boards from any finished visual they have — image, video, or a 2–5 slide CAROUSEL (pass the slides in order as imageUrls[] and Pinterest publishes one swipeable Pin). Title, description and destination link ride along. The link is what makes a Pin drive traffic, so ask for it rather than omitting it, and the description is the text Pinterest search actually reads. boardId is REQUIRED: call list_pinterest_boards first and let the user choose. This PUBLISHES to their public profile — confirm the board, title and link before calling. Video Pins take a minute or two while Pinterest ingests the file. Needs Pinterest connected (Settings ▸ Connectors ▸ Pinterest).
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| link | No | destination URL the Pin clicks through to | |
| title | No | Pin title, max 100 characters | |
| altText | No | accessibility alt text, max 500 characters. PIN-LEVEL: Pinterest’s API has no per-item alt text at all, so on a CAROUSEL the FIRST description is used for the whole Pin and the reply states that the others were not sent. | |
| boardId | Yes | numeric board id from list_pinterest_boards — the user picks it, never guess | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| imageUrl | No | a Hermoso render image URL (or an upload_file url) | |
| videoUrl | No | a Hermoso render video URL — takes 1–2 minutes to ingest | |
| imageUrls | No | CAROUSEL — an ORDERED list of image (and, where the channel allows, video) URLs published as ONE post the viewer swipes through. THIS IS NOT “post several” — it is a single post with several slides, which is what a multi-slide creative (a listicle, a “1/6 · SWIPE” deck) actually needs; publishing only its first slide tells the viewer to swipe at something that cannot. The ORDER is the product. Limits per channel: Instagram 2–10 (images, videos or a mix), Threads 2–20 (mix allowed), Facebook 2+ (Meta publishes no documented maximum; Hermoso caps the upload fan-out at 30 and says so), LinkedIn company Pages 2–20 (images only), Pinterest 2–5 (images only), TikTok up to 35. One url here is simply an ordinary single post. Anything a channel cannot do is REFUSED with the real reason — nothing is ever quietly downgraded to one slide. | |
| slideText | No | PINTEREST CAROUSEL ONLY — per-slide title, description and destination LINK, one object per slide in slide order. This is the ONLY genuine per-slide caption on any channel Hermoso publishes to: slide 4 can send people to the product ON slide 4, where every other platform gives a carousel one shared caption. Omit any field to leave it unset; the Pin’s own title/description/link still describe the Pin as a whole. Pinterest publishes no length limit on these, so nothing is truncated. More entries than slides is refused rather than dropped. | |
| description | No | Pin description, max 800 characters — this is what Pinterest search reads | |
| coverImageUrl | No | video Pins only — a render to use as the cover frame | |
| allowDuplicate | No | post it even though an identical post was just made or attempted. Only pass this when the user genuinely wants the same thing posted twice, or when you have LOOKED at the account and confirmed a timed-out attempt did not land. | |
| boardSectionId | No | optional section within the board | |
| idempotencyKey | No | SAFE RETRIES. Publishing can take minutes (a video upload, a carousel of ten slides) and a transport can time out while the post SUCCEEDS — retrying blind is how the same thing gets posted twice. Pass any stable string here and a repeat of the SAME publish returns the ORIGINAL post id instead of posting again (24h). You do not have to: an identical publish is auto-recognised for 10 minutes anyway. If a call times out or errors ambiguously, CALL AGAIN WITH THE SAME KEY — that is the safe move, and it will either report the original post or publish it for the first time. It never posts twice. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavioral trait that this PUBLISHES to the user's public profile, a fact not present in the annotations (which only declare readOnlyHint=false). It also reveals the idempotency retry mechanism via idempotencyKey and the 10-minute auto-recognition of duplicates, the carousel handling (first description used for the whole Pin), and the refusal behavior for unsupported cases. This is far beyond what annotations provide, and fully transparent.
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 long but every sentence adds value; it is front-loaded with the core action and then provides prerequisites, confirmations, and edge cases in a logical order. The length is justified given 15 parameters and the need to explain carousels, idempotency, and grouping. It could be slightly tightened, but it is well-organized and not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex publishing tool with 15 parameters, the description covers all essential context: prerequisites (list_pinterest_boards), confirmation requirements, timing (video ingest), connection requirements, duplicate handling, carousel behavior, and the link's importance. Even though there is no output schema, the description mentions what happens for carousel altText (reply states omitted texts) and idempotent retries. It is complete for an agent to use 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?
Although schema coverage is 100%, the description adds substantial meaning to parameters: hook and subject are explained as grouping axes for post_performance with reuse rules, boardId's requirement and sourcing (list_pinterest_boards) is emphasized, altText's PIN-LEVEL limitation is clarified, imageUrls is distinguished from 'post several' and its ordering is stressed, slideText is described as the only genuine per-slide caption, and idempotencyKey's safe-retry semantics are fully explained. The description transforms raw parameters into a coherent usage model.
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 opens with 'Create a Pin on one of the user’s Pinterest boards' — a specific verb and resource — and immediately enumerates the supported input types (image, video, carousel). It clearly differentiates from sibling tools like create_pinterest_board, update_pinterest_pin, and delete_pinterest_pin by naming the action and the target platform. The purpose is explicit and 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?
The description gives detailed, actionable usage guidance: insists on asking for the link because it drives traffic, explains the description is what Pinterest search reads, mandates calling list_pinterest_boards first and letting the user choose boardId, and requires explicit confirmation before publishing because it goes to the user's public profile. It also warns about video ingestion time and the need for Pinterest connection. This is explicit 'when/how to use' that goes beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_redditPost to a subredditAInspect
Submit a post to ONE named subreddit as the user’s connected Reddit account — a text post, a link post, or a native image post (pass a Hermoso render URL as imageUrl). This PUBLISHES immediately and PUBLICLY under their username, so show the user the exact subreddit, title and body and get an explicit yes BEFORE calling. REDDIT IS NOT A BROADCAST CHANNEL: it punishes undisclosed self-promotion harder than any other platform, and posting the same or near-identical content to several subreddits breaks Reddit’s own developer policy and gets accounts banned. Post to ONE subreddit, written for that specific community — if the user asks to blast several, tell them this instead of doing it. Subreddits that require post flair are detected before anything is posted and the error lists the valid flairs to pass as flairId. Needs Reddit connected (Settings ▸ Connectors ▸ Reddit).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | the destination url for a link post | |
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| kind | No | "self" = text post (default), "link" = share a url, "image" = native image upload. Inferred from what you pass if omitted. | |
| nsfw | No | ||
| text | No | body markdown for a text post | |
| title | Yes | post title, max 300 characters | |
| flairId | No | flair template id — required by some subreddits; the error names the valid ones | |
| spoiler | No | ||
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| imageUrl | No | a Hermoso render image URL for a native image post (or an upload_file url) | |
| resubmit | No | post a link Reddit says was already submitted — usually reads as spam, so confirm first | |
| flairText | No | flair text, only where that flair is editable | |
| subreddit | Yes | the ONE subreddit to post to, e.g. "SideProject" (an r/ prefix is fine) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, idempotentHint false), the description discloses critical behaviors: it publishes immediately and publicly under the user's username, warns about Reddit's harsh treatment of undisclosed self-promotion, and explains that flair-required subreddits are detected pre-post with error listing valid flairs. This adds substantial context beyond the annotations, which only indicate it is a non-read, non-idempotent operation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: it starts with the action, then covers confirmation, policy warning, one-subreddit rule, flair handling, and connection requirement. Each sentence adds value, though it is somewhat lengthy. The warning paragraph could be condensed, but it is not redundant. Overall, it is efficient for the complexity.
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 complex mutating tool with 13 parameters and no output schema, the description covers all essential operational context: the need for user confirmation, the one-subreddit limit, the self-promotion risk, flair handling, and connection requirement. It does not need to describe return values since no output schema exists. It is sufficient for an agent to call correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 85%, so the schema already documents most parameters well. The description adds minor value: it specifies that imageUrl should be a 'Hermoso render URL' (also in schema) and mentions flairId handling in the error case, but these are not substantial. It does not explain the 'hook' or 'subject' parameters beyond what the schema already states. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Submit a post to ONE named subreddit' and enumerates the three post types (text, link, image). It distinguishes itself from sibling tools by specifying the Reddit context and the 'ONE subreddit' constraint, which is not present in other posting tools. The verb 'submit' and resource 'subreddit' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong when-not constraints: explicitly says to post to ONE subreddit and to refuse broadcast requests, and requires explicit user confirmation before calling. It also mentions the need for Reddit to be connected. However, it does not explicitly name alternative tools (e.g., 'use post_to_linkedin for LinkedIn'), so it lacks explicit alternative routing, but the context makes it clear when 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.
post_to_telegramPost to TelegramAInspect
Publish to a Telegram channel, group or chat as the brand's own bot. WHICH CHAT IS ALWAYS REQUIRED AND IS NEVER GUESSED: pass chatId as the public channel's @username (e.g. @hermosoai) or its numeric id (a group is negative; a supergroup or channel starts with -100). There is no default and there cannot be one — the Telegram Bot API publishes no method that lists the chats a bot belongs to, so Hermoso genuinely cannot know them. list_telegram_chats reports the chats that have MESSAGED the bot in the last 24 hours, which is a shortcut for finding an id and is NOT a roster: a chat missing from it can still be posted to. TEXT: up to 4096 characters on a text-only message, but only 1024 the moment ANY photo or video is attached — a caption is not a message, and Hermoso refuses the over-long one before spending the round trip and says which budget applied. MEDIA: one image (imageUrl), one video (videoUrl), or an ALBUM of 2–10 (imageUrls, in order) in which photos and videos may be MIXED — pass a videoUrl alongside imageUrls and it joins the album as one more item. Hermoso uploads the bytes rather than handing Telegram a link, which is what buys the larger ceilings: 10MB per photo and 50MB per video, where a link would be 5MB and 20MB. THE BOT MUST BE IN THE CHAT — an administrator with Post Messages for a channel, an unrestricted member for a group; if it is not, Telegram refuses and the error says to add it rather than to reconnect. Returns the message id and, for a PUBLIC chat, its t.me link — a private group has no public web link, so url comes back null rather than as a link that would 404 for whoever you hand it to. 0 credits. Connect at Settings ▸ Connectors ▸ Telegram by pasting a bot token from @BotFather.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | the message. ≤4096 characters on its own; ≤1024 once any image or video is attached. | |
| chatId | Yes | REQUIRED — the destination: a public channel's @username, or the numeric chat id. Never guessed; ask the user, or use list_telegram_chats. | |
| silent | No | deliver without a notification sound (Telegram’s disable_notification). This is NOT a visibility setting — the message is just as visible. | |
| imageUrl | No | one image (≤10MB after upload) | |
| videoUrl | No | one video (≤50MB). Passed alongside imageUrls it joins the album as one more item. | |
| imageUrls | No | an ALBUM of 2–10 media, in order. Photos and videos may be mixed — Telegram allows it. | |
| disablePreview | No | suppress the link-preview card on a text-only post. Default is Telegram’s own behaviour (previews on). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false (write operation) and destructiveHint=false, but the description goes far beyond by disclosing specific behaviors: it returns message id and t.me link (null for private groups), refuses over-long captions before spending a round trip, uploads bytes rather than providing links (yielding larger limits), and notes zero credit cost, connection steps, and that errors indicate adding the bot rather than reconnecting. This adds substantial context that annotations do not cover.
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 well-structured with clear sections (chat, text, media, bot requirements, returns, credits), and every sentence provides value. However, it is quite long, which might reduce readability for an agent that needs to parse it quickly. It is front-loaded with the primary purpose, but the extensive detail could be condensed without losing critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, no output schema), the description is exceptionally complete. It covers the required chatId derivation, media handling (single vs album, mixing, size limits), stringency of the bot being in the chat, return values (message id and t.me link), error behavior, zero cost, and setup steps. Nothing an agent needs to call it successfully is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds significant meaning beyond the schema. For example, it explains the distinction between text-only message (≤4096 chars) and when media is attached (≤1024 chars), clarifies that silent is not a visibility setting, describes how videoUrl joins an album alongside imageUrls, and explains the chatId formats (public @username, negative for group, -100 prefix for supergroup/channel). These details resolve ambiguity that the schema alone does not address.
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 ('Publish') and a specific resource (Telegram channel, group or chat), and clarifies it operates as the brand's own bot. It distinguishes itself from siblings like post_to_bluesky and post_to_x by naming the platform, and from list_telegram_chats by specifying it is for publishing, not listing.
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 explicit guidance on when to use this tool, including how to determine the chatId (never guessed, use list_telegram_chats as a shortcut but not a roster), when not to use it (e.g., for listing chats), and alternatives (list_telegram_chats for finding IDs). It also explains restrictions like the bot must be in the chat and the character limits, leaving no ambiguity about appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_tiktokPost a video or photo post to TikTokAInspect
Publish to the user’s connected TikTok account — a finished VIDEO, or a PHOTO POST (TikTok’s photo/slideshow format). A photo post carries 1 to 35 images and ONE image is simply a one-slide photo post, so there is nothing special to do for a single picture: pass imageUrls, in the order the slides should appear, and optionally coverIndex. Pass videoUrl for a video. Never pass both — TikTok has no mixed post. TWO destinations either way: destination:"post" puts it LIVE on their profile now — that requires privacy, and you must call tiktok_creator_info first, show the creator’s real privacy options and get an explicit yes before calling. destination:"draft" (the default, and the safer one) sends it to TikTok for the user to finish and post themselves from the app. Pass Hermoso render URLs (or upload_file urls for local/external files). Needs TikTok connected (Settings ▸ Connectors ▸ TikTok).
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| title | No | the caption — hashtags go here (video ≤2200 chars, photo post ≤4000) | |
| privacy | No | REQUIRED for destination:"post", for photos and video alike. Must be one the creator actually allows — read them from tiktok_creator_info, never guess. | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| videoUrl | No | the video to post — a Hermoso render URL or an upload_file url. Omit for a photo post. | |
| imageUrls | No | a PHOTO POST: 1–35 image URLs in slide order. One url = a single-image photo post. Do not combine with videoUrl. | |
| yourBrand | No | discloses that this promotes the creator’s own brand | |
| coverIndex | No | photo posts: which slide is the cover, 0-based. Default 0 (the first slide). | |
| photoTitle | No | photo posts only: a short title above the caption (≤90 chars). Defaults to the caption’s first line. | |
| destination | No | "post" = live on the profile now (needs privacy + an explicit user yes); "draft" = to TikTok for the user to review and post themselves. Default "draft". | |
| disableDuet | No | video only — TikTok has no duet on a photo post | |
| autoAddMusic | No | photo posts only: let TikTok add a recommended track (default true — a silent slideshow reads as broken) | |
| disableStitch | No | video only — TikTok has no stitch on a photo post | |
| brandedContent | No | discloses a paid partnership — cannot be combined with SELF_ONLY privacy | |
| disableComment | No | ||
| coverTimestampMs | No | video only: which frame to use as the cover, in ms |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint false, openWorldHint true) by disclosing that posting live immediately publishes to the profile, requires explicit approval, and that draft is a safer default. It details the prerequisite call to tiktok_creator_info and the need for explicit privacy choice, adding rich behavioral context about side effects and required preconditions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loads the core purpose, but it is a single lengthy paragraph without bullet points or clear segmentation. Each sentence adds necessary detail, but the structure could be improved for scanability. It is not overly verbose given the complexity, earning a high score.
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 complex tool with 16 parameters and no output schema, the description thoroughly covers usage modes, constraints, prerequisites, and connection requirements. However, it does not describe what the tool returns (e.g., a post ID, status) or potential error conditions, which are important for an agent to handle success/failure. This gap lowers the completeness score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has detailed descriptions for most parameters (94% coverage), so the description adds value by clarifying cross-parameter constraints (e.g., mutual exclusivity of videoUrl and imageUrls), explaining the conceptual purpose of hook and subject for post_performance grouping, and elaborating on the photo post format (1-35 images, one image being a single-slide post). This exceeds the baseline expected when schema coverage is high, but it doesn't fully compensate for any gaps in schema descriptions, which are minimal.
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 that the tool publishes a video or photo post to TikTok, with explicit mention of the two formats and destinations (live or draft). It distinguishes itself from siblings by naming the platform and the specific artifact types, making it unambiguous which tool to use for TikTok posting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides detailed usage guidance: it explains the two destinations (post vs draft), the requirement to call tiktok_creator_info before live posting, the need for explicit user consent, and the prerequisite of a connected TikTok account. It does not explicitly compare with alternative posting tools (like post_to_meta), but the platform-specific nature makes the context clear. It also sets constraints like 'Never pass both' and explains the default draft destination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_xPublish a post to X (Twitter)AInspect
Publish to the user’s connected X (Twitter) account — a single post, a post with an image or video render attached, a reply to an existing post, or a whole THREAD (pass thread as an array and each part is posted as a reply to the one before). This PUBLISHES immediately and PUBLICLY — ALWAYS show the user the exact text and get an explicit yes BEFORE calling. Can also run a POLL (2-4 options) instead of media, and restrict who may reply. Each post must be 280 characters or fewer; longer text is REFUSED, never truncated — split it into a thread instead. Write altText whenever you attach a render. COSTS CREDITS: X charges per API request, so every post in a thread is billed, and a post containing a LINK costs roughly 13× one without — mention the cost before publishing a long thread. Each brand also has a rolling 24-hour ceiling on what it can spend at X, and a request that would cross it is refused WHOLE before anything publishes, so a batch of posts is bounded rather than open-ended. THIS TOOL POSTS ORGANICALLY — it does not create an ad campaign. X ads are built with create_x_ads_campaign → create_x_ads_line_item → create_x_ads_promoted_tweet, and a promoted post needs a post id, so publish here first and promote that post. Needs X connected (Settings ▸ Connectors ▸ X).
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| poll | No | run a poll on the post. X does not allow a poll and media on the same post, and a poll cannot ride on a thread. | |
| text | No | the post text, ≤280 characters. Use this OR thread, not both. | |
| thread | No | a thread: each string is one post (≤280 chars each), published in order, each replying to the previous. Max 25. | |
| altText | No | accessibility description of the attached media, max 1000 characters — write one whenever you attach a render. Costs a small extra amount: X bills one metadata write PER media. With SEVERAL media, pass an ARRAY aligned to their order — X attaches alt text per media id, and a single string describes only the FIRST one (X renders up to four media as a GRID, not a carousel, so one sentence would be wrong for the other three). | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| mediaUrl | No | a Hermoso render (image or video) to attach to the first post — pass its served URL, or an upload_file url for external media | |
| mediaUrls | No | UP TO FOUR Hermoso-hosted media attached to ONE post — X’s own schema caps media_ids at 4. X renders them as a GRID: every image visible at once, nothing to swipe to. That is NOT a carousel, and a numbered "1/6 · SWIPE" slide deck must still not be sent here — it would publish as a grid and the "swipe" instruction would make no sense. Order decides the layout. On a thread the media rides the FIRST post; give each later part its own post to attach more. Mutually exclusive with mediaUrl, and more than 4 is refused before anything is uploaded. | |
| replyToId | No | numeric id of an existing X post to reply to | |
| replySettings | No | restrict who can reply — omit for everyone, which is the right default for a brand post |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal non-readonly, open-world, non-idempotent, non-destructive. The description adds substantial behavioral context: immediate public publishing, required user confirmation, character limit with refusal (not truncation), per-request costs, a 13× link cost penalty, per-brand 24-hour spending ceiling, whole-batch refusal, and the fact that it never creates ads. This far exceeds annotation coverage and covers the agent's key decision points.
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 long but every sentence carries essential operational information for a high-stakes publishing tool. It is front-loaded with the core purpose, then organized by post type, behavioral warnings, costs, and ad distinction. No filler or redundant repetition of schema fields — each clause adds actionable 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?
Given the tool's complexity (10 parameters, nested poll object, irreversible public action, cost implications, platform-specific limits), the description covers all necessary ground: prerequisites, refusal rules, cost awareness, thread behavior, media grid semantics, altText handling, and the distinction from ad tools. There is no output schema, so the agent must rely on these behavioral warnings, and the description provides them comprehensively. It is fully sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful parameter-level guidance beyond the schema: it mandates writing altText whenever attaching a render, explains that mediaUrls render as a grid (not a carousel) and that order decides layout, warns about the poll/media exclusivity and thread restrictions, and clarifies that thread parts are posted as replies. These rules help an agent construct valid calls correctly.
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 precise verb ('Publish') and resource ('the user's connected X (Twitter) account'), then enumerates the exact post types supported (single post, with media, reply, thread, poll). It explicitly identifies the sibling it is not — the ad-campaign tools (create_x_ads_campaign etc.) — making it unambiguous which tool an agent should select.
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 explicit when/when-not guidance: it warns that the tool is for organic posts and contrasts with X ads, naming the exact tools and sequence for ads. It also states prerequisites ('Needs X connected'), when to show confirmation ('ALWAYS show the user the exact text and get an explicit yes'), and when to split long text into a thread. It leaves no ambiguity about when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_youtubePost a video to YouTubeAInspect
Publish a finished video to the brand’s connected YouTube channel. Pass a Hermoso render URL (or an upload_file url for a local/external file). DEFAULTS TO UNLISTED (link-only — not on the channel, not searchable, but shareable by link AND usable as a YouTube/Google ad). Pass privacy:"public" to put it ON the channel (a public publish — confirm with the user first) or privacy:"private" for eyes-only. Do NOT use "private" for anything meant to run as an ad — private videos CANNOT be used as ads; unlisted is the ad-ready setting. SCHEDULE it with publishAt, FILE it under the right categoryId (the default 22 "People & Blogs" is wrong for most ads), SUBSCRIBER NOTIFICATIONS FOLLOW PRIVACY — a public publish announces the video to the channel’s subscribers (YouTube’s own default), while unlisted/private uploads stay quiet; pass notifySubscribers explicitly to override either way. Needs a connected YouTube channel (Settings ▸ Connectors ▸ YouTube).
| Name | Required | Description | Default |
|---|---|---|---|
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| tags | No | up to 30 tags | |
| title | No | video title (≤100 chars) | |
| privacy | No | default unlisted (anyone-with-link, ad-ready); public = live + searchable on the channel (confirm first); private = eyes-only (cannot run as an ad) | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| videoUrl | Yes | the video to post — a Hermoso render URL or an upload_file url | |
| publishAt | No | SCHEDULE the publish — ISO 8601, e.g. "2026-09-01T15:00:00Z", and it must be in the future. YouTube only allows this on a PRIVATE video and makes it PUBLIC at that moment, so pass privacy:"private" (or leave privacy unset) — asking for a scheduled "unlisted" or "public" post is refused rather than half-honoured. | |
| categoryId | No | YouTube category id, NUMERIC — default "22" (People & Blogs), which is wrong for most ads. 1 Film & Animation · 2 Autos & Vehicles · 10 Music · 15 Pets & Animals · 17 Sports · 19 Travel & Events · 20 Gaming · 22 People & Blogs · 23 Comedy · 24 Entertainment · 25 News & Politics · 26 Howto & Style · 27 Education · 28 Science & Technology · 29 Nonprofits & Activism. The assignable set is region-specific, so the value is forwarded as given and YouTube has the last word. | |
| description | No | video description (≤5000 chars) | |
| notifySubscribers | No | THE DEFAULT FOLLOWS PRIVACY. privacy:"public" NOTIFIES the channel's subscribers — that is YouTube's own default and normally what someone publishing publicly wants. privacy:"unlisted" and "private" do NOT: the video is not on the channel, so announcing it is nonsense, and a blast to somebody's whole subscriber list cannot be undone. A scheduled publish (publishAt) is PRIVATE at upload, so it does not notify either — pass true to announce one. An explicit value ALWAYS wins in both directions: true announces an unlisted/private upload, false publishes publicly and quietly. The reply reports which way it went and why. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Output and behavior are deeply disclosed beyond annotations: default unlisted, ad-readiness implications, notification behavior following privacy, scheduling restrictions and refusal of scheduled unlisted/public, categoryId forwarding, and the reply reporting the actual outcome. No contradiction with annotations (readOnly=false, openWorld=true) — description enriches them.
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 long but dense and logically structured: purpose first, then input, defaults, warnings, scheduling, category, notifications. It is front-loaded with the most critical facts (unlisted default, ad-readiness) and uses all-caps to flag important warnings. Every sentence carries information, though it could be trimmed slightly for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no output schema, the description is exceptionally complete: covers prerequisites (connected channel), defaults, constraints (scheduling, ad compatibility), parameter interactions (privacy↔notifications), and explicitly states the reply reports the outcome. An agent has everything needed to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so every parameter is documented, but the description adds substantial meaning: videoUrl input types, privacy default and ad compatibility, publishAt scheduling rules (private-only→public), categoryId numeric mapping and wrong default, and notifySubscribers default-follows-privacy logic. Hook and subject are already well covered in schema, so no need for repetition; overall adds value beyond 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 opens with a clear verb 'Publish' and specific resource 'finished video to the brand's connected YouTube channel', distinguishing it from other posting tools (post_to_tiktok, post_to_meta) by platform. It also specifies the exact input types (Hermoso render URL or upload_file url), leaving no doubt about what the tool does.
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?
Excellent guidance on when and how to use: defaults to unlisted (ad-ready), explicit warning against 'private' for ads, advises confirming with user before public publish, explains scheduling constraint (only on private, becomes public), and notes prerequisite of a connected channel. Conditions for each privacy setting are clearly stated, and while alternatives aren't named, the platform focus is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_sizzleProduct sizzle (music-led)AInspect
Render an 18-30s music-led PRODUCT SIZZLE: ONE 15s Seedance 2.0 hero clip of the product, diced into fast cuts and intercut with typeset spec/CTA cards on a brand-coloured grain background, mixed to a music bed. Faceless by design — no people, no voiceover, no spoken lines; the cards carry every word, so nothing is left to a video model's spelling. Pass a real packshot as refImage or the label will not be yours. EXPENSIVE — the hero clip is the only paid leg and it is a full 15s Seedance render: ≈1,040 credits at the DEFAULT 1080p, ≈470 at 720p, ≈220 at 480p, ≈4,130 at 4k (call hermoso_capabilities for the live seedance-2 per-duration numbers; the dicing and the cards are free, and the music bed is already included in the quoted figure). Confirm the spend with the user before calling. For a talking/UGC ad use render_ad or generate_avatar; for a cheap deterministic format use make_template_ad.
| Name | Required | Description | Default |
|---|---|---|---|
| cta | No | closing CTA line, ≤30 chars | |
| specs | No | up to 4 spec lines for the typeset cards, ≤26 chars each | |
| prompt | Yes | what the sizzle should show — the product, the setting, the look | |
| seconds | No | finished length, clamped to 18-30s (default 25). The PAID hero render is always 15s regardless — this only changes how the cuts and cards are packed | |
| refImage | No | product packshot URL that anchors the real label — strongly recommended | |
| brandName | No | brand name on the cards — defaults to the workspace brand | |
| musicMood | No | music-bed mood, e.g. driving / cinematic / upbeat | |
| resolution | No | hero-clip resolution and therefore the whole cost — DEFAULT '1080p' (≈1,040 credits); '720p' ≈470, '480p' ≈220, '4k' ≈4,130 | |
| aspectRatio | No | '9:16' default; anything the seedance-2 catalog entry does not list falls back to 9:16 |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (all false), so the description carries the full burden. It discloses significant behaviors: the exact cost breakdown per resolution (≈1,040 credits at 1080p, etc.), the fact that the hero render is always 15s regardless of the 'seconds' parameter, the faceless design (no people/voiceover), and the dependency on a real packshot. It also warns to call hermoso_capabilities for live numbers. This is highly transparent and consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but arguably justified; each sentence provides actionable information (structure, faceless design, refImage warning, cost breakdown, alternative routing). It is front-loaded with the core purpose and then builds out critical details. Not a single sentence is filler, though it could be trimmed slightly without losing value.
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 complex, cost-heavy tool, the description is remarkably complete: it covers the output structure, the paid/free components, exactly how cost scales, the need for user confirmation, and alternatives. It lacks an explicit statement of the return value (e.g., whether it returns a job ID or video URL), but given the tool's nature, this is a minor gap. Overall, it equips the agent 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 100%, so baseline is 3. The description adds meaningful context beyond the schema: it explains the cost implications of resolution, clarifies that 'seconds' only affects packing not the paid render, and stresses the importance of refImage for label accuracy. This elevates the value above 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 it renders a music-led product sizzle with a specific structure: a 15s Seedance 2.0 hero clip diced into fast cuts intercut with typeset cards. It differentiates from sibling tools by naming alternatives (render_ad, generate_avatar, make_template_ad) and what they are for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when NOT to use this tool: 'For a talking/UGC ad use render_ad or generate_avatar; for a cheap deterministic format use make_template_ad.' It also instructs to confirm spend with the user before calling, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_to_shopify_productPublish an image onto a Shopify productAInspect
Attach a finished image to one of the merchant's Shopify product listings, as product media. Pass productId (from list_shopify_products — the gid://shopify/Product/… form) and a PUBLIC https imageUrl, which is what every Hermoso render returns. Shopify fetches the image server-side and processes it asynchronously, so the media can come back status PROCESSING and appear on the listing a moment later — that is success, not a failure. Only works for accounts created by installing Hermoso from the Shopify App Store. Free — the render was already paid for.
| Name | Required | Description | Default |
|---|---|---|---|
| alt | No | alt text for accessibility and SEO; defaults to a generic credit | |
| imageUrl | Yes | any public https image URL — a Hermoso render works, and so does ANY file of your own brought in with upload_file | |
| productId | Yes | gid://shopify/Product/… from list_shopify_products |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that Shopify fetches the image asynchronously and that PROCESSING status is success, not failure, which prevents misinterpretation. It also states the imageUrl must be publicly accessible and that the operation is free because the render is already paid for. These details go beyond the annotations, which only mark it as a non-read-only, open-world, non-idempotent operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that conveys the action, parameter constraints, async behavior, prerequisite, and cost in a compact form without redundancy. It front-loads the action and then details key requirements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description explains the asynchronous processing and clarifies that PROCESSING status is a success, preventing false failure reports. It also covers the prerequisite for Shopify App Store installs, making it self-contained enough for an agent 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?
The schema already describes all three parameters, but the description adds crucial constraints: productId must be in gid://shopify/Product/... form from list_shopify_products, and imageUrl must be public https and is typically a Hermoso render. This helps the agent select correct values, though the schema coverage is 100% so the description is supplementary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Attach' and the resource 'Shopify product listings' and specifies the action as adding product media. It distinguishes from generic posting tools by focusing on product media attachment. The purpose is unambiguous and distinct from siblings like set_product_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to pass productId from list_shopify_products with the gid form and requires a public https imageUrl. It also states a prerequisite: accounts must be created via Hermoso from Shopify App Store. However, it does not name alternative tools or exclusion conditions, so a clear when-not-to-use is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pull_competitor_adsPull competitor adsARead-onlyInspect
THE FAST PATH for "show me the ads is running" — one named brand’s real live ads from the META (Facebook/Instagram) ad library, deduped, sorted, with the right page resolved. A single call, back in a few seconds. Prefer this over research_ads whenever the brand is named. Meta only, deliberately: it has by far the richest creative and is what people mean by "their ads". For Google or LinkedIn specifically, use search_google_ads or search_linkedin_ads. Spends ScrapeCreators credits.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | 'longest_running' (default) etc. | |
| limit | No | max ads per platform (default 30) | |
| domain | No | the advertiser domain | |
| country | No | 2-letter, default 'US' | |
| companyName | No | the advertiser name |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses that the tool spends ScrapeCreators credits, is 'deduped, sorted, with the right page resolved,' and returns results 'in a few seconds.' These are meaningful behavior details not captured by annotations, and they align with them.
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 with the primary purpose and use case, followed by alternatives and cost. It is somewhat lengthy but every sentence serves a function; the 'deliberately' reasoning is extra but not wasteful. Overall well-structured for an agent to quickly extract the core action.
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 tool with no output schema, the description covers the key decision factors: platform scope, alternatives, and cost. However, it does not describe the response format or fields, which might leave an agent uncertain about what it will receive. Since it's a fetch operation, this is a minor gap given the otherwise rich context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal parameter-specific insight beyond the schema; it implies companyName is the key input ('one named brand') but does not elaborate on sort or limit semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: pulling a named brand's live ads from Meta's ad library, with deduping and sorting. It distinguishes itself from research_ads and explicitly names search_google_ads and search_linkedin_ads as alternatives for other platforms, making its unique scope 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 explicit guidance: 'Prefer this over research_ads whenever the brand is named' and 'For Google or LinkedIn specifically, use search_google_ads or search_linkedin_ads.' This covers both when to use and when not to, with clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_bluesky_dmRead the messages in one Bluesky conversationARead-onlyInspect
Read a Bluesky DM conversation in CHRONOLOGICAL order (Bluesky returns newest-first on the wire; this reverses it so the conversation reads top to bottom). Each message says whether it was sent by this account. A message with no text is reported as DELETED rather than as an empty message — “they unsent it” and “they sent nothing” are different facts. Get a convoId from list_bluesky_convos.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | how many messages, 1–100 (default 30) | |
| cursor | No | walk further back through older messages | |
| convoId | Yes | from list_bluesky_convos |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds substantial behavioral context beyond annotations: it reverses the newest-first wire order to chronological, notes that each message includes a sender flag, and explains that missing text is reported as DELETED rather than empty. These are non-obvious, material behaviors that directly affect how an agent interprets results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence immediately explains the critical chronological ordering behavior. The second clarifies the deleted-message nuance, and the final sentence gives the convoId source. Every sentence carries unique information with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that annotations cover the read-only/destructive profile and the schema documents all parameters, the description covers the remaining essential behaviors: ordering, sender flag, and deleted-message handling. It does not describe the output structure, but no output schema exists, and the description provides enough insight into message content. It could explicitly mention using cursor for pagination, but the schema already covers that. Overall, it's sufficient for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters with explicit descriptions: convoId (from list_bluesky_convos), limit (1–100, default 30), and cursor (walk further back). Since schema coverage is 100%, the description does not need to compensate. The only additive hint in the description is the source of convoId, which is a provenance note rather than a semantic expansion. Thus a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Read a Bluesky DM conversation.' It adds distinctive details like the chronological ordering (reversing the wire order) and the deleted-message handling, which clearly separate it from other Bluesky tools like send or mark-read. It also points to list_bluesky_convos as the source for convoId, situating the tool in a workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear prerequisite: 'Get a convoId from list_bluesky_convos.' This tells an agent that the tool depends on a prior call. However, it does not explicitly contrast with sibling tools like send_bluesky_dm or mark_bluesky_convo_read, so an agent must infer the read-only purpose from context. Still, the guidance is adequate for selecting this tool over other conversation actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_docRead a Google DocARead-onlyInspect
Read the text of a Google Doc Hermoso can reach — one it created, or one the user handed over with the Google file picker in the app (that is how an EXISTING doc becomes readable; find its id with list_drive_files). Pass documentId (from create_doc) OR paste a Google Docs URL as docUrl. Under the drive.file scope it reaches nothing else in the user’s Drive; if Google answers that the file was not found, the user has not picked it yet — ask them to pick it in the app rather than retrying. Returns the plain text. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| docUrl | No | a Google Docs URL to read — the document id is extracted from it | |
| documentId | No | the document id (from create_doc) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint and destructiveHint, the description adds critical behavioral context: the drive.file scope limitation (reaches nothing else in Drive), the error-handling behavior (file not found means user hasn't picked it), and the return type ('Returns the plain text'). This goes well beyond the annotations and gives the agent a complete behavioral model.
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 fairly long but every sentence carries essential information—scope, access mechanism, parameter usage, error handling, and return type. It is front-loaded with the core purpose and then details the specifics. It could be tightened slightly, but it remains efficient and well-organized.
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 tool with two optional parameters and no output schema, this description is remarkably complete. It covers the access model, the exact error condition and remedy, the scope limitation, and the output. An agent has everything needed to call this correctly without additional context. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters, but the description enriches them: it clarifies that documentId comes from create_doc, that docUrl is a pasteable URL from which the ID is extracted, and that they are alternative ways to specify the target. This explains the relationship and usage in a way the bare schema does not, so it adds clear value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Read the text of a Google Doc Hermoso can reach'. It precisely defines the scope (docs Hermoso created or user picked) and explicitly distinguishes from siblings by referencing list_drive_files for finding IDs. This allows an agent to immediately separate it from other doc-related tools like update_doc or get_drive_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 provides explicit when-to-use guidance: explains the only way an EXISTING doc becomes readable (user handoff via file picker), tells how to obtain the ID via list_drive_files, and describes the two parameter alternatives (documentId vs docUrl). It also instructs on error handling: if Google says file not found, ask the user to pick it rather than retrying. This is thorough and leaves no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_meta_conversationRead one Messenger / Instagram DM threadARead-onlyInspect
The messages in one DM thread, oldest to newest, each marked inbound or outbound — plus WHETHER A REPLY IS ALLOWED RIGHT NOW. Meta only permits a reply within 24 hours of the person acting, and the window is computed from their LAST MESSAGE rather than from the thread’s updated time (which includes our own replies and would report the window open for a day after WE spoke). Read this before drafting: "can I answer this?" is the question a person actually has, and finding out by being refused is the worst way to learn it. It also hands back replyTo, the id a reply goes to, so nobody has to guess which participant is the customer. ON INSTAGRAM Meta serves only the 20 most recent messages — a truncated thread is unreachable history, not a short conversation, and the reply says so. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | messages (1–100, default 25) | |
| pageId | No | ||
| platform | No | so the Instagram 20-message ceiling can be stated when it applies | |
| conversationId | Yes | from list_meta_conversations |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint=true and destructiveHint=false are annotated, the description adds genuinely non-obvious behavior: the 24-hour reply window is computed from the person's LAST MESSAGE rather than the thread's updated time (which would misleadingly keep the window open), the Instagram 20-message truncation ceiling, and the replyTo id that removes participant guessing. These are platform quirks an agent could never infer from annotations or schema, and they materially change call interpretation. The read-only, 0-credits note is redundant with annotations but reinforces cost safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the key facts (order, markers, reply-allowed flag), and every sentence conveys useful information — the 24h window logic and Instagram truncation are valuable. But it runs long and includes editorializing that dilutes density ('the worst way to learn it,' 'so nobody has to guess which participant is the customer'), and repeats 'Read-only' despite the readOnlyHint annotation. Tightening would raise this.
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 tool with no output schema, the description carries the full burden of describing returns and does so thoroughly: ordering, message metadata, reply-allowed status, and replyTo. The Instagram truncation and credit cost round out operational context. Only pageId semantics and general pagination behavior are left unaddressed, which is a minor gap given the rich annotation coverage.
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% (pageId lacks a description), placing the baseline at ~3. The description adds real value by explaining that the platform parameter triggers the Instagram 20-message ceiling statement, tying a parameter to behavioral output. However, it adds little on limit or conversationId beyond the schema, and pageId remains entirely undocumented in both schema and description — the description does not compensate for that 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 names a specific operation and resource: read the messages of one DM thread, oldest to newest, with inbound/outbound markers plus a reply-allowed check. The opening sentence states both the data returned and its ordering, making the purpose unmistakable and distinct from siblings like list_meta_conversations (enumerate threads) and reply_to_meta_message (send).
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?
Strong when-to-use guidance: 'Read this before drafting: "can I answer this?" is the question a person actually has.' It clearly frames the tool as the recommended pre-reply step. It implies the workflow companion list_meta_conversations via the conversationId schema note, but does not explicitly name alternatives or 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.
read_sheetRead a Google Sheet rangeARead-onlyInspect
Read cells from a Google Sheet Hermoso can reach — one it created, or one the user handed over with the Google file picker in the app (that is how an EXISTING spreadsheet becomes readable; find its id with list_drive_files). Pass the spreadsheetId (from create_sheet) OR paste a Google Sheets URL as sheetUrl. If Google answers that the file was not found, the user has not picked it yet — ask them to pick it in the app rather than retrying. Returns a 2-D array of values.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | A1 range, e.g. "A1:D50" (default A1:Z1000) | |
| sheetUrl | No | a Google Sheets URL to read — the spreadsheet id is extracted from it | |
| spreadsheetId | No | the spreadsheet id (from create_sheet) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description goes beyond by detailing the access model (created vs. user-picked), the alternative input methods (spreadsheetId or sheetUrl), and the specific error-recovery instruction. It also discloses the return format (2-D array). This adds meaningful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is about four sentences, each packed with necessary information. It starts with the core action, then access conditions, then error handling, then return type. No fluff or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no output schema, the description fully equips an agent: it covers input alternatives, how to resolve not-found errors, and the return format. It also references sibling tools (list_drive_files, create_sheet) for id sourcing. Nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 100%, the description adds crucial relational semantics: it explains that spreadsheetId and sheetUrl are alternatives and where to obtain the id (from create_sheet or list_drive_files). It also clarifies the range parameter's default. This goes beyond the schema's per-parameter descriptions by explaining the interaction between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('cells from a Google Sheet'), and clarifies the scope (sheets Hermoso can reach). It stands out from siblings like update_sheet or append_to_sheet by making the read-only nature explicit. The mention of the access model and the error-handling path further disambiguates its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when the tool works (sheets created by Hermoso or user-picked) and how an existing sheet becomes readable, pointing to list_drive_files for finding the id. It also advises the agent to ask the user to pick the file on a not-found error rather than retrying, which is clear guidance on when NOT to use the tool. This is strong contextual routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recast_motionRecast motionAInspect
Motion transfer: re-perform a reference video's motion with a different person/character (supply their image). The reference clip drives the movement; the image supplies the identity. Paid render.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | the actor/character image URL (who should appear) | |
| video | Yes | the reference video whose motion to re-perform | |
| prompt | No | optional scene/style guidance | |
| orientation | No | which aspect to keep: the video's (default) or the image's |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
All annotations are false (readOnlyHint, destructiveHint, etc.), so the description carries the full burden of behavioral disclosure. It adds the key fact that this is a 'Paid render,' which is useful. However, it doesn't describe the output (presumably a video), any processing requirements, or potential side effects. Given the lack of annotation support, the description could be more explicit about the operation's nature (e.g., it creates a new video).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three succinct sentences with zero waste. It front-loads the purpose, immediately clarifies the input roles, and then notes the cost. Every sentence earns its place, making it highly scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers the core interaction (motion transfer with identity from image) and the paid aspect. It does not specify the output format or any limitations, but with no output schema and minimal annotations, it still provides enough for an agent to understand the fundamental use case. The omission of details like processing time or supported video formats is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters have descriptions. The tool description adds significant meaning beyond that by explaining the functional roles: 'The reference clip drives the movement; the image supplies the identity.' This clarifies how image and video interact, which the schema descriptions do not convey. The description does not address the optional prompt and orientation, but the schema covers them adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: 'Motion transfer: re-perform a reference video's motion with a different person/character (supply their image).' The verb 're-perform' and the explicit resource ('reference video's motion') make it distinct from siblings like edit_video or generate_video. The roles of image and video are clearly separated, leaving no ambiguity about what the tool does.
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 context for when to use this tool: whenever you need to transfer motion from a reference video to a new identity. It doesn't explicitly mention alternatives or when-not-to-use, but the unique function (motion transfer) is self-evident against the sibling list. The absence of explicit exclusions keeps it slightly short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_post_statsHow a Reddit post didARead-onlyInspect
Read one of the connected account’s Reddit posts back — score (net upvotes), comment count, upvote ratio, flair, and whether the subreddit removed it. Use it for "how did that post do" or to judge which framing a community actually rewarded before writing the next one. Read-only, 0 credits. Needs Reddit connected.
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | the id returned by post_to_reddit, its t3_… fullname, or the full reddit.com permalink |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's 'Read-only' is redundant. However, it adds valuable context beyond annotations: the required 'Reddit connected' prerequisite, '0 credits' cost, and the specific data fields returned. This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero fluff. The first sentence front-loads the core action and output, the second gives practical use contexts. 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?
Despite no output schema, the description enumerates the returned metrics explicitly. It covers prerequisites (connected account), cost (0 credits), and use cases. For a simple single-parameter read tool, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers 100% of the single parameter (postId), detailing accepted formats (id from post_to_reddit, t3_ fullname, or full permalink). The tool description adds no parameter-level information, so with full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('one of the connected account's Reddit posts') and lists the exact metrics returned (score, comment count, upvote ratio, flair, removed status). It also gives concrete use cases ('how did that post do' or judging community reward), making its purpose distinct from siblings like list_reddit_posts or search_reddit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('Use it for...') and notes prerequisites ('Needs Reddit connected') and cost ('0 credits'). It does not explicitly compare to alternatives, but the use cases are specific enough to guide selection without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reframe_videoReframe videoAInspect
Reframe a video to a different aspect ratio (e.g. 16:9 master → 9:16 vertical) with smart subject tracking. Paid render; returns the served URL of the reframed video.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | the source video URL | |
| aspectRatio | Yes | the target aspect ratio |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotations false, the description carries the burden of behavioral disclosure. It adds value by stating the operation is a paid render and returns a served URL, both critical behavioral traits. The mention of smart subject tracking further informs the agent. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the core action, and includes an illustrative example plus key notes (paid, output). It is concise with no redundant wording.
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 2-parameter tool with no output schema, the description covers the purpose, the cost implication, and what is returned (served URL). It is sufficiently complete for an agent to call correctly, though it lacks explicit guidance on when not to use 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 coverage is 100% since both parameters have descriptions in the schema. The tool description adds no extra meaning beyond the example aspect ratio transformation; it does not describe parameter formats or edge cases. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('reframe') and resource ('video'), plus the exact transformation (aspect ratio change) with an example. This clearly distinguishes it from siblings like clip_video or edit_video, which serve different purposes.
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 makes the core use case clear (reframing to a different aspect ratio) but does not explicitly contrast with alternatives or state when not to use. The 'paid render' note implies a cost consideration but provides no explicit routing to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberRemember a factAInspect
Save a durable fact or PREFERENCE about the brand, audience, or the user’s creative TASTE (e.g. “audience is first-time homebuyers”, “prefers bold lime accents”, “always captions off”) into the workspace Memory so it shapes FUTURE ads. For lasting things, not one-off requests. Merges into the existing Memory (never overwrites); de-dupes on identical text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the fact/preference, concise | |
| category | No | short bucket: Brand, Audience, Taste, Do, Don’t, or Preference (default General) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate write behavior (readOnlyHint false). The description adds critical behavioral details: 'Merges into the existing Memory (never overwrites); de-dupes on identical text.' This explains side effects and idempotency, going well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that packs the action, examples, scope, and key behaviors without excess. The most important information (save durable fact) comes first, and examples are woven in effectively. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only 2 parameters and no output schema, the description covers everything an agent needs: purpose, scope, examples, and merge/duplicate behavior. It is self-contained and leaves no ambiguity about invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are documented. The description adds semantic value by providing examples of what constitutes a 'fact' or 'preference' and clarifies the purpose of the 'text' field. It doesn't explicitly mention 'category', but the schema handles that. The examples enhance understanding beyond the schema's bare descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (save) and resource (durable fact/Preference into workspace Memory) with concrete examples. It clearly distinguishes this from siblings like 'forget' by framing it as storing lasting facts, and from general-purpose storage tools by specifying it shapes future ads.
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 clear guidance on when to use: 'For lasting things, not one-off requests.' This implies a contrast with ephemeral or temporary facts, helping the agent decide. It doesn't explicitly name an alternative tool, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remix_staticRemix a static adAInspect
One-click STATIC-AD REMIX: rebuild a competitor/reference STATIC (image) ad as an on-brand version — SAME layout, composition and energy, but YOUR product, brand colours, logo and voice, with every trace of the source brand removed. Pass imageUrl = the static ad image to remix. Uses your saved brand (pass brandId to target a specific brand — that switches this key's active brand like use_brand). IMAGES ONLY — for video ads use render_ad. Bills as one image generation.
| Name | Required | Description | Default |
|---|---|---|---|
| brandId | No | a brand id/name from list_brands to remix for; omit to use the active brand | |
| imageUrl | Yes | the URL of the static ad image to remix |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false), so the description carries the burden. It discloses that the tool generates a new image, removes source brand traces, switches the active brand when brandId is provided, and bills as one image generation. It does not detail error handling or output format, but these are minor for a generation tool. The description covers key behavioral traits beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but every sentence adds essential information: purpose, parameters, usage boundaries, and billing. It is front-loaded with the core purpose and then clarifies constraints and side effects. The all-caps emphasis ('IMAGES ONLY') quickly signals the primary usage restriction. While not terse, it is efficiently structured for the content it conveys.
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 generation tool, the description covers the core usage: what it does, what to pass, how to select a brand, and the billing implication. It does not mention prerequisites like needing a saved brand or credit balance, but these are implied by 'uses your saved brand' and 'bills as one image generation.' The lack of an output schema is acceptable given the tool's simple nature. Overall, it is sufficiently complete for an agent 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 description coverage is 100%, so both parameters are already documented. The description adds a small amount of extra value by noting that brandId switches the active brand 'like use_brand' and by reiterating the purpose of imageUrl as 'the static ad image to remix.' This does not significantly exceed the schema's own descriptions, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it remixes a static ad image into an on-brand version, preserving layout but replacing branding. Specific verbs ('rebuild', 'remix') and resource ('static ad image') distinguish it from sibling tools like render_ad (for video) and generate_image. The scope 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?
Explicitly instructs when to use: 'IMAGES ONLY — for video ads use render_ad.' Also explains how to target a specific brand via brandId and notes the side effect of switching the active brand. This provides clear routing and usage context, covering both when to use and what to pass.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_memberRemove a teammateADestructiveIdempotentInspect
Remove a member from this brand workspace by email — they lose access (you can re-invite them later). Confirm the exact person with the user, then call with confirm:true.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | the member’s email | ||
| confirm | No | REQUIRED true |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint: true and idempotentHint: true. The description adds meaningful behavioral context by stating that the member loses access but can be re-invited later, clarifying the permanence level. It also instructs to confirm the exact person, which is an important safety behavior. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero filler. The first sentence front-loads the action and consequence, the second delivers the essential usage instruction. Every word contributes to clarity and correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive action with a required confirmation flag, the description covers the critical aspects: effect, reversibility, and required confirmation. It does not mention error handling or edge cases (e.g., nonexistent email), but given its simplicity and the presence of annotations, it is sufficiently complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are documented. The description reinforces the need for confirm:true and explains why (confirm the exact person), adding semantic value beyond the schema's bland 'REQUIRED true'. The phrase 'by email' also aligns with the email parameter, but the key added meaning is the confirmation rationale.
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 ('Remove') and a clear resource ('member from this brand workspace') with the method ('by email'). It also conveys the consequence (lose access) and the possibility of re-invitation, which distinguishes it from other member-related tools like invite_member or set_role. This is a precise and unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to call it: after confirming with the user, and it specifies the required confirm:true parameter. It does not explicitly name alternative tools to avoid, but the confirmation step is a strong usage criterion. The absence of explicit exclusions is a minor gap, but the instruction is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_adRender ad videoAInspect
RECOMMENDED for finished video ADS: render a plan_ad concept through the SAME quality pipeline as the Hermoso web Studio — timed shot list, exact/clean speech (no garbled words), text composited in post (never model-painted), brand end card, licensed music bed, real product references. Pass plan_ad’s full structured output as creative. Honors the plan’s render_plan structure/duration: a storyboard that FITS ONE CLIP OF THE RENDER MODEL renders as a single continuous pass; anything longer automatically renders as STITCHED ACTS (the fewest balanced clips, each at most one model clip) — never time-compressed into one clip. That threshold is the render model’s own maximum, not a fixed number: most models cap a clip at 15s and the longest-clip one goes to 30s, so use dryRun:true to see the act split this plan will actually get, for free, before spending. CAST A SAVED CREATOR with creator so the SAME person stars in this ad as in the last one (list_creators is the roster) — otherwise every render invents a new face. Renders take 1–3 min; keep polling get_job if it returns still-rendering. Spends credits.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | video model id from hermoso_capabilities (default: the plan’s pick). Naming one is a DELIBERATE pick — the server asks before ever swapping it (no silent fallback) | |
| music | No | licensed music bed on/off (default on) | |
| dryRun | No | return the routing decision (single pass vs stitched acts, resolved model + act lengths) WITHOUT submitting a render — free, nothing charged | |
| lockup | No | persistent brand-logo lockup overlay on/off | |
| creator | No | CAST A SAVED CREATOR in this ad — their id from list_creators, or the name you know them by (“Sarah”). Their saved portrait becomes the on-camera identity for the whole spot, so the same face carries across every act and across every ad you render for this brand — and because we already have their picture, the character portrait this pipeline would otherwise generate is skipped, so casting somebody costs LESS than not casting them. Omit to let the ad cast a fresh person. Refused for free, with nothing rendered, if the name matches nobody or more than one creator, if the plan has nobody on camera, or if they are a REAL person with no likeness consent on file. | |
| endCard | No | branded end card on/off (default: on, except organic recipes) | |
| captions | No | composited caption pills on/off (default: the recipe decides) | |
| creative | Yes | the FULL structured output of plan_ad (must contain video_storyboard) | |
| ttsVoice | No | voiceover voice name (e.g. Rachel / George) when the plan voices over | |
| resolution | No | '1080p' default (what we ship and bill for); '480p'/'720p' = cheaper draft passes, '4k' = premium final delivery (more credits). NOT EVERY MODEL OFFERS EVERY TIER — this enum is what the tool accepts, and each model's OWN `resolutions` list in hermoso_capabilities is what it can actually render (the longest-clip 30s model, for one, tops out at 720p). Ask for a tier the chosen model does not list and it is rendered at that model's best available tier instead, with nothing in the reply saying so — so check `resolutions` before promising anyone 1080p or 4k. | |
| aspectRatio | No | output aspect ratio, e.g. 9:16 (default) / 1:1 / 16:9 | |
| durationSeconds | No | total ad length in seconds (supported range 4–180; outside that it is clamped). Omit to honor the plan’s own duration — that is almost always right. This only RE-TIMES an already-authored board (its scenes are scaled to fit), it does NOT re-write it, so to change the length of the ad the user asked for, re-run plan_ad with durationSeconds instead. A length that fits ONE clip of the render model renders as one continuous pass; longer is stitched from acts filled to that model’s clip maximum with the remainder last — the maximum is 15s on most models and 30s on the longest-clip one, so use dryRun:true to see the exact act split for free before spending. | |
| allowGenericProduct | No | proceed even though this brand has NO product photo on file and the ad features a product — the packaging will be INVENTED. Only pass true after telling the user that and hearing they are fine with a generic stand-in |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no guidance (all hints false), so the description carries the full burden. It transparently discloses key behaviors: honoring plan structure, act stitching thresholds, time-compression avoidance, casting creator effects on cost, render time, credit spend, silent resolution fallback (rendering at best available tier when requested tier unsupported), and generic product invention when no photo exists. This goes well beyond basic operational details and surfaces important caveats.
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 long (multiple sentences) but each sentence adds critical information, and the main purpose is front-loaded with 'RECOMMENDED for finished video ADS.' It uses structured emphasis (all caps for key terms) to aid scanning. While verbose, it is far from redundant; given the tool's 13 parameters and complex behavior, the length is justified. It is not as terse as the ideal two-sentence example but earns its 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?
Given the tool's complexity (13 params, nested object, no output schema), the description is remarkably complete. It covers the core rendering flow, plan structure handling, act splitting, dryRun preview, creator casting, render duration, credit cost, resolution limitations, and generic product invention. The only minor omission is an explicit description of the return value, but the mention of get_job implicitly covers the asynchronous job pattern. No essential calling information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is documented in the schema. The tool description adds usage tips (e.g., 'use dryRun:true to see the act split' and 'CAST A SAVED CREATOR') but does not add new semantic meaning about the parameters themselves—it reiterates what the schema already states. It provides guidance on parameter combinations, but not new definitions, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'render a plan_ad concept through the SAME quality pipeline as the Hermoso web Studio.' It specifies the input (plan_ad's structured output) and differentiates from planning tools like plan_ad by focusing on the rendering step. It also implies distinction from generic video generation (generate_video) by emphasizing 'finished video ADS' and the quality pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: it is 'RECOMMENDED for finished video ADS' and explains how it honors the plan's render_plan structure, including when single pass vs stitched acts occur. It also gives operational guidance like using dryRun:true to preview act splits, casting a saved creator for consistency, and polling get_job for completion. However, it does not explicitly name sibling tools or state when NOT to use it (e.g., for rough drafts or non-ad videos), so it is not a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_google_business_reviewReply to (or remove a reply from) a Google reviewADestructiveIdempotentInspect
Answer a customer review publicly, as the business, on the brand’s Google Business Profile listing — or delete a reply that is already there. THIS IS AN UPSERT: a listing has exactly one reply per review, so replying to a review that already has an answer REPLACES it rather than adding a second. Google only accepts replies on a VERIFIED listing. Deleting is public and immediate, so it is confirm-gated. Write the reply in the brand’s voice and answer the specific complaint — a generic reply under a one-star review is worse than none. Needs Google Business Profile connected and the project approved.
| Name | Required | Description | Default |
|---|---|---|---|
| delete | No | true removes the existing reply instead of writing one | |
| comment | No | the public reply text — required unless you are deleting | |
| confirm | No | required for delete:true | |
| reviewId | Yes | from list_google_business_reviews | |
| locationId | No | which listing — omit when only one is shared |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations. While annotations already flag destructiveHint and idempotentHint, the description explains the upsert semantics (replying replaces the existing reply), that deletion is public and immediate, and that it is confirm-gated. It also warns about the verified-listing restriction—none of which is derivable from annotations or schema alone. This gives the agent a complete picture of side effects and prerequisites.
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 well-structured and front-loaded with the core purpose, followed by critical behavioral details (upsert, deletion, prerequisites) and then quality guidance. It is a bit long but every sentence carries essential info; there is no fluff. The use of bold for 'UPSERT' draws attention to a crucial nuance. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters and no output schema, the description covers all necessary contexts: the upsert behavior, prerequisites (verified listing, connection, approval), deletion confirmation, and content quality guidance. It even hints that reviewId comes from list_google_business_reviews (though the schema already states that). It doesn't describe return values, but without an output schema, that's not expected. It is sufficiently complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond schema by explaining the upsert behavior (relevant to comment and delete), emphasizing that comment should be in the brand's voice and answer the specific complaint, and clarifying the confirm parameter's role in deletion. These enrich the parameter semantics beyond mere type/description, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary action: answering a customer review publicly or deleting an existing reply on a Google Business Profile. It explicitly uses a specific verb ('Answer', 'delete'), names the resource (Google review on the brand's listing), and even highlights the unique upsert behavior, which distinguishes it from potentially similar reply tools among siblings. No ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: it mentions the requirement of a verified listing, that the profile must be connected and project approved, and instructs to write in the brand's voice and address the specific complaint. It doesn't explicitly list alternatives or when NOT to use it, but the prerequisite and behavioral guidance (e.g., generic replies are worse than none) effectively inform when to invoke it. It could improve by naming sibling tools to avoid confusion, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_inbox_itemReply to anything in the inboxAInspect
Answer an inbox item BY ITS COMPOSITE ID — the id list_inbox returned, e.g. 'facebook:123_456' or 'google_business:accounts/1/locations/2/reviews/3'. Routes to the right channel for you; you do not need to know which reply tool a platform uses. The reply is posted as the brand — PUBLIC on every comment, reply, mention and review, and PRIVATE on the two DM sources (meta_dm, bluesky_dm) — so show the user the exact wording and get their go-ahead first either way. X is the one exception and says so: a reply there is a new post, so it goes through post_to_x with replyTo.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The composite id from list_inbox — '<source>:<platform id>'. A bare platform id is refused: replying to the wrong network as the brand cannot be taken back. | |
| text | Yes | The reply, exactly as it should appear publicly. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are thin (only readOnlyHint, openWorldHint, idempotentHint, destructiveHint), and the description carries substantial behavioral context: the reply is 'posted as the brand — PUBLIC on every comment, mention and review' yet 'PRIVATE on the two DM sources (meta_dm, bluesky_dm)', the firm approval rule to 'show the user the exact wording and get their go-ahead first', and the X special case where a reply becomes a new post going through post_to_x. This is exactly the kind of externally visible side-effecting context an agent needs.
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 core instruction is front-loaded ('Answer an inbox item BY ITS COMPOSITE ID'), and every sentence earns a place — the routing abstraction, public/private visibility, and the X exception all matter for correct invocation. It is, however, somewhat dense and partially redundant with the schema's id description, and the paragraph could be tightened 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 2-param tool with no output schema, the description is complete enough for the agent to invoke correctly: it covers the required ID provenance (list_inbox), the visibility consequences, the user-approval imperative, and the X edge case. The only omission is any indication of the return value or failure behavior, which is minor given the operation's simplicity.
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% (both id and text are documented), so the baseline is 3. The description adds only marginal value: concrete ID examples like 'facebook:123_456' and 'google_business:accounts/1/...' are genuinely useful, but the rest — 'id list_inbox returned', 'a bare platform id is refused' — largely restates the schema descriptions. No significant semantic lift beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Answer an inbox item') on a clear resource using a specific mechanism (composite ID), and explicitly differentiates itself from the many reply_to_* siblings with 'Routes to the right channel for you; you do not need to know which reply tool a platform uses.' An agent can immediately tell this is the router/dispatcher rather than a platform-specific reply tool.
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 context for when to use this tool — replying to any inbox item without picking a platform-specific reply tool — and it names post_to_x as the alternative path for X items ('so it goes through post_to_x with replyTo'). It stops short of explicitly listing when-not-to-use the platform reply siblings, but the routing instruction makes the primary scenario unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_meta_commentReply to a Facebook/Instagram commentAInspect
Post a public reply to a comment on the brand’s Facebook or Instagram post. This is PUBLIC and posted as the brand — show the user the exact wording and get their go-ahead first.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Page id — omit when only one Page is connected | |
| message | Yes | reply text | |
| commentId | Yes | comment id from list_meta_comments |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a write operation (readOnlyHint=false) and not idempotent (idempotentHint=false). The description adds that the reply is PUBLIC and posted as the brand, which is valuable context beyond the annotations. It does not mention auth requirements, rate limits, or failure behavior, so it meets the minimum bar but does not fully elaborate on behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the core purpose ('post a public reply'), then immediately add the key constraint (public, as brand, get user approval). There is no fluff or repetition; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple write tool with only three parameters and no output schema, the description is nearly complete. It specifies the action, the public nature, the brand attribution, and the approval requirement. The schema already explains the comment ID source and page ID omission rule, so nothing critical is missing. Minor omissions like success feedback or error handling do not significantly hamper agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (commentId, message, pageId) are described in the schema with reasonable detail (e.g., 'comment id from list_meta_comments', 'Page id — omit when only one Page is connected'). Since schema coverage is 100%, the description need not add further parameter details. It adds nothing beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('post'), a specific resource ('a comment on the brand’s Facebook or Instagram post'), and explicitly notes it's a 'public reply'. The title also clearly says 'Reply to a Facebook/Instagram comment'. This distinguishes it from sibling tools like comment_on_meta_post (which likely posts a new comment) and reply_to_meta_message (which handles direct messages).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides important usage context: it is public, posted as the brand, and requires showing the user the exact wording and getting their go-ahead first. This is clear guidance on when and how to use it. However, it does not explicitly name alternative tools or state when NOT to use it (e.g., for direct messages versus public comments), leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_meta_messageReply to a Messenger / Instagram DMAInspect
Send a text reply to someone who has messaged the brand. THIS REACHES A REAL PERSON — show the user the exact text and who it goes to, get a yes, then send. Pass conversationId as well as recipientId and Hermoso checks Meta’s 24-hour window for free BEFORE sending, and refuses with the real reason instead of letting Meta refuse it; without one it sends and discloses that the window could not be checked. HERMOSO SENDS REPLIES ONLY: messaging_type is always RESPONSE, and proactive messages and message tags are not offered at all — that is a deliberate product boundary, not a gap, and a closed window is a RULE that only the person writing again reopens. recipientId is a PAGE-SCOPED ID on Messenger and an INSTAGRAM-SCOPED ID on Instagram (read_meta_conversation returns it as replyTo); a username or a handle is not one and cannot be turned into one. ACCEPTED IS NOT DELIVERED — never report it as delivered or read. 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the reply | |
| pageId | No | ||
| platform | No | ||
| recipientId | Yes | the PSID (Messenger) or IGSID (Instagram) to reply to — `replyTo` from read_meta_conversation | |
| conversationId | No | strongly recommended: it is what lets the 24-hour window be checked BEFORE sending rather than discovered by a refusal |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, idempotentHint false, destructiveHint false), the description discloses critical behavioral traits: it warns that the reply reaches a real person and requires user confirmation; it explains the 24-hour window check and refusal behavior with or without conversationId; it notes that ACCEPTED is not DELIVERED; and it states 0 credits. This is far more transparency than the annotations provide, revealing side-effects, failure modes, and constraints.
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 long but every section carries essential warnings and constraints (real-person reach, window checking, ID types, delivery semantics). It is front-loaded with the core purpose and then organizes critical operational details in bold, scannable phrases. While not terse, the verbosity is justified given the high-stakes side-effect of messaging a real person. No filler or repetition of schema information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (platform-specific IDs, 24-hour window, deliverability semantics, cost), the description covers all dimensions an agent needs: it explains how to obtain the recipientId (via read_meta_conversation), what happens with and without conversationId, that proactive messages are not supported, that acceptance is not delivery, and that it costs 0 credits. There is no output schema, but the description sufficiently describes outcomes (success, refusal with reason, disclosure of unchecked window) so an agent can interpret the result.
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 schema has descriptions for text, recipientId, and conversationId (60% coverage). The description adds substantial meaning beyond the schema: it clarifies that recipientId is page-scoped on Messenger and Instagram-scoped on Instagram, and cannot be a username or handle; it explains the role of conversationId in enabling the pre-send window check. However, it does not elaborate on pageId or platform, leaving those parameters under-specified. This is solid compensation but not exhaustive.
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 opens with 'Send a text reply to someone who has messaged the brand,' which specifies a clear verb (send) and resource (a reply to a direct message). It distinguishes itself from siblings by explicitly stating that it only sends replies (RESPONSE type) and never proactive messages or message tags, effectively separating it from post_to_meta or comment_on_meta_post. This is a specific, unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is for replying to messages that people have sent, and it explicitly excludes proactive messages and message tags as a deliberate boundary. It also explains the 24-hour window rule, which is the key constraint on when the tool can be used. However, it does not name alternative sibling tools (e.g., reply_to_meta_comment) or explicitly say 'use this for DMs, not comments,' so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_reddit_commentReply on RedditAInspect
Reply on Reddit as the connected account — either a top-level comment on a post, or a reply to somebody’s comment. This publishes PUBLICLY under their username immediately, so show the user the exact wording and get an explicit yes BEFORE calling. Reddit judges brands harder on how they behave in comments than on what they post: answer the actual question, in plain language, and do not paste marketing copy — an account that does gets buried and can get the whole domain banned from the subreddit. parentId is a FULLNAME, not a bare id: t3_… replies to a POST (a new top-level comment), t1_… replies to a COMMENT. list_reddit_comments returns the right one on every row. 0 credits. Needs Reddit connected.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the reply markdown | |
| parentId | Yes | t3_… fullname of a post (top-level comment) or t1_… fullname of a comment (a reply to it) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations in disclosing behavioral traits. It explicitly states that the reply publishes publicly under the user's username immediately, and highlights the significant risk of domain bans and being buried if marketing copy is used. It also mentions the need for explicit user confirmation, the credit cost (0), and the requirement for a connected Reddit account. These are crucial behavioral disclosures that the annotations (readOnlyHint: false, destructiveHint: false) do not capture, so the description carries the full burden and does it thoroughly.
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 relatively long but densely packed with essential information: the action, public visibility warning, confirmation requirement, brand risk, fullname clarification, credit cost, and connection prerequisite. Each sentence adds value, and the most critical warning (public publishing) is front-loaded. While it could be trimmed slightly without losing meaning, the length is justified given the stakes. It is not redundant or wasteful, so it earns a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for the tool's complexity. It covers the action, the two usage scenarios, the critical fullname format, the confirmation step, the risk of domain bans, the credit cost, and the connection requirement. It also points to a related tool for obtaining parentId. Since there is no output schema, the description does not need to explain return values, but it provides everything an agent needs to invoke the tool correctly and safely. The combination of schema (100% coverage) and this detailed description leaves no significant 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?
Although the schema already describes both parameters with 100% coverage, the description adds essential semantic context. It clarifies that parentId is a FULLNAME (not a bare ID) and explains the t3_ and t1_ prefixes, which directly affects how to set the parameter. It also references list_reddit_comments as the source for the correct value. This goes beyond the schema's basic descriptions and provides crucial format and usage details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: replying on Reddit, either as a top-level comment or a reply to a comment. It specifies the platform (Reddit) and the two scenarios, distinguishing it from other reply tools for different platforms. The verb 'Reply' and resource 'Reddit comment' are precise, so an agent can easily understand what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use this tool: when replying on Reddit. It explains the fullname format (t3_ vs t1_) and directs the agent to list_reddit_comments for obtaining the correct parentId. It also instructs to show the user the exact wording and get explicit confirmation before calling, which is a usage guideline. While it doesn't explicitly contrast with sibling reply tools, the platform is unambiguous, making the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_threadReply on ThreadsAInspect
Post a reply to a Threads post — the brand’s own or someone else’s. This PUBLISHES publicly under the brand’s account, so show the user the exact wording and get their go-ahead first.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | reply text (max 500 characters) | |
| replyToId | Yes | the post id being replied to |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent action, but the description adds crucial context: it PUBLISHES publicly under the brand’s account and mandates user confirmation. This goes beyond the annotations to warn about the public, irreversible nature of the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero fluff. The purpose is front-loaded, followed by the critical warning. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param action with no output schema and annotations already covering safety, the description covers purpose, public nature, and required user approval. It doesn't mention success/return behavior or rate limits, but those are minor for this tool. The description is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with clear descriptions for both parameters (text max 500, replyToId as post id). The description adds a behavioral note about showing the user the exact wording, but doesn't add new meaning about the parameters themselves. Baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Post a reply'), resource ('Threads post'), and scope ('the brand’s own or someone else’s'). This clearly distinguishes it from sibling reply tools like reply_to_meta_comment or reply_to_tiktok_comment, which target other platforms.
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 clear context on when to use: replying to Threads posts, with the explicit requirement to show the user the exact wording and get approval before publishing. It doesn't explicitly list alternatives or exclusions, but the platform-specific naming and scope already steer the agent away from other reply tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_tiktok_commentReply to a comment on the brand’s TikTok postAInspect
Reply to an existing comment on a TikTok post the authorized account owns — TikTok's twin of reply_to_meta_comment and reply_to_youtube_comment. Text (≤1,200 characters) or an image; at least one is required. A REPLY IS THE ONE PLACE TIKTOK ACCEPTS A PLAIN IMAGE URL (pass imageUrl); an uploaded imageUri + width + height also works. TikTok silently hides replies it flags as spam, so read it back with list_tiktok_comment_replies if visibility matters. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ≤1,200 characters (UTF-8) | |
| videoId | Yes | the post the comment sits on — TikTok requires it | |
| imageUri | No | from upload_tiktok_comment_image | |
| imageUrl | No | a public image URL — TikTok accepts this on a REPLY only, never on a new comment | |
| commentId | Yes | from list_tiktok_comments | |
| imageWidth | No | ||
| imageHeight | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's not read-only and not destructive. The description adds valuable context: TikTok silently hides spam replies, and authorization is required. This goes beyond the structured fields and helps the agent anticipate 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?
Every sentence carries distinct information: purpose, sibling comparison, content requirements, the imageUrl exception, spam visibility warning, and authorization need. No redundancy; front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema, the description covers purpose, required/optional parameters, edge behavior (spam hiding), and prerequisites (authorization). It could mention potential errors or reply placement, but overall it provides sufficient guidance for an agent to invoke 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 71%, so the description adds value by clarifying the relationship between imageUrl (only accepted on replies), imageUri + width/height (also valid), and the text length limit. It also explains that at least one text or image is required, supplementing 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 states a specific verb ('Reply') and a specific resource ('an existing comment on a TikTok post the authorized account owns'). It explicitly names sibling tools (reply_to_meta_comment, reply_to_youtube_comment) as twins, making differentiation clear without needing to open schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says 'Reply to an existing comment' and names the twin tools, establishing context. It also provides operational constraints (at least one of text/image, imageUrl only on replies) and directs to list_tiktok_comment_replies for verification. It does not explicitly state when NOT to use it versus alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_youtube_commentReply to a YouTube commentAInspect
Post a public reply to a comment on the connected channel, as the channel. This is PUBLIC and immediate — show the user the exact reply text and get an explicit yes before calling. Get commentId from list_youtube_comments. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the reply, shown publicly under the video | |
| commentId | Yes | id of the comment to reply to (from list_youtube_comments) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, but the description goes further by explicitly stating 'This is PUBLIC and immediate' and 'show the user the exact reply text and get an explicit yes before calling.' It also adds a precondition ('Needs a connected YouTube channel'). This covers behavioral traits that annotations do not fully convey, such as the visibility and the confirmation requirement, without contradicting any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence states the core action and scope; the second packs the public/immediate nature, the confirmation step, the input source, and the prerequisite. Every sentence carries essential information without redundancy, and the critical caution is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter write operation with no output schema, the description covers the essential context: the action, the public/immediate nature, the confirmation requirement, the input source, and the channel prerequisite. It does not mention potential errors or post-posting behavior, but given the low complexity and annotations covering side effects, this is adequate. The absence of output schema makes return-value explanation unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by telling the agent where to obtain the commentId ('from list_youtube_comments') and by reinforcing that the text is the public reply (matching the schema description). This extra cross-reference for one parameter elevates it above 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 verb ('Post a public reply') and a precise resource ('a comment on the connected channel, as the channel'). It explicitly mentions YouTube and ties to a sibling tool (list_youtube_comments), distinguishing it from other reply tools like reply_to_tiktok_comment or reply_to_meta_comment. The scope 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?
The description provides clear context: it is for YouTube comments, requires a connected channel, and instructs the agent to get commentId from list_youtube_comments. It also gives an explicit operational rule: show the user the reply text and obtain confirmation before calling. However, it does not explicitly name alternative tools or state when NOT to use it, though the platform-specific naming makes this largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugReport a bugAInspect
Report a bug in Hermoso to the team. Use this when something in Hermoso genuinely misbehaves — a tool errors unexpectedly, returns a wrong or malformed result, a render comes back broken, or documented behaviour doesn't match what happened. Include what you were trying to do, the exact tool call and arguments, and what came back. Do NOT use it for out-of-credits, a policy refusal, or a missing capability (use request_feature for that). Free, no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| details | Yes | what you were doing, the tool + arguments you called, what you expected, and what actually happened (paste the exact error) | |
| summary | Yes | one-line summary of the bug | |
| severity | No | high = blocks the task or loses paid work; medium = wrong output but workable; low = cosmetic |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the description doesn't need to re-state mutation. It adds useful behavioral context: 'Free, no credits' (cost implication) and guidance on what to include (what you were doing, exact tool call and arguments, what came back). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then flows into usage guidance, exclusions, and cost. It's slightly long but every sentence earns its place with no fluff. The structure is logical and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a report tool with no output schema, the description is complete: it tells the agent when to use it, how to construct a good report, and what not to use it for. It even names the sibling alternative. An agent has everything needed 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 100% and all three parameters (summary, details, severity) are fully described in the schema. The description doesn't add parameter-specific syntax beyond what the schema provides, but it does contextualize the 'details' parameter by listing what to include. Baseline 3 is appropriate when schema covers everything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb+resource ('Report a bug in Hermoso to the team') and enumerates specific examples of genuine misbehavior (tool errors, wrong/malformed results, broken renders, documented-behavior mismatch). It also explicitly distinguishes itself from request_feature, so an agent can tell them apart 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?
It gives explicit when-to-use conditions (genuine misbehavior with concrete examples) and when-not-to-use exclusions (out-of-credits, policy refusal, missing capability) with the correct alternative named (request_feature). This is exactly the explicit routing needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repost_threadRepost a Threads postAInspect
Repost an existing Threads post to the brand’s own Threads profile — the Threads equivalent of a retweet. It is how a brand amplifies a customer’s post, a mention, or one of its own older threads without copying the text, and there was previously no way to do it. Works on any Threads post id: list_threads_posts, list_threads_mentions and search_threads_keyword all return them. This creates a NEW post on the profile, so show the user what is being reposted and get a yes first. Threads publishes NO un-repost endpoint — because a repost returns its own media id, deleting THAT id with delete_thread is the likely undo, but Meta does not document it, so check the profile afterwards rather than promising it worked. 0 credits. Needs Threads connected.
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | the Threads post id to repost |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond annotations: it clarifies the tool creates a NEW post (consistent with readOnlyHint=false), explicitly warns about the absence of an un-repost endpoint, advises verifying the result rather than promising success, notes the 0-credit cost, and requires Threads connection. This is far richer than the bare annotation 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?
Despite being a full paragraph, every sentence serves a purpose: purpose, analogy, usage, source of ids, side effects, undo strategy, cost, and prerequisite. It is front-loaded with the core definition and packed with actionable details without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with no output schema, the description covers all essential operational details: the need for user confirmation, the fact that a new post is created, the un-repost workaround, the 0-credit cost, and the Threads connection requirement. Nothing an agent needs to call it safely and correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes postId with 100% coverage, so the description doesn't need to restate it. It adds value by explaining that postId comes from specific list/search tools and can be any Threads post id, which improves the agent's ability to pick a valid value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'repost' and the resource 'existing Threads post', and immediately provides the retweet analogy, which is intuitive. It also explicitly differentiates from copying text, and identifies itself as the new, previously-missing method for amplification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool—to amplify a customer's post, a mention, or an older thread without copying text. It also lists the sibling tools that return suitable post ids (list_threads_posts, list_threads_mentions, search_threads_keyword), and describes the unique behavior of creating a new post and the lack of an official undo, with a suggested workaround.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_featureRequest a featureAInspect
Ask the Hermoso team for a capability that doesn't exist yet. Use this when you need something Hermoso genuinely can't do — an unsupported platform or channel, a missing model, an export format, a tool that would have completed the user's task but isn't available. Say what the user was trying to achieve, not just the feature name — the use case is what gets built. Free, no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| details | Yes | what the user was actually trying to achieve, why the current tools couldn't do it, and what you'd expect the capability to do | |
| summary | Yes | one line: the capability you need |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already note the tool is not read-only, not idempotent, and open-world, yet the description adds valuable behavioral context: it is free and consumes no credits, and it implies an async request (submitting to a team). This goes beyond the schema and annotations by explaining the practical implications of using the tool, though it does not detail any response or follow-up process.
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 concise—three sentences that cover purpose, usage condition, and content guidance. It is front-loaded with the core action, followed by when to use it, and ends with practical tips. No filler; every sentence earns its place. Structure is ideal for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two parameters, no output schema, no nested objects), the description covers the essential context: what it does, when to use it, and what to include. It also notes it's free. While it doesn't mention potential response time or what happens after submission, that's not critical for calling the tool correctly, so the description is sufficiently 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?
The input schema already covers both parameters (summary and details) with clear descriptions, so the baseline is 3. The description adds further guidance on the 'details' field—emphasizing to include the user's goal and why current tools are insufficient—which is more specific than the schema's generic description. This extra clarification improves the quality of requests without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Ask the Hermoso team for a capability that doesn't exist yet.' It specifies the resource (a missing capability) and verb (request), and the examples (unsupported platform, missing model, export format) distinguish it from the many operational sibling tools. An agent can immediately tell this is for requesting new functionality, not executing existing operations.
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 explicitly says when to use it: 'Use this when you need something Hermoso genuinely can't do' and gives concrete examples. It also instructs the user to describe the use case ('Say what the user was trying to achieve, not just the feature name'). This effectively routes the agent to use this tool only when no existing tool can complete the task, and clarifies the expected content of the request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reschedule_postChange a scheduled postAIdempotentInspect
Change a post that is still QUEUED — move it to a different time, rewrite the caption, swap the media, add or drop a channel, or change which board / Page / company Page / listing it goes to. PASS ONLY WHAT CHANGES: an omitted field is left exactly as it was, and an explicit empty string CLEARS one (linkedinOrganizationId:"" moves a company-Page post back to the person’s own profile). The edited item is re-checked against the identical rules its create passed — visibility the channel can honour, per-channel length, media the channel can carry — so an edit can never slip past a refusal that a create would have caught. Get the id from list_scheduled. Something that already went out cannot be changed: a published post is edited or removed with manage_meta_post / manage_linkedin_post / delete_x_post, not rescheduled.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | the new time — ISO timestamp (2026-08-05T09:00:00Z) or epoch milliseconds. Must be in the future, at most 365 days out. | |
| id | Yes | the scheduled post id from list_scheduled | |
| link | No | ||
| poll | No | X — replaces the poll; an empty options list removes it. | |
| tags | No | YOUTUBE — replaces the WHOLE tag list; an empty array [] clears the tags. | |
| event | No | GOOGLE BUSINESS — replaces the whole event record {title, startDate, startTime, endDate, endTime}. | |
| offer | No | GOOGLE BUSINESS — replaces the whole offer record {couponCode, redeemOnlineUrl, termsConditions}. | |
| title | No | PINTEREST / YOUTUBE — replace the headline; "" clears it and goes back to deriving one from the caption | |
| chatId | No | TELEGRAM — send it to a different chat, group or channel (@username or numeric id). It can be changed but never cleared: telegram cannot publish without one. | |
| pageId | No | FACEBOOK / INSTAGRAM / THREADS — publish from a different connected Page (list_meta_pages) | |
| thread | No | X — replaces the WHOLE thread; an explicit [] drops back to a single post using the caption. | |
| altText | No | ACCESSIBILITY — replace the screen-reader description(s). A STRING describes every slide; an ARRAY describes them one at a time in slide order and REPLACES the whole list. "" clears it. | |
| boardId | No | PINTEREST — move the Pin to a different board (list_pinterest_boards) | |
| message | No | replace the caption used for every channel that has no override | |
| captions | No | replaces the WHOLE per-channel caption map — send every override you want to keep, not just the new one | |
| channels | No | replaces the channel list | |
| imageUrl | No | swap the image; "" removes it | |
| topicTag | No | THREADS ONLY — one topic tag, without the leading #. | |
| videoUrl | No | swap the video; "" removes it | |
| imageUrls | No | replace the CAROUSEL slides, in order; an empty array [] drops the carousel and goes back to a single image. Omit to leave the slides exactly as they are. The edited item is re-checked against the same carousel rules the create passed, so adding a channel that cannot swipe is refused now rather than posting slide 1 later. | |
| slideText | No | PINTEREST CAROUSEL ONLY — per-slide title / description / link, aligned to slide order. | |
| topicType | No | GOOGLE BUSINESS — the kind of Post; EVENT and OFFER both require `event`. | |
| trialReel | No | INSTAGRAM — replaces the trial-reel setting on a queued Reel (MANUAL or SS_PERFORMANCE); an explicit "" turns the trial off and it goes out as an ordinary Reel. Only takes effect while the post is still queued — a Reel already published cannot be converted into a trial. | |
| yourBrand | No | TIKTOK — the own-brand disclosure; false turns it off. | |
| actionType | No | GOOGLE BUSINESS — the call-to-action button; "" clears it. | |
| locationId | No | GOOGLE BUSINESS — a different listing (list_business_locations) | |
| madeWithAi | No | X — the AI-media label; false turns it off. | |
| visibility | No | NOTE: changing this without also naming visibilityByChannel clears any per-channel overrides, so "make it all draft" is not a no-op | |
| description | No | YOUTUBE — replace the video description; "" clears it. Remember the caption is the TITLE, not the description. | |
| disableDuet | No | TIKTOK VIDEO ONLY — block Duets. | |
| quotePostId | No | THREADS ONLY — the id of the Threads post this one quotes. | |
| countryCodes | No | THREADS ONLY — two-letter country codes limiting who can see the post. | |
| privacyLevel | No | TIKTOK — WHICH PRIVACY LEVEL the post goes out at, in TikTok’s own vocabulary. TikTok requires the USER to choose this from the levels their own account allows: call tiktok_creator_info, show them the real options, and pass back the one they picked — never a default and never a guess, which TikTok refuses at init. Omit it and the post falls back to the coarse `visibility` (private → SELF_ONLY, otherwise PUBLIC_TO_EVERYONE), which cannot express MUTUAL_FOLLOW_FRIENDS or FOLLOWER_OF_CREATOR at all. It must agree with the TikTok visibility (SELF_ONLY is the private one) and it is refused on a TikTok DRAFT, which carries no post info. | |
| replyControl | No | THREADS ONLY — who may reply. | |
| collaborators | No | INSTAGRAM — replaces the WHOLE collab list (up to 3 usernames); an explicit [] removes the co-authors and the post goes out as an ordinary single-author post. Only takes effect if the post has not fired yet — an invite already sent cannot be withdrawn from here. | |
| disableStitch | No | TIKTOK VIDEO ONLY — block Stitches. | |
| replySettings | No | X — who may reply; "" goes back to everyone. | |
| brandedContent | No | TIKTOK — the paid-partnership disclosure; false turns it off. | |
| disableComment | No | TIKTOK — comments off on this post. | |
| linkAttachment | No | THREADS ONLY — a full http(s) URL rendered as a link card on a TEXT-ONLY post. The only way a Threads post carries a destination. | |
| coverTimestampMs | No | TIKTOK VIDEO ONLY — cover frame in milliseconds. | |
| crossreshareToIg | No | THREADS ONLY — also share to Instagram as a Story when it fires; false turns it off. Refused on a carousel. | |
| commercialContent | No | TIKTOK — the COMMERCIAL CONTENT DISCLOSURE toggle: true when this post promotes a brand, product or service at all. TikTok requires at least one of yourBrand / brandedContent once it is on, and refuses a post that declares itself commercial without naming which kind. Either disclosure already implies it. | |
| visibilityByChannel | No | ||
| crossreshareDarkMode | No | THREADS ONLY — dark-mode that Instagram Story. Needs crossreshareToIg. | |
| linkedinOrganizationId | No | LINKEDIN — target a different company Page, or "" to post as the connected person instead |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=true, destructiveHint=false, and the description stays perfectly consistent: it flags the mutation (edit), clarifies the idempotent pass-only-changes semantics, and discloses the non-obvious clearing behavior ('' clears a field) plus the re-validation rule (an edit must pass the same checks its create did). It also surfaces side effects like the visibility/visibilityByChannel interaction and post-firing restrictions — substantially more context than the annotations alone.
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?
Despite the huge parameter surface, the description is a single tight paragraph that front-loads the action, the QUEUED precondition, the change-only semantics, and the exclusion of published posts before any field is listed. Every sentence earns its place; there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 46 parameters, deep nested objects, and no output schema, the description covers everything an agent needs: source of the id, required-parameter behavior, the pass-only-changes/clearing model, re-validation, per-channel caveats, and the sibling routing for published posts. There is no meaningful gap that would cause a wrong 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 very high (96%), so the schema already documents nearly every parameter. The description still adds value on the trickiest ones: the empty-string-clears convention, the whole-map replacement semantics for captions and collaborators, the 'can never be cleared' rule for chatId, and the visibility-by-channel side effect. A handful of parameters rely mainly on schema text, but the description amplifies the high-risk cases without restating the obvious.
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 opens with a precise verb+resource: 'Change a post that is still QUEUED' and enumerates every kind of change (time, caption, media, channels, destination) plus the critical exclusion that published posts are handled elsewhere. It explicitly contrasts with post_edit and the manage_/delete_ tools, so an agent can distinguish reschedule_post from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly when to use it (posts that are still QUEUED), how to get the id (list_scheduled), and explicitly routes published posts to manage_meta_post / manage_linkedin_post / delete_x_post. It also warns against trying to edit a fired post, closing the main misuse path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_adsResearch adsARead-onlyInspect
Open-ended ad research that needs JUDGMENT across platforms — comparisons, "what angle is working", "who else is doing this", anything where the right sources are not known up front. It is an agentic loop (several rounds of library pulls plus a written synthesis) and typically takes 30-60 seconds, so it is the WRONG tool for a question that names its own answer. For one named brand’s live ads use pull_competitor_ads; for one keyword or one advertiser on Meta use search_meta_ads — both are a single call and return in a few seconds. Spends LLM tokens + ScrapeCreators credits.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | brand name or profile object to tailor the research to; omit to use the workspace’s saved brand | |
| query | Yes | what to research, e.g. "the longest-running protein-pancake ads on Meta" |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds valuable behavioral context: it is an agentic loop requiring multiple pulls, takes 30-60 seconds, and spends LLM tokens and credits. This exceeds annotation coverage without contradicting it.
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 dense but every sentence contributes: purpose, examples, latency, cost, and explicit alternative routing. It is front-loaded with the core function and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, agentic research tool, the description covers the essential decision factors: open-ended scope, judgment needed, alternatives, time cost, token/credit cost, and the written-synthesis output. No critical information is missing 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 100% for both parameters, so the schema fully documents them. The description implies query is the subject and brand tailors research, but adds no syntax or formatting beyond the schema. 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?
The description clearly states this is open-ended ad research requiring judgment, with concrete examples of query types. It explicitly contrasts with siblings like pull_competitor_ads and search_meta_ads, making the tool easy to distinguish.
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 explicit when-to-use and when-not-to-use guidance, including specific alternative tools for named-brand and single-keyword queries. Also states it is the wrong tool for self-answering questions, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_scheduledRetry a failed scheduled postAInspect
Send a post that FAILED again. A scheduled post fans out across its channels INDEPENDENTLY, so a failure is usually PARTIAL — LinkedIn 401s while Instagram published fine — and this re-fires ONLY the channels that did not succeed by default (list_scheduled reports them as retryable). It re-queues the same content as a NEW post that goes out RIGHT AWAY — the queue picks it up on its next pass, within seconds — and the original keeps its failure record so the history still shows what went wrong. Naming a channel that already published is REFUSED rather than quietly posting a second time. Two independent belts stop a double-post: a channel that genuinely published can only REPLAY (nothing is posted), and a channel whose outcome is UNRESOLVED — the platform timed out and may be holding the post — refuses with that reason instead of guessing. Retry after fixing the cause — and you can fix it IN THIS CALL: pass boardId, pageId, linkedinOrganizationId, locationId, message or captions to correct the value that failed, and the corrected post is re-validated exactly like a fresh schedule. That matters because the commonest cause is a field, not an outage: a Pin aimed at the wrong board fails identically however many times it is re-sent. Anything you do not name is copied from the original. To send the same thing again ON PURPOSE, use duplicate_scheduled.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | hold the retry until a later time — ISO timestamp or epoch milliseconds. Leave it out to retry immediately, which is almost always what you want. A time you name here must be at least a minute from now, exactly like any other scheduled post. | |
| id | Yes | the scheduled post id from list_scheduled | |
| chatId | No | CORRECT THE TELEGRAM DESTINATION on retry — the @username or numeric id of the chat. A post aimed at a chat the bot is not in fails every time it is retried until this changes. | |
| pageId | No | CORRECT THE PAGE on retry — which connected Facebook Page (and its linked Instagram/Threads) publishes, from list_meta_pages. | |
| boardId | No | CORRECT THE BOARD on retry — the Pinterest board the Pin goes on, from list_pinterest_boards. A Pin aimed at a board Pinterest refuses fails the same way on every retry until this is changed. | |
| message | No | CORRECT THE CAPTION on retry — use this when the original was refused for length or content. Anything not named here is copied from the original post. | |
| captions | No | CORRECT ONE CHANNEL’S CAPTION on retry, e.g. { "x": "..." } when only that channel refused the text. | |
| channels | No | retry only these channels (default: every channel that did not publish) | |
| locationId | No | CORRECT THE LISTING on retry — which Google Business Profile location, e.g. "locations/123" from list_business_locations. | |
| allowDuplicate | No | ONLY for a channel you have checked by hand and confirmed the post is genuinely NOT there. It bypasses the double-post protection and can publish a second public copy, so never set it to work around a refusal you have not investigated. | |
| linkedinOrganizationId | No | CORRECT THE LINKEDIN AUTHOR on retry — the company Page id from list_linkedin_pages. Set it to an empty string to fall back to the personal profile. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description goes far beyond by explaining the re-queue mechanics (new post, immediate pickup), preservation of the original failure record, double-post protection with two independent belts, and refusal for unresolved outcomes. It also discloses the side-effect of publishing a new post, consistent with openWorldHint. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but every sentence serves a purpose given the tool's complexity (11 parameters, partial failures, double-post protection). It is front-loaded with the core action and then logically progresses through failure modes, correction, and alternatives. It could be slightly trimmed, but it remains efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters and intricate retry semantics, the description covers all critical context: partial failures, retryable status from list_scheduled, default channel behavior, refusal of published channels, unresolved outcome handling, and re-validation of corrected fields. It also references list_scheduled and duplicate_scheduled for related tools. No output schema exists, but the description sufficiently communicates expected effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter already has a description. The description adds meaning by grouping correction parameters (boardId, pageId, linkedinOrganizationId, locationId, message, captions) and explaining the default behavior for 'channels'. It also clarifies the allowDuplicate bypass and its risk, and the semantics of linkedinOrganizationId empty string fallback. This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource: 'Send a post that FAILED again.' It clearly distinguishes itself from duplicate_scheduled by explicitly naming the alternative: 'To send the same thing again ON PURPOSE, use duplicate_scheduled.' It also explains the partial-failure nuance, making the tool's specific scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('Retry after fixing the cause') and when-not-to-use ('Naming a channel that already published is REFUSED'), plus the alternative tool (duplicate_scheduled) for intentional reposting. It even details the default channel selection behavior, leaving zero ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_post_refillRun the posting refillAInspect
Run the refill NOW instead of waiting for its daily turn. DRY BY DEFAULT: it returns the exact posts it WOULD queue — the caption, the creative, the channels and the per-channel visibility — without queueing anything or spending anything on creative. Pass dryRun:false to actually queue them. SHOW THE PREVIEW TO THE USER BEFORE EVER PASSING dryRun:false; these go onto real public accounts. Every caption is screened against the brand’s own voice rules and a failing one is dropped, so a plan can legitimately come back shorter than the cadence — the reason is in the notes.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | plan even while the refill is switched off — useful for showing someone what it would do before they turn it on. Combined with dryRun:false it still respects a stored dryRun. | |
| dryRun | No | default TRUE (preview only). false actually queues the posts. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is exceptionally transparent about behaviors beyond the annotations. It explicitly states that the tool is dry by default (does not queue or spend), that passing dryRun:false actually queues to real public accounts, and that captions are screened against brand voice rules with possible drops. It also notes the plan can return shorter than expected with reason in notes. This fully discloses side effects and conditional behavior, complementing the sparse annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single block but well-structured, front-loading the core action and then explaining the dry-run behavior, warning, and screening process. Each sentence adds necessary context; nothing is redundant. It is slightly longer than necessary, but every clause serves a purpose (safety, behavior, edge cases), so it earns a 4 rather than a 5 for perfect conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description fully explains the return value: 'the exact posts it WOULD queue — the caption, the creative, the channels and the per-channel visibility.' It also covers the scenario of dropped posts due to voice rules and notes the reason. It covers the dry-run default, the safety warning, and the stored dryRun interaction. This is comprehensive for a tool with only two parameters and no nested objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are already well described in the schema (100% coverage). The description adds extra value by explaining the interaction between force and dryRun in the force parameter's own description ('Combined with dryRun:false it still respects a stored dryRun'). This clarifies a subtle behavior not obvious from the schema alone. Since schema coverage is high, the baseline is 3, but the added interaction nuance raises it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Run the refill NOW instead of waiting for its daily turn.' It uses a specific verb (run) and resource (posting refill), and distinguishes itself from waiting for the scheduled turn. It implicitly differentiates from related sibling tools like set_post_refill or backfill_posts by emphasizing immediate execution vs. configuration or bulk backfill.
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 strong procedural guidance: 'SHOW THE PREVIEW TO THE USER BEFORE EVER PASSING dryRun:false' and explains the dry-run default. It also implies when to use it (when you want to bypass the daily schedule). However, it does not explicitly list alternative tools or conditions when this should not be used, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_creatorSave a creatorAInspect
Add a portrait to this workspace’s reusable CAST so the SAME person can star in future ads — the headless twin of the app’s + ▸ Pick a creator ▸ save. Pass the portrait’s public url (a generate_image render of a person, a headshot, any public photo) plus a name to call them by; from then on list_creators returns them and their url can be re-passed to generate_avatar / generate_video / recast_motion. Saving is FREE and renders nothing. LIKENESS — source says what the portrait IS: leave it "generated" for an AI-made person, and use "upload"/"social" ONLY for a REAL person. Pass consented:true only when the user has told you that person agreed to their likeness being used; never assert that on their behalf.
| Name | Required | Description | Default |
|---|---|---|---|
| look | No | their canonical wardrobe/appearance in words — reused to hold the look steady across ads | |
| name | Yes | what to call this creator (e.g. “Sarah”) — list_creators and the app’s picker match on it | |
| image | Yes | public https url of the portrait (an existing render’s url, or any public photo). Not a local file path — upload it with upload_file first and save the url that returns | |
| poses | No | up to 4 extra full-body / angle plates of the SAME person (public urls) — they make a wider shot hold the identity | |
| voice | No | a default voice name for this persona (engines + voices are in hermoso_capabilities) | |
| source | No | "generated" (default) = an AI-made person; "upload" / "social" = a REAL person | |
| consented | No | REAL people only: the user has confirmed that person consented to their likeness being used in ads |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false (readOnlyHint, openWorldHint, idempotentHint, destructiveHint), so the description carries the full burden. It discloses cost ('FREE'), side effects ('renders nothing'), and critically explains the consent semantics: 'never assert that on their behalf.' It also clarifies the source field's meaning and warns against using 'upload'/'social' for non-real people. This exceeds what annotations provide and is highly transparent.
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 dense paragraph, but it is well-organized: it starts with the core purpose, then input instructions, then a clear 'LIKENESS' section. Every sentence contributes new information (cost, side effects, source semantics, consent). It is not verbose or redundant, though it is long. The structure front-loads the primary use case, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, no output schema) and minimal annotation coverage, the description is remarkably complete. It covers the main workflow, input requirements (public url, name), reuse via list_creators and generate functions, the distinction between generated and real people, and the critical consent requirement. There's no output schema, so return value explanation isn't needed. It leaves no essential gap 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?
With 100% schema description coverage, the baseline is 3, but the description adds substantial meaning beyond the schema. For 'image', it clarifies a public https url is required and specifically warns 'Not a local file path — upload it with upload_file first'. For 'source', it explains what each enum value means in practice. For 'consented', it states 'never assert that on their behalf'. These annotations elevate the parameter guidance beyond dry field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Add a portrait to this workspace’s reusable CAST' and explains the outcome ('the SAME person can star in future ads'). It differentiates from sibling tools like list_creators and delete_creator by describing the exact action and its effect, and even references the app's UI equivalent ('the headless twin of the app’s + ▸ Pick a creator ▸ save'). This is unambiguous and distinct.
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 clearly implies when to use: when you want to make a person reusable across ads. It explains the inputs (public url + name) and the consequences (list_creators returns them, urls can be reused). It also gives a strong behavioral cue by stating 'Saving is FREE and renders nothing', which helps decide whether to call it. However, it does not explicitly state when NOT to use it or name direct alternatives beyond the app equivalent, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_pinterest_pinSave a Pin to another boardAInspect
Save an existing Pin onto another of the account’s boards. This is the GENERALLY AVAILABLE way to get a Pin onto the right board — unlike update_pinterest_pin, which Pinterest keeps in a limited beta — so reach for it first when a Pin is on the wrong board. It COPIES rather than moves: Pinterest’s save endpoint creates a new Pin and the original stays where it is, so delete that one with delete_pinterest_pin if it should not be in two places. Let the USER pick the destination board (list_pinterest_boards) — a Pin on the wrong board is a public mistake. 0 credits. Needs Pinterest connected.
| Name | Required | Description | Default |
|---|---|---|---|
| pinId | Yes | numeric Pin id | |
| boardId | Yes | the board to save it to, from list_pinterest_boards — the user picks, never guess | |
| boardSectionId | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false, but the description adds critical behavioral detail: this tool COPIES rather than moves, creating a new Pin and leaving the original intact. It also discloses '0 credits' and the 'Pinterest connected' prerequisite. These go well beyond the structured annotations and prevent the agent from assuming a move semantics.
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 slightly long but every sentence carries meaning: core action, sibling contrast, copy semantics, deletion follow-up, user-choice instruction, cost, and connection requirement. It front-loads the purpose and is logically ordered, but could be tightened without losing substance.
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 mutating operation with no output schema, the description covers all necessary context: what it does, how it differs from alternatives, the copy side-effect, the required user involvement, cost, and connectivity. It also indirectly implies idempotency risk (not idempotent) by stating it creates a new Pin, which aligns with idempotentHint=false. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (2 of 3 params described). The description enriches pinId as 'numeric Pin id' and boardId with a usage directive ('from list_pinterest_boards — the user picks, never guess'), which adds guidance beyond the schema. However, boardSectionId is left entirely undocumented in both schema and description, a notable gap given it's an optional third parameter.
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 opens with a precise action ('Save an existing Pin onto another of the account’s boards') and immediately differentiates from the sibling update_pinterest_pin by noting the beta limitation. It clearly identifies the resource (Pin) and destination (board), making its purpose unambiguous and distinct from nearby tools like delete_pinterest_pin or list_pinterest_boards.
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 explicitly states when to use this tool: 'reach for it first when a Pin is on the wrong board'. It contrasts with update_pinterest_pin (limited beta) and warns against guessing the board, directing the agent to list_pinterest_boards and to let the user choose. It also advises using delete_pinterest_pin if a copy is unwanted, covering the alternative path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_playbookSave a playbookAInspect
Save a reusable PLAYBOOK — the strategy takeaways worth re-running: the hooks that work, the angles, the formats, and the concrete plays. Use it to keep what a competitor_teardown or mine_angles just found, or to bank a creative you want to repeat. Lands in the same Playbooks library the web app lists, runs and manages. Distinct from save_skill (a directive applied to every ad) and from the swipefile (raw saved creative). Free.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | the playbook headline — what it is, in a few words | |
| brand | No | which brand this is for (defaults to the workspace brand) | |
| hooks | No | the opening hooks worth reusing, verbatim | |
| plays | No | the concrete plays to run ({title, detail}) — the actionable half | |
| angles | No | the persuasion angles ({title, detail}) | |
| source | No | where it came from, e.g. “teardown · Ridge” | |
| formats | No | the formats/recipes this plays best in (e.g. ugc_selfie, cinematic, static) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (all false), so the description carries the burden. It adds useful context: the destination library ('Lands in the same Playbooks library the web app lists, runs and manages') and that it is 'Free' (no credit cost). However, it does not clarify whether saving with an existing name overwrites, creates a new entry, or if it is idempotent. This is a notable gap for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long but each sentence earns its place: it defines the resource, gives usage scenarios, states the destination, and draws contrasts with alternatives. It is slightly longer than necessary but well-organized and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter write tool with no output schema, the description covers the essential context: what a playbook is, when to use it, where it lands, whether it costs credits, and how it differs from related tools. The only missing piece is whether it creates a new entry each time or updates an existing one, which an agent would need to know 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 100%, so all 7 parameters already have descriptions. The tool description broadly refers to 'hooks, angles, formats, concrete plays' which mirrors the schema, but adds no new syntax or format details beyond what the schema provides. It stays at the baseline of 3 without further elaboration.
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 ('Save') and a specific resource ('reusable PLAYBOOK') and defines what a playbook is with concrete components (hooks, angles, formats, plays). It explicitly distinguishes itself from save_skill and the swipefile, making its purpose unmistakable even among many 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 description gives clear when-to-use guidance: 'Use it to keep what a competitor_teardown or mine_angles just found, or to bank a creative you want to repeat.' It also states what it is not for by naming save_skill and the swipefile as alternatives, leaving no ambiguity about choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_skillSave a skillAInspect
Save a reusable custom SKILL — a named creative directive/playbook applied to future ads (a hook formula, a UGC recipe, a compliance rule, a named specialist persona like “our founder-story style” or “short-form ad strategist”). Distill an imperative, self-contained directive. Merges into the workspace Skills library (list_skills shows built-ins + your custom skills).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | short skill name, e.g. “Founder-story hook” | |
| directive | Yes | the full instruction the skill applies when used (1–6 sentences, imperative) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false, destructiveHint=false, etc., which offer little. The description adds behavioral context by stating that the skill 'Merges into the workspace Skills library', implying a persistent, non-destructive addition. It also instructs to 'Distill an imperative, self-contained directive', providing guidance on the content. However, it does not disclose details like overwrite behavior or reversibility, which would be useful for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and front-loads the core definition of a skill. It is informative without being excessively verbose. Each sentence adds value: definition, guidance on creating the directive, and the destination (library). Could be slightly more concise, but current structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and no output schema, the description is complete enough for an agent to call it correctly. It explains what to save, how to write the directive, and where it ends up. It lacks details on error handling or overwrite semantics, but these are not critical for a straightforward save operation given the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters (name and directive) with descriptions, achieving 100% coverage. The description adds meaning beyond the schema by explaining what a skill is (creative directive/playbook) and providing examples, which helps the agent formulate the directive appropriately. This elevates it above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Save') and resource ('reusable custom SKILL') and clearly distinguishes it from related tools like list_skills and delete_skill. It explains what a skill is (creative directive/playbook) with concrete examples, so an agent can understand exactly what to store without ambiguity.
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 clear context for when to use this tool: when saving a new custom skill. It mentions that list_skills displays built-ins plus custom skills, indirectly indicating where the saved item will appear. However, it does not explicitly state alternatives or exclusions (e.g., 'use get_skill to retrieve, delete_skill to remove'), but the purpose is self-evident and no direct sibling competes for the same action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_to_driveSave file(s) to Google DriveAInspect
Save a Hermoso render — or ANY file — into the user’s connected Google Drive. Pass a Hermoso render URL as url (or urls[] for several); for a local/external file, call upload_file first and pass the url it returns. Optional folder (created if new) + name. Returns the Drive file(s) with a webViewLink. Needs Google Drive connected (Settings ▸ Connectors ▸ Google Drive — one connection covers Drive, Sheets and Docs). NOTE: Hermoso uses the drive.file scope, so it reaches ONLY the files it created plus any the user explicitly handed over with the Google file picker in the app — never their whole Drive.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | a single Hermoso render URL to save | |
| name | No | file name (single save) | |
| urls | No | several render URLs (up to 20) to save in one call | |
| folder | No | Drive folder name to save into (created if new) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, etc.), the description discloses that the tool returns a webViewLink and, critically, explains the drive.file scope restriction—that it only accesses files it created or explicitly granted. This is valuable context not available in structured fields and contradicts nothing.
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-loaded with the primary purpose, then progressively adds necessary details (file sources, connector, scope). Every sentence contributes to correct invocation without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's complexity: input types, the upload_file workaround, folder behavior, return value, connector setup, and the significant drive.file scope limitation. With no output schema, it still conveys the return format (webViewLink). Nothing essential for correct use is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds meaningful semantics: it clarifies that url accepts a Hermoso render URL, urls[] for multiple, and that for local/external files one must call upload_file first and pass its returned URL. It also explains folder creation and name usage, beyond the terse schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (save) and resource (Google Drive), and specifies it handles Hermoso renders or any file. It distinguishes from siblings like save_to_onedrive by naming Google Drive, and from upload_file by describing the prerequisite flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when to use this tool: passing a render URL directly or uploading a local file first via upload_file. It also notes the connector requirement and the scope limitation, giving clear conditions for use without needing to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_to_onedriveSave file(s) to OneDriveAInspect
Save a Hermoso render — or ANY file — into the user’s connected Microsoft OneDrive. Pass a Hermoso render URL as url (or urls[] for several); for a local/external file, call upload_file first and pass the url it returns. Optional folder (created if new) + name. Returns the OneDrive file(s) with a webViewLink. Needs OneDrive connected (Settings ▸ Connectors ▸ OneDrive).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | a single Hermoso render URL to save | |
| name | No | file name (single save) | |
| urls | No | several render URLs (up to 20) to save in one call | |
| folder | No | OneDrive folder name to save into (created if new) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only, non-idempotent, non-destructive. The description adds critical behavioral context: it mentions the prerequisite ('Needs OneDrive connected'), the side effect of folder creation if new, and the return value ('Returns the OneDrive file(s) with a webViewLink'). This goes beyond the sparse annotations and fully discloses relevant behavior with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of four sentences, tightly packed with essential information. It leads with the core purpose, immediately clarifies the two usage modes, and ends with the prerequisite. No redundant or filler sentences; every clause contributes to correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity (4 optional parameters, no output schema), the description covers all critical aspects: source types, the upload_file dependency, folder creation, return value (webViewLink), and setup prerequisite. It also implies error context through the explicit connection requirement. There are no obvious gaps that would mislead an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameter descriptions (100%), so baseline is 3. The description adds semantic value by explaining the workflow: how url vs urls[] map to render vs. multiple, and the required integration with upload_file for local files. It also clarifies the folder behavior ('created if new'), which is slightly more detailed than the schema. This elevates it above baseline but isn't exhaustive—e.g., it doesn't explain default naming if 'name' is omitted, though that's minor given 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 states a specific verb ('Save') and resource ('file(s) into the user’s connected Microsoft OneDrive'). It clearly distinguishes from siblings like save_to_drive by explicitly naming OneDrive and by describing the two supported source types (Hermoso render URL or pre-uploaded local file). It also names the relevant alternative (upload_file) for local files, making the purpose 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?
The description provides explicit when-to-use guidance: pass a Hermoso render URL for direct saves, and for local/external files, instructs calling upload_file first and passing the returned URL. It also notes the optional folder with auto-creation and the need for OneDrive connectivity. This is a clear usage path with an explicit alternative (upload_file), satisfying the 'when/when-not/alternatives' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_to_swipefileSave ads to the swipefileAIdempotentInspect
Save one or more ads/creatives to a named SWIPEFILE collection, creating the collection if it does not exist — the headless twin of the ♥ on every ad card in the web app. Use it whenever research turns up something worth keeping: a competitor ad from search_meta_ads / pull_competitor_ads, an organic post, or one of your own renders. Saved ads persist to the workspace board the web Swipefile tab shows, and feed the taste signal every future ad is planned against. De-dupes: re-saving the same ad (same key/link/media) MOVES it into the named collection instead of duplicating it. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | the ads to save | |
| collection | Yes | the collection name — an existing one, or a new one to create |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds detail beyond the idempotentHint annotation by explaining that re-saving MOVES the ad into the named collection rather than duplicating, and clarifies collection auto-creation and persistence to the workspace board. Consistent with readOnlyHint=false and destructiveHint=false, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is 5 sentences, front-loads the core action, then gives usage context, persistence, and dedup behavior, ending with 'Free'. No wasted words; each sentence adds distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what, when, behavior, and persistence. Lacks explicit error/return semantics, but no output schema exists and annotations cover safety. Enough for an agent to call it correctly for typical saving scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already has detailed descriptions (e.g., `key` explains derived idempotency). The description reinforces the key/link/media dedup logic but does not add new parameter-specific meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Save) and resource (ads/creatives to a named SWIPEFILE collection), with explicit mention of creating the collection if it does not exist. Clearly distinguishes itself as the headless twin of the web app's heart icon and contrasts with reading tools like list_swipefile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: 'Use it whenever research turns up something worth keeping', and lists concrete sources (competitor ads from search_meta_ads / pull_competitor_ads, organic posts, own renders). Also provides behavioral guidance on re-saving moving instead of duplicating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_postSchedule a post for laterAInspect
Queue a post to go out at a future time, to one or more connected channels at once (facebook, instagram, threads, tiktok, youtube, linkedin, x, pinterest, google_business). A MULTI-SLIDE creative goes in imageUrls[] as a CAROUSEL, in order — never schedule just its first slide. This is how you run a content calendar: schedule now, and Hermoso publishes at the time you set — you do not need to be around. Either name the exact time in at, or pass useQueue:true to take the brand’s next free POSTING SLOT (its saved posting times, skipping any already occupied) — that is what “just queue it” means and it saves the user picking a minute. Pass a Hermoso render URL as imageUrl/videoUrl (or an upload_file URL for external media). PINTEREST AND YOUTUBE ALSO SHOW A TITLE: pass title (max 100 chars) — omit it and Hermoso derives one from the caption’s first sentence rather than truncating the caption mid-word, which is what a Pin headline used to be. A YOUTUBE ITEM’S CAPTION IS ITS TITLE, NOT ITS DESCRIPTION: pass description (≤5000 chars) for the box under the video — the links, the CTA and everything YouTube search reads — plus tags (up to 30). Omit them and the upload lands with an empty description, which is not recoverable by the time anyone notices. Use captions to give each channel its own wording; anything not listed falls back to message. PER-CHANNEL SETTINGS, all carried straight through to the real publisher: TIKTOK takes the paid-partnership disclosure (brandedContent) and the own-brand one (yourBrand) — set them whenever the post is commercial, they are compliance declarations — plus disableComment and, on a video, disableDuet / disableStitch / coverTimestampMs. GOOGLE BUSINESS takes topicType (STANDARD / EVENT / OFFER / ALERT) with event and offer, and a real actionType button instead of the hard-coded Learn more. X takes a whole thread, a poll, replySettings and madeWithAi. INSTAGRAM takes collaborators — up to 3 usernames invited to CO-AUTHOR the post, which puts it on their profile too once they accept (the invite is sent when the post fires, and is pending until then). Channels are attempted INDEPENDENTLY, so one failing channel never blocks the others. SOME CHANNELS MUST BE TOLD WHICH ACCOUNT, and Hermoso never guesses one: a Pinterest pin needs boardId (list_pinterest_boards) or it is refused outright; a LinkedIn COMPANY PAGE post needs linkedinOrganizationId (list_linkedin_pages) and without it the post goes to the connected person’s own profile; a brand with more than one connected Facebook Page needs pageId (list_meta_pages) and an account managing more than one Google Business listing needs locationId (list_business_locations) — resolve those FIRST and let the user pick, because with several to choose from and no id the post is refused when it fires, hours later. A scheduled post GOES LIVE PUBLICLY by default on every channel — that is what scheduling means, and nothing is ever quietly downgraded to a draft or an unlisted upload. If the user genuinely wants something staged instead, set visibility (or visibilityByChannel for just one channel): ‘public’ (default, live) · ‘unlisted’ (YouTube only — link-only) · ‘private’ (YouTube private, or TikTok posted SELF_ONLY) · ‘draft’ (TikTok drafts, or an unpublished Facebook Page post for a human to publish). Ask for a weaker visibility only if the user asked for one. If a channel cannot do the visibility requested, the call is REFUSED right now with the reason, rather than posting something weaker later. Most channels publish publicly and nothing else: only YouTube has unlisted/private, only TikTok has private/draft, and only Facebook has draft.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | when to post — ISO timestamp (2026-08-01T09:00:00Z) or epoch milliseconds. Must be in the future, at most 365 days out. Give this OR useQueue, never both. | |
| hook | No | WHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works. | |
| link | No | a link to attach (Facebook) | |
| poll | No | X — attach a poll: {options:["…","…"], durationMinutes}. 2–4 options of at most 25 characters each; voting runs 5–10080 minutes (7 days), default 1440. X makes a poll MUTUALLY EXCLUSIVE with media, so an item carrying an image or video is refused — schedule the poll as its own X-only post. | |
| tags | No | YOUTUBE — up to 30 search tags for the video (plain words, no #). | |
| event | No | GOOGLE BUSINESS — required for an EVENT or OFFER post: {title, startDate:"YYYY-MM-DD", endDate, startTime:"HH:MM", endTime}. `title` is the EVENT’s headline, a different thing from the post `title` (which is the Pinterest/YouTube one). Google documents its TimeInterval as needing all four date/time parts to be valid, so send the times whenever you know them. | |
| offer | No | GOOGLE BUSINESS — OFFER posts only: {couponCode, redeemOnlineUrl, termsConditions}. redeemOnlineUrl is where an offer actually sends people, since the button link is ignored on an Offer. | |
| title | No | PINTEREST / YOUTUBE — the headline, max 100 characters. Pinterest shows it in search and under the pin; YouTube requires one. Leave it out and Hermoso derives one from that channel’s caption (first sentence, cut on a word boundary, trailing hashtags dropped) — set a real one whenever the caption does not open with a usable headline. | |
| chatId | No | TELEGRAM — REQUIRED whenever telegram is a channel: WHICH chat, group or channel the bot posts to. A public channel’s @username (@hermosoai) or the numeric id (a group is negative; a supergroup or channel starts with -100). There is no default and there cannot be one — the Telegram Bot API publishes no method that lists a bot’s chats — so scheduling telegram without one is refused up front. list_telegram_chats finds ids for chats that have messaged the bot in the last 24 hours. | |
| pageId | No | FACEBOOK / INSTAGRAM / THREADS — which connected Facebook Page (and its linked Instagram) publishes, from list_meta_pages. Needed when the brand has more than one Page connected; with several and no id the post is refused at fire time rather than sent from the wrong brand. | |
| thread | No | X — publish a THREAD, one entry per post, each replying to the one before (at most 25, each ≤280 characters). It REPLACES the X caption: with a thread set, `message`/`captions.x` is not sent to X at all. A thread cannot carry a poll. | |
| altText | No | ACCESSIBILITY — the screen-reader description of the attached image. ONE STRING describes the picture; on a CAROUSEL it describes EVERY slide. Pass an ARRAY of strings instead to describe each slide separately, aligned to the slide order — that is strictly better on a multi-slide post, because one sentence read out over six different pictures is wrong for five of them. More descriptions than pictures is refused rather than dropped. Write one whenever the post carries an image: describe what is IN the picture, never a repeat of the caption, which a screen reader already reads. CARRIED BY: X (max 1000, one per media), Pinterest (max 500 — PIN-LEVEL only, since its API has no per-item alt text, so slide 1’s description is used for the whole Pin and the result says the others were not sent), LinkedIn COMPANY PAGES (max 4086, one per slide), INSTAGRAM image posts and image slides (max 1000), FACEBOOK photos and albums, and BLUESKY, whose lexicon makes it REQUIRED on every image. The schedule is REFUSED if the LONGEST description exceeds the tightest of the channels on it, rather than truncated on the way out. NOT CARRIED, and none of these is a refusal — the post still publishes, just undescribed there, and the per-channel result says which: TikTok (its photo post has no alt field at any level), a THREADS CAROUSEL, an INSTAGRAM Reel or video slide, and a LinkedIn PERSONAL-profile post. | |
| boardId | No | PINTEREST — REQUIRED whenever pinterest is a channel: the board the Pin goes on, from list_pinterest_boards. The user picks it; a Pin on the wrong board is a public mistake. Scheduling pinterest without one is refused immediately. | |
| message | No | the caption/text used for every channel unless overridden in captions | |
| subject | No | WHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group. | |
| captions | No | per-channel caption overrides, e.g. { "instagram": "…", "threads": "…" } — platforms want different lengths and hashtag conventions | |
| channels | Yes | one or more channels to post to at that time | |
| imageUrl | No | a Hermoso render URL (a /generated path, or what upload_file returned), a data: URI, or a public https URL. NOTE: only Facebook/Instagram/Threads accept an arbitrary public URL — X, TikTok, YouTube, LinkedIn, Pinterest and Google Business re-host the bytes and REFUSE anything that is not a Hermoso render, so run an external file through upload_file first and schedule that url. | |
| timezone | No | IANA zone for the queue, e.g. "America/New_York" — only meaningful with useQueue, and it overrides the brand’s saved zone for this one post. A saved slot of "09:00" is a WALL-CLOCK time, so the zone is what turns it into an instant; without either the brand’s saved zone or this, the queue resolves in UTC. | |
| topicTag | No | THREADS ONLY — one topic tag for the post, without the leading #. | |
| useQueue | No | instead of naming a minute, drop this into the brand’s POSTING QUEUE: Hermoso takes the earliest of its saved posting times that is still free (skipping any slot another queued post already holds). This is the natural answer to “just queue it” / “post it at my next opening”. Mutually exclusive with `at` — passing both is refused rather than one being silently preferred. If the brand has no posting times set, or every slot for the next 90 days is taken, it is refused by name and nothing is scheduled. | |
| videoUrl | No | a Hermoso render URL (a /generated path, or what upload_file returned), a data: URI, or a public https URL — required for youtube, and for tiktok unless you pass an imageUrl (TikTok takes a photo post too). Same origin rule as imageUrl: everything except Facebook/Instagram/Threads REFUSES a non-Hermoso URL, so pass external video through upload_file first. | |
| imageUrls | No | CAROUSEL — an ORDERED list of image URLs to publish as ONE swipeable post on every channel that supports it (Instagram 2–10, Threads 2–20, Facebook, LinkedIn company Pages 2–20, Pinterest 2–5, TikTok up to 35 as a photo post). Use this whenever the creative is a multi-slide deck: a scheduled post carrying only slide 1 of a “1/6 · SWIPE” set is a broken ad that nobody is watching when it fires. THE ORDER IS THE PRODUCT. A channel on this schedule that cannot do carousels — X, YouTube, Google Business Profile — is REFUSED NOW, with the reason, so you can drop it or give it its own single image; it is never quietly downgraded hours later. | |
| slideText | No | PINTEREST CAROUSEL ONLY — per-slide title / description / link, aligned to slide order. Every other platform takes ONE caption for the whole carousel. | |
| topicType | No | GOOGLE BUSINESS — the KIND of Post. STANDARD is the default; EVENT and OFFER both REQUIRE `event` (title + start date), and OFFER also takes `offer`. | |
| trialReel | No | INSTAGRAM TRIAL REEL — publish this Reel to NON-FOLLOWERS ONLY at first, so a hook can be tested on a cold audience without spending it on the people who already follow the brand; Instagram shows it to followers only if it graduates. MANUAL = the creator graduates it by hand in the Instagram app; SS_PERFORMANCE = Instagram graduates it automatically if it performs. REELS ONLY and INSTAGRAM ONLY: an image, a carousel, or a Facebook/Threads channel is REFUSED BY NAME rather than quietly published as an ordinary post — a trial that silently goes to every follower is the exact opposite of what was asked for, so Instagram must be one of the `channels` and the item must carry a video. Omit it for a normal Reel. | |
| yourBrand | No | TIKTOK — the OWN-BRAND disclosure (brand_organic_toggle): true when the post promotes the creator’s own business. TikTok asks for at least one of this and brandedContent once a post is commercial. | |
| actionType | No | GOOGLE BUSINESS — the call-to-action button. Every button except CALL needs `link` (CALL dials the number on the listing and takes none). Google IGNORES the button link on an OFFER post — put the destination in offer.redeemOnlineUrl. Omit and a post carrying a link gets LEARN_MORE. | |
| locationId | No | GOOGLE BUSINESS PROFILE — which listing, e.g. 'locations/123' from list_business_locations. Needed when the account manages more than one storefront; it is never chosen for the user. | |
| madeWithAi | No | X — X’s AI-media label on this post. Opt-in: X treats it as the poster’s own claim about their media, so it is never set on the user’s behalf. | |
| visibility | No | how it should be published — DEFAULT 'public' (live). Only pass something else if the user explicitly asked to stage/hide it. Not every channel supports every value; an impossible combination is refused when you schedule it, with the reason. | |
| description | No | YOUTUBE — the video DESCRIPTION, max 5000 characters: the box under the video carrying the links, the CTA and everything YouTube search reads. It is NOT the caption — a scheduled YouTube item’s text becomes its TITLE — so omitting this publishes the video with an empty description. | |
| disableDuet | No | TIKTOK VIDEO ONLY — block Duets. TikTok’s photo-post API has no Duets, so this is refused on a photo/slideshow item rather than silently dropped. | |
| quotePostId | No | THREADS ONLY — the id of the Threads post this one quotes. | |
| countryCodes | No | THREADS ONLY — two-letter country codes to limit who can see the post. Omit to show it everywhere. | |
| privacyLevel | No | TIKTOK — WHICH PRIVACY LEVEL the post goes out at, in TikTok’s own vocabulary. TikTok requires the USER to choose this from the levels their own account allows: call tiktok_creator_info, show them the real options, and pass back the one they picked — never a default and never a guess, which TikTok refuses at init. Omit it and the post falls back to the coarse `visibility` (private → SELF_ONLY, otherwise PUBLIC_TO_EVERYONE), which cannot express MUTUAL_FOLLOW_FRIENDS or FOLLOWER_OF_CREATOR at all. It must agree with the TikTok visibility (SELF_ONLY is the private one) and it is refused on a TikTok DRAFT, which carries no post info. | |
| replyControl | No | THREADS ONLY — who may reply. Omit for Threads' own default (everyone). | |
| collaborators | No | INSTAGRAM — a COLLAB post: up to 3 Instagram usernames invited to CO-AUTHOR it, so it appears on their profile too once they accept, with both handles in the header and the engagement shared. Handles only ("hermosoai"); a leading @ is fine. Instagram must be one of the `channels` — asking for collaborators on a schedule Instagram is not on is REFUSED now rather than discovered when it fires, and the other channels in a mixed schedule simply publish without co-authors. THE INVITE IS SENT WHEN THE POST FIRES, not when you schedule it, and it is PENDING until the other account accepts in their notifications; check with instagram_collaborators afterwards rather than telling the user it is live on both profiles. | |
| disableStitch | No | TIKTOK VIDEO ONLY — block Stitches. Same photo-post rule as disableDuet. | |
| replySettings | No | X — who may reply. Omit for everyone, which is the right default for a brand post. | |
| brandedContent | No | TIKTOK — the PAID-PARTNERSHIP disclosure (TikTok’s brand_content_toggle): true when this post promotes a THIRD-PARTY business. It is a compliance declaration, not a preference — set it whenever the post is sponsored. TikTok only accepts branded content on a public or friends-only post, so it cannot ride a private/SELF_ONLY or draft TikTok item and the schedule is refused with the reason. | |
| disableComment | No | TIKTOK — turn comments off on this post. | |
| linkAttachment | No | THREADS ONLY — a full http(s) URL rendered as a link card. This is the ONLY way a Threads post carries a destination, and Threads attaches it to TEXT-ONLY posts (a post with media cannot also carry a card). | |
| coverTimestampMs | No | TIKTOK VIDEO ONLY — which frame TikTok uses as the cover, in milliseconds from the start. Omit and TikTok uses the first frame. | |
| crossreshareToIg | No | THREADS ONLY — when this fires, ALSO share it to the linked Instagram account as a STORY. Refused on a Threads carousel. No confirmation exists that the Story was created, so the result says it was requested. | |
| commercialContent | No | TIKTOK — the COMMERCIAL CONTENT DISCLOSURE toggle: true when the post promotes a brand, product or service at all. TikTok requires at least one of yourBrand / brandedContent alongside it, and a post declaring itself commercial without naming which kind is refused. Setting either disclosure already implies this, so it is only needed to be explicit. | |
| visibilityByChannel | No | override visibility for one channel, e.g. { "tiktok": "draft" } to go live everywhere but stage TikTok for review | |
| crossreshareDarkMode | No | THREADS ONLY — render that Instagram Story in dark mode. Needs crossreshareToIg. | |
| linkedinOrganizationId | No | LINKEDIN — publish as a COMPANY PAGE instead of the connected personal profile. The organization id from list_linkedin_pages. Omit and it posts as the person: an unset id means the profile, never “probably the company”. A Page can also carry VIDEO, which a personal profile cannot. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint false, destructiveHint false, openWorldHint true), so the description carries the full burden and does it thoroughly. It discloses that channels are attempted independently, that posts go live publicly by default, that impossible visibility requests are refused immediately, and that account-id requirements cause refusals. It also explains idempotency-like behavior (no silent downgrades) and timing of invites. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very long (likely over 2000 words) and dense, covering many channels and edge cases. It is front-loaded with the core purpose and then organized by channel, using uppercase for critical terms. However, it is verbose and contains redundancies (e.g., repeated notes about refusals and requirements). For a tool with 49 parameters, some detail is necessary, but it could be trimmed without losing value. A 4 is appropriate — effective but not perfectly 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?
Given the complexity (49 params, 11 channels, many nested objects) and no output schema, the description covers most contextual needs: per-channel requirements, fallback behavior, mutual exclusions, refusals, and how to obtain required ids. It even explains the timing of collaborator invites and cross-posting. However, it does not describe the response shape or provide confirmation details (e.g., what is returned on success, status codes, or how to check later via list_scheduled). This minor gap prevents a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (every parameter documented in schema), but the description adds substantial meaning beyond the schema. For example, `useQueue` explains mutual exclusion with `at` and the exact behavior when no slot is free; `imageUrls` clarifies carousel ordering and channel refusals; `altText` details per-slide vs global behavior and which channels carry it; `collaborators` explains the invite timing. This is far beyond a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('queue a post'), a specific resource (a future social post), and the scope ('to one or more connected channels at once'), listing all channels. It distinguishes itself from immediate single-channel post tools (post_to_x, post_to_meta, etc.) by emphasizing the scheduling and content-calendar use case. No ambiguity.
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 explicitly explains when to use this tool ('This is how you run a content calendar: schedule now') and contrasts it with alternatives like `useQueue` vs `at`, and when to stage with `visibility`. It gives conditions for when to use helper tools (list_pinterest_boards, list_linkedin_pages) and states when to ask the user. It even says 'Ask for a weaker visibility only if the user asked for one' — clear when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
score_adScore adARead-onlyInspect
Virality/performance prediction for a finished ad (image or video URL): overall score, per-dimension breakdown (scroll-stop, hook, clarity, brand/product, CTA, retention, goal fit), strengths, and the single biggest fix. Use BEFORE spending on distribution, or to rank variants.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | the ad asset URL (a /generated/ path or public URL) | |
| kind | No | 'image' (default) or 'video' | |
| intent | No | what the ad is trying to achieve, for goal-fit scoring |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, destructiveHint=false) already establish the safety profile. The description adds value by detailing what the tool computes and returns (overall score, per-dimension breakdown, strengths, the single biggest fix), giving the agent expectations beyond the annotation. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load the core purpose and output details, then provide usage guidance. No filler or redundancy. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is straightforward: one required parameter (url) with two optional ones, all documented in the schema. The description lists the result structure and gives a usage trigger. It does not mention failure modes or edge cases, but for a read-only scoring tool, this is adequate. No output schema exists, so the description's enumeration of outputs fills that 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% — url, kind, and intent each have descriptions. The tool description does not add additional meaning beyond what the schema already provides; it only mirrors the fields. With full coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Virality/performance prediction for a finished ad (image or video URL)' and lists the detailed output dimensions (overall score, per-dimension breakdown, strengths, biggest fix). It clearly distinguishes this from sibling tools like plan_ad or render_ad, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use BEFORE spending on distribution, or to rank variants.' This provides clear context for invocation. It does not name an alternative tool or give a when-not-to-use, but the timing guidance is actionable and sufficient for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrapecreators_fetchFetch ScrapeCreators endpointARead-onlyInspect
Generic ScrapeCreators escape hatch for any ALLOWLISTED long-tail endpoint the dedicated search_* tools don't cover — e.g. {path:'/v1/instagram/profile', params:{handle:'nike'}}. Allowlisted platform families: TikTok (+ TikTok Shop), Instagram, YouTube, Facebook (organic profiles/posts/events/marketplace), LinkedIn (organic posts/companies), Twitter/X, Reddit, Threads, Snapchat, Pinterest, Twitch, Bluesky, Truth Social, Rumble, Spotify, SoundCloud, GitHub, Google search, link-in-bio pages (Linktree etc.). Param names vary per endpoint (profiles use handle, keyword searches use query, Reddit uses subreddit). WARNING: returns RAW provider JSON — large and messy; prefer the dedicated search_* tools. Spends ScrapeCreators credits.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | exact SC endpoint path, e.g. '/v1/tiktok/profile' — non-allowlisted paths are rejected | |
| params | No | endpoint query params, e.g. {handle:'nike'} |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint), the description discloses that the tool returns 'RAW provider JSON — large and messy', 'Spends ScrapeCreators credits', and that non-allowlisted paths are rejected. These are non-obvious behaviors an agent needs to know before calling.
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 longer than typical, but every section earns its place: purpose, platform list, param variance, warning, and cost. Front-loaded with the core purpose and example. The structured warnings are concise. Slightly dense but justified by the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, no output schema, and generic nature, the description covers all essential aspects: platform families, param examples, rejection behavior, and credit cost. Lacks explicit response structure, but the raw JSON warning suffices. Could add a note on error handling, but overall 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?
Even though schema description coverage is 100%, the description adds valuable semantics: path format with rejection note, and param name conventions per endpoint (handle vs query vs subreddit). This goes beyond the basic schema, though it doesn't enumerate every possible param.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a generic escape hatch for endpoints not covered by dedicated search_* tools, with a concrete example. It distinguishes itself from the many search_* siblings by framing it as a fallback. Slightly generic due to 'long-tail' but unambiguous in intent.
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 tells the agent when to use this tool (endpoints not covered by search_* tools) and when to prefer alternatives ('prefer the dedicated search_* tools'). Also warns about messy raw JSON, which further discourages misuse. Names the alternative class of tools directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_google_adsSearch Google adsARead-onlyInspect
Structured Google Ads Transparency pull for ONE advertiser (by domain or advertiserId) — use when you know the brand; use research_ads for open-ended research. Deliberately fetches the cheap BASIC listing (get_ad_details=false, ~1 credit — the detailed variant with per-ad headlines costs 25 credits/call and is not exposed here). Returns compact JSON {advertiser, format, adUrl, image, firstShown, lastShown} per ad.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max ads returned (1–25, default 8) | |
| domain | No | the advertiser's domain, e.g. nike.com | |
| region | No | 2-letter region, default US | |
| advertiserId | No | Google advertiser id (AR…) when the domain is ambiguous |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so the description adds value by disclosing the cost (1 credit vs 25) and that the detailed variant is deliberately not exposed. It also specifies the exact JSON return shape, which is not in the schema. While it doesn't cover pagination, the safety profile is already carried by annotations, and the description provides meaningful behavioral context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the purpose and usage, the second discloses cost and return format. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, alternative, cost, and return format; annotations cover safety. It lacks explicit mention of pagination or handling multiple results, but the limit parameter schema addresses this and the tool is simple enough that the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description repeats that search can be by domain or advertiserId, but does not add new meaning beyond the schema's parameter descriptions. It mentions the return fields but not parameter-specific nuances, so it does not exceed 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 clearly states a specific verb ('pull') and resource ('Google Ads Transparency') for exactly one advertiser by domain or advertiserId. It distinguishes itself from the sibling research_ads by naming the alternative explicitly, leaving no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'use when you know the brand; use research_ads for open-ended research,' providing a direct condition and naming the alternative. Also explains the cost trade-off between the cheap BASIC listing and the expensive detailed variant, giving concrete guidance on when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_instagramSearch InstagramARead-onlyInspect
Organic Instagram REELS keyword search (/v2/instagram/reels/search — ScrapeCreators' only IG keyword surface; profile/hashtag pulls go through scrapecreators_fetch with a handle). Returns compact JSON {desc, author, handle, plays, likes, link, cover} per reel, ranked by plays. Spends ScrapeCreators credits (~1).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max reels returned (1–25, default 8) | |
| query | Yes | keyword to search reels for |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint=true, the description adds valuable context: it spends credits (~1), returns a compact JSON with specific fields, and ranks results by plays. It also discloses that it is an 'organic' search. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that packs in purpose, endpoint, alternative, output format, ranking, and cost. It is concise and front-loaded with the main purpose, though the technical endpoint path is arguably unnecessary detail for an agent.
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 search tool with two parameters and no output schema, the description provides sufficient context: it specifies output fields, ranking, credit cost, and scope (only reels). It could mention pagination or error handling, but is otherwise complete 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 100% for both parameters (limit and query) with clear descriptions. The tool description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (keyword search on Instagram reels), a specific resource (reels), and differentiates from alternatives by declaring it is ScrapeCreators' only IG keyword surface and that profile/hashtag pulls go through scrapecreators_fetch. This clearly distinguishes it from sibling tools like search_instagram_hashtag.
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 explicitly states 'profile/hashtag pulls go through scrapecreators_fetch with a handle,' making it clear when to use this tool instead of alternatives. It also implies that for reels keyword search this is the correct tool, providing direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_instagram_hashtagSearch a public Instagram hashtagARead-onlyInspect
Read the PUBLIC Instagram posts carrying a hashtag — the caption, the media, the permalink and the like and comment counts — on the brand’s own Meta credentials rather than a scraper. This is category and competitor listening: find how a market actually talks about a product, then USE it — feed the captions into mine_angles, or write the brand’s next post or ad from the language you found. TWO EDGES AND THEY ANSWER DIFFERENT QUESTIONS: edge:"recent" (default) is what has been posted in the LAST 24 HOURS, which is Meta’s own hard limit, so a hashtag with millions of posts legitimately returns ZERO on a quiet day — never report that as "nobody is posting about this", ask again with edge:"top", which has no time limit. Only PUBLIC, non-promoted posts are ever returned, from public accounts only, and never in chronological order. A SHORT RESULT IS NOT A SMALL HASHTAG: Instagram limits a page by total response SIZE rather than by post count, so a tag whose posts are carousels returns fewer rows per page than a tag whose posts are single images — never compare two tags by how many rows came back. BUDGET: Instagram allows each Instagram account 30 UNIQUE hashtags in any rolling 7 days, so choose the tags deliberately; re-querying one already used in the window is free. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | the hashtag — "skincare", "#skincare" or an instagram.com/explore/tags/… link all work. Instagram matches it EXACTLY and tags carry no spaces or punctuation. | |
| edge | No | "recent" (default) = posted in the last 24 hours; "top" = the best-performing posts, with no time limit. Use "top" whenever "recent" comes back empty. | |
| limit | No | how many posts (1–50, default 10). Instagram bounds a page by how much DATA it holds, not by how many posts, so a big ask is fetched in several smaller pages automatically and may still come back short on a carousel-heavy tag — a short result is NEVER a measure of the tag’s size. | |
| pageId | No | Facebook Page id — omit when only one Page is connected. Its linked Instagram account is what Meta charges the hashtag budget against. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations by disclosing hard limits such as Instagram's 24-hour window for 'recent,' the fact that only public, non-promoted posts are returned, the non-chronological ordering, and the rolling 7-day budget of 30 unique hashtags. It also clarifies that returning a short result is not meaningful evidence of hashtag size, which is critical for correct interpretation.
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 key action is front-loaded, and the sections on edge variants, page-size behavior, and budget are well marked and high-signal. However, the description is lengthy and repeats a few warnings in different forms, especially around 'short results do not mean small hashtags,' which could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers return contents, the two edge modes, the recent/top fallback logic, the non-chronological nature, the interpretation of short results, and the 30-hashtag budget. Since there is no output schema, explicitly naming the returned fields is important, and the description does that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to reintroduce every parameter, but it still adds valuable semantic context: the meaning of 'zero results' on 'recent', the distinction between 'recent' and 'top' when interpreting results, and the budget implications of pageId and repeated queries. This goes beyond the parameter descriptions themselves.
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 a specific verb and resource: 'Read the PUBLIC Instagram posts carrying a hashtag,' and enumerates the returned fields (caption, media, permalink, like and comment counts). It distinguishes itself from scraper-based tools and positions itself as category/competitor listening, which is enough to separate it from siblings like search_instagram and list_instagram_media.
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 context for when to use the tool, including explicit guidance to fall back to edge:'top' when edge:'recent' returns empty and to feed captions into mine_angles for angle mining. It does not name alternative tools to use instead, but the conditions are concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_instagram_shopping_productsFind products to tag on InstagramARead-onlyInspect
The products in one catalog that can actually be TAGGED on an Instagram post — this is where the product_id for a product tag comes from. Omit q to see everything tag-eligible; pass a product name or SKU to narrow it. THIS IS A SMALLER SET THAN THE CATALOG HOLDS: a product can be in the catalog, counted by list_meta_catalog_products, and still not be taggable, so an empty answer here is never evidence the catalog is empty. Meta only SHOWS a tag whose product review_status is "approved" — an unapproved one is accepted, stored and shown to nobody, so the reply flags them. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | product name or SKU. Omit it to list every tag-eligible product, which is a real ask rather than a missing argument. | |
| pageId | No | Facebook Page id — omit when only one Page is connected | |
| catalogId | Yes | from list_instagram_shopping_catalogs. Meta REQUIRES it — there is no search-every-catalog form. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, openWorldHint=true, destructiveHint=false), the description discloses key behavioral traits: the set is a subset of the catalog, unapproved products are accepted but hidden and flagged in the reply, and the operation is read-only and costs 0 credits. These details are not derivable from annotations and are critical for correct agent behavior, especially the handling of empty results and review_status flags.
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 dense but every sentence contributes: the core purpose, the q semantics, the smaller-set warning, the review_status nuance, and the read-only/credit note. It is front-loaded with the most important distinction (tag-eligible vs catalog) and avoids fluff. The length is justified by the complexity of the domain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description compensates by explaining the meaning of results: it returns the tag-eligible subset, flags unapproved products, and implies the output contains product_id (since it says product_id comes from here). It also covers the key edge case of empty results. Combined with the schema's parameter descriptions, nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful nuance for q: omitting it is a deliberate request for all, not a missing argument; and clarifies that catalogId comes from a sibling and is mandatory. While pageId is already well explained in the schema, the added clarity on q and the explicit linkage to list_instagram_shopping_catalogs elevates it slightly above 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 verb and resource: 'products ... that can actually be TAGGED on an Instagram post' and explicitly identifies this as the source of product_id for tags. It distinguishes itself from siblings like list_meta_catalog_products by stressing it is a 'SMALLER SET' and from manage_instagram_product_tags by focusing on search/list rather than management. No ambiguity remains.
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 explicit when-to-use guidance: Omit q to list all tag-eligible items, pass a name/SKU to narrow, and contrasts with list_meta_catalog_products by warning that an empty result does not mean the catalog is empty. It also clarifies the review_status behavior (approved vs unapproved) and that this is where tag product_ids come from. All essential usage context is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_linkedin_adsSearch LinkedIn adsARead-onlyInspect
Structured LinkedIn Ad Library search by company name, keyword, or companyId — use for a targeted B2B pull; use research_ads for open-ended research. Returns compact JSON {advertiser, headline, description, cta, link, media, dates, impressions} per ad — LinkedIn is the one library exposing real impression counts. Spends ScrapeCreators credits (~1).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max ads returned (1–25, default 8) | |
| company | No | advertiser company name | |
| keyword | No | keyword across all advertisers | |
| companyId | No | LinkedIn company id (numeric) when the name is ambiguous | |
| countries | No | CSV of 2-letter codes like 'US,CA'; omit or 'ALL' = worldwide |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and destructiveHint, so the description correctly focuses on additional behavioral details: it returns real impression counts (a unique value), consumes ~1 ScrapeCreators credit, and outputs compact JSON. These go beyond the annotations and inform the agent about side effects and data characteristics.
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 efficient: two sentences cover purpose, alternative, return format, unique capability, and cost. The core action is front-loaded, and every clause adds value. It could be split into more digestible pieces, but it is far from verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description compensates by enumerating the exact JSON fields. It also clarifies the 'one library exposing real impression counts' differentiator and the credit cost. It omits no obvious needed details for a search tool with optional parameters, though pagination/rate limits are not addressed—still adequate for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already well-documented (e.g., 'companyId' includes 'when the name is ambiguous'). The description restates the three main search keys but adds no new parameter-level insight. It earns the baseline 3; it does not harm clarity but adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search', the resource 'LinkedIn Ad Library', and the specific search dimensions (company name, keyword, companyId). It also lists the exact return fields in the JSON, making the tool's purpose unambiguous and distinct from its 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 explicitly says 'use for a targeted B2B pull; use research_ads for open-ended research', providing a direct comparison and a condition for when to select this tool over the named alternative. The credit cost is also stated, helping with resource planning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_meta_adsSearch Meta adsARead-onlyInspect
Structured Meta (Facebook/Instagram) Ad Library pull — use when you know exactly WHAT to fetch: a keyword (query) OR one advertiser (companyName / pageId). Returns compact JSON {page_name, body, cta, link, dates, media} per ad. For open-ended research that needs judgment across platforms, use research_ads instead. Spends ScrapeCreators credits (~1–2).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max ads returned (1–25, default 8) | |
| query | No | keyword search across ALL advertisers (use INSTEAD of companyName/pageId) | |
| pageId | No | one advertiser’s ads by Facebook page id (most precise) | |
| status | No | ACTIVE = currently running; default ALL (includes proven past winners) | |
| country | No | 2-letter code or 'ALL' (default ALL) | |
| mediaType | No | filter by creative type (default ALL) | |
| companyName | No | one advertiser’s ads by brand name |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to restate safety. It adds meaningful behavioral context beyond annotations: the credit spend (~1–2) and the compact JSON return format with specified fields. It doesn't cover rate limits or pagination, but those are not critical here. This is more than minimal, but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with zero filler. The core purpose is front-loaded, followed by the return format, the alternative tool, and the cost. Every sentence earns its place and no information 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 7-parameter tool with all parameters documented in the schema and no required fields, the description covers all essential aspects: what it does, when to use it, what it returns, and its cost. The alternative tool is named, and no behavioral gaps remain that would prevent an agent from calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description doesn't need to document each parameter. However, it reinforces the exclusive distinction between query and companyName/pageId, and adds that pageId is 'most precise.' This goes slightly beyond the schema's own descriptions, which already state 'use INSTEAD of companyName/pageId' for query. The added value is the clarity of the choice, warranting a 4 rather than a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a 'Structured Meta (Facebook/Instagram) Ad Library pull' and specifies the exact use case: when you know exactly WHAT to fetch (keyword OR advertiser). It also distinguishes itself from 'research_ads' by naming the alternative and the condition for using it, making the purpose unambiguous and differentiated 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?
Explicitly provides when-to-use guidance: 'use when you know exactly WHAT to fetch' and directs to research_ads for open-ended research. Also implicitly defines exclusions by stating the alternative. This is exactly what an agent needs to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pinterest_ads_targetingFind Pinterest ad targeting optionsARead-onlyInspect
THE IDS AN AD GROUP’S targetingSpec NEEDS. create_pinterest_ads_campaign and create_pinterest_ads_ad_group accept interests, locales, locations, age buckets and keywords — this is where those values come from, and guessing one is the worst option available: Pinterest ACCEPTS a well-formed but wrong interest id and the campaign then quietly targets the wrong people. Pass targetingType (INTEREST, GEO, LOCATION, LOCALE, AGE_BUCKET, GENDER, APPTYPE, KEYWORD, AUDIENCE_INCLUDE, AUDIENCE_EXCLUDE) and optionally query to narrow the list. INTERESTS ARE A TREE: pass interestId instead to drill into one and get its children, which is how you get from "Food" to something specific enough to target. Pinterest publishes no search parameter of its own, so query filters the full list HERE — the note says so, because a filter we applied is not a filter the vendor applied. Read-only, 0 credits, no new permission (it uses ads:read, already granted).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1–500, default 100 | |
| query | No | narrow the list to options mentioning this text (filtered here, not by Pinterest) | |
| interestId | No | drill INTO one interest and return its child interests — how you walk the interest tree | |
| adAccountId | No | ||
| targetingType | No | which catalog to list — required unless you pass interestId |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by disclosing '0 credits, no new permission (uses ads:read, already granted)' and the critical caveat that Pinterest accepts wrong interest IDs, leading to silent mis-targeting. It also clarifies the local nature of query filtering and the tree-drilling behavior for interestId. This adds significant behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not overly long; each sentence adds value. It front-loads the core purpose, then explains usage, risk, and parameter semantics. Some sentences run on, but overall it's efficient and well-structured. A slightly more structured layout would earn a 5, but this is solidly a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 params, no output schema), the description covers purpose, usage, parameter details, and safety. It does not explicitly describe the return format (e.g., a list of objects) or pagination behavior, but with no output schema and the clear context about filtering, it's sufficiently complete for an agent to call it correctly. Minor gaps in return structure lead to a 4.
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%, but the description enriches meaning: it explains the relationship between targetingType and interestId, clarifies that interestId drills into the tree, and details how query filters work locally. It also interprets the enum values contextually. While the schema already provides decent descriptions, the description adds depth that helps an agent understand parameter interplay.
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 the exact purpose: 'THE IDS AN AD GROUP’S targetingSpec NEEDS.' It explicitly identifies what the tool provides (interests, locales, locations, age buckets, keywords) and its role in supporting create_pinterest_ads_campaign and create_pinterest_ads_ad_group. It is distinct from siblings in the list, which are mostly unrelated. The verb 'search' plus resource 'Pinterest ad targeting options' is clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly ties usage to a workflow: 'create_pinterest_ads_campaign and create_pinterest_ads_ad_group accept... — this is where those values come from.' It warns against guessing IDs and explains that query filters are applied locally, not by Pinterest. This gives clear when-to-use guidance and even notes why it's necessary, with no alternatives mentioned because none exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_redditSearch RedditARead-onlyInspect
Reddit keyword search (/v1/reddit/search, top-ranked) — a goldmine for the customer's OWN words (pain points, objections, language) to mine into ad hooks and copy. Returns compact JSON {desc (title+selftext), subreddit, upvotes, comments, link} per post. Spends ScrapeCreators credits (~1).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max posts returned (1–25, default 8) | |
| query | Yes | what to search Reddit for |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral details: return format (compact JSON with specific fields), credit cost (~1), and ranking ('top-ranked'). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no wasted words. The value proposition is front-loaded, and the technical details (endpoint, return format, cost) are conveyed efficiently.
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 search tool with two parameters and no output schema, the description covers everything an agent needs: where it searches, what it returns, and the cost. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover both parameters (query and limit) with clear meaning (100% coverage). The description does not add parameter-specific nuance beyond the schema, which is acceptable given the baseline of 3 when schema is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Reddit keyword search), specifies the endpoint, and explains the use case (mining customer language for ad copy). It distinguishes itself from sibling search tools (search_instagram, search_tiktok) by platform and 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?
It provides a clear 'when to use' rationale (to mine customer's own words for ad hooks) but does not explicitly contrast with alternatives or state when not to use it. Given the many sibling search tools, a brief exclusion would have been ideal, but the context is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_threadsSearch ThreadsARead-onlyInspect
Organic Threads keyword search (/v1/threads/search) — short-form text/social posts for trend + voice research. Returns compact JSON {desc, author, handle, likes, link, cover} per post. Spends ScrapeCreators credits (~1).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max posts returned (1–25, default 8) | |
| query | Yes | keyword to search Threads for |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds the cost implication (spends ~1 ScrapeCreators credit) and the response format (compact JSON with specific fields). This contextual behavior goes beyond annotations and helps the agent anticipate side effects and output structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—three short sentences that front-load the purpose, then provide response format and cost. Every sentence carries useful information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description fully specifies the return JSON structure. It also notes credit cost. For a simple search tool, it covers the essential call context, though it omits edge-case behavior (e.g., no results, pagination) which are minor for this type of 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 100% with both 'query' and 'limit' having clear descriptions. The tool description does not add any additional semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs keyword search on Threads for short-form posts, aimed at trend and voice research. It specifies the endpoint and the resource. It does not explicitly differentiate from sibling tools like search_threads_keyword or list_threads_posts, but the core action and scope are 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?
The description implies usage for trend and voice research, but it does not provide explicit guidance on when to use this tool versus sibling alternatives such as search_threads_keyword or search_threads_locations. There is no 'when not to use' or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_threads_keywordSearch Threads by keywordARead-onlyInspect
Search PUBLIC Threads posts for a keyword or topic — competitor listening, finding what people say about a product, or sourcing real customer language for ad copy. Distinct from search_threads, which reads a specific profile.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | keyword or phrase | |
| searchType | No | TOP (default) or RECENT |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by specifying the 'PUBLIC' scope of posts—a key behavioral constraint the agent must know. It also conveys intent via use cases. It does not mention pagination or result limits, but given the simple read-only nature, this is a minor omission.
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 efficient sentences. The first states the primary purpose and examples; the second provides sibling differentiation. No wasted words, and the most critical information (public keyword search) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, one required), annotations covering safety, and full schema coverage, the description is almost complete. It covers scope, use cases, and sibling distinction. The lack of explicit statement about return format or result count is acceptable because no output schema exists and the purpose is clear from the name and 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%: both q and searchType have clear descriptions in the schema. The tool description repeats 'keyword or topic' (matching q) but adds no new parameter-level detail. With full schema coverage, baseline 3 is appropriate—the description does not need to compensate.
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 and resource: 'Search PUBLIC Threads posts for a keyword or topic'. It also clearly differentiates from a sibling tool by saying 'Distinct from search_threads, which reads a specific profile'. This leaves no ambiguity about what the tool does.
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 names the alternative (search_threads) and the distinction (keyword search vs. specific profile). It also provides concrete use cases—competitor listening, product sentiment, ad copy sourcing—that tell an agent when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_threads_locationsFind a place to tag on ThreadsARead-onlyInspect
Search Threads’ public place index by name (or by latitude+longitude) and get location ids. Use this when the brand has a PHYSICAL location — a restaurant, salon, gym, store — so the post can be geotagged to it. Pass the chosen id as post_to_meta(locationId) with target:"threads".
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | place name to search, e.g. "Osteria Francescana" | |
| latitude | No | latitude (use with longitude to search near a point) | |
| longitude | No | longitude |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent (searching is read-only). The description adds useful context: it hits the public place index, returns location IDs, and is intended for geotagging. No contradictions, and the added context goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and effective: two sentences that lead with the action and result, then provide the usage context and downstream integration. No filler or redundancy.
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 lookup with no output schema, the description covers everything an agent needs: what it does, when to use it, what it returns (location IDs), and how to use the result (via post_to_meta). No gaps in calling the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter clearly described (q, latitude, longitude). The description reiterates the name-or-coordinates option but does not add substantial new meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Threads' public place index by name or latitude/longitude and returns location IDs. It explicitly identifies the resource ('Threads' public place index') and the verb ('Search'), distinguishing it from sibling tools like search_threads or search_threads_keyword by specifying physical locations.
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 an explicit condition for use: 'when the brand has a PHYSICAL location — a restaurant, salon, gym, store'. It also explains the downstream action (passing the ID to post_to_meta with target:'threads'), making it unambiguous when to invoke this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tiktokSearch TikTokARead-onlyInspect
Organic TikTok keyword search (there is NO TikTok ad library) — top-performing videos to mine for hooks/trends/remixable creative. Returns compact JSON {desc, author, handle, plays, likes, link, cover} per video, ranked by plays. Use research_ads for open-ended research. Spends ScrapeCreators credits (~1).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max videos returned (1–25, default 8) | |
| query | Yes | keyword or hashtag (no # needed) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it discloses a credit cost (~1 ScrapeCreators credit), describes the exact output JSON structure with field names, and notes that results are ranked by plays. Since annotations already declare readOnlyHint=true and destructiveHint=false, this extra context (cost, output format) is valuable and not redundant.
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: three sentences that each carry essential information—core purpose, a key distinguishing fact (no ad library), output format, alternative tool, and cost. It is front-loaded with the main purpose and contains no filler or redundancy.
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 search tool, the description is complete: it states what it does, what it returns (with fields), the cost, and when to use an alternative. The schema covers parameters, and the output structure is explicitly described, so an agent has everything needed to call it correctly without further inference.
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%, meaning both query and limit parameters are fully documented in the input schema. The description does not add extra parameter-level semantics beyond what the schema already provides; it does describe the output format, which is helpful but not parameter-specific. Per the rubric, a baseline of 3 is appropriate when the schema fully covers parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('search') on a specific resource ('TikTok') with an 'organic' qualifier, and explicitly notes there is no TikTok ad library, distinguishing it from ad-library tools. It also names research_ads as an alternative, making its purpose distinct from siblings like search_instagram or search_meta_ads.
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 explicitly says 'Use research_ads for open-ended research,' providing a clear alternative and the condition that selects it. This gives the agent direct guidance on when to choose this tool over a related one, fulfilling the usage-guideline requirement fully.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_youtubeSearch YouTubeARead-onlyInspect
Organic YouTube keyword search (/v1/youtube/search) — videos to mine for hooks/angles/long-form structure. Returns compact JSON {desc (title), author, handle, plays, link, cover} per video, ranked by views. Spends ScrapeCreators credits (~1).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max videos returned (1–25, default 8) | |
| query | Yes | keyword to search videos for |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, and the description adds valuable behavior: it spends ScrapeCreators credits (~1), returns compact JSON with specific fields, and ranks by views. It also notes 'organic' to distinguish from paid search. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences pack purpose, use case, return format, ranking, and cost with zero waste. The most critical information (purpose and endpoint) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple search tool: it covers purpose, return format, ranking, and cost. Annotations cover safety (readOnly) and openness. No output schema is needed given the return shape is described in-line.
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% for both parameters (query and limit), and the description adds no additional parameter semantics beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's an organic YouTube keyword search, names the endpoint, and specifies the use case (mining hooks/angles/long-form structure). It distinguishes itself from siblings by focusing on YouTube and organic search, making its purpose unmistakable.
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 clear context for when to use it (for mining content ideas from YouTube videos) but does not explicitly name alternatives or state when not to use it. Since it's the only YouTube search tool among many search_* siblings, the context is sufficient without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_bluesky_dmSend a Bluesky direct messageAInspect
Send ONE direct message on the connected Bluesky account, either into an existing conversation (convoId) or to a named handle (a conversation is opened for you — the handle is resolved to a DID first, because Bluesky identifies chat members by DID). A DM allows 1000 characters, NOT the 300 a post allows. Refusals name the real situation rather than a generic failure: the recipient has DMs off, only accepts DMs from people they follow, has blocked this account, is suspended, or does not exist. There is deliberately no broadcast form — a recipient is always named.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | the recipient’s Bluesky handle, e.g. alice.bsky.social. Ignored when convoId is given. | |
| text | Yes | the message, up to 1000 characters | |
| convoId | No | reply into an existing conversation (from list_bluesky_convos). Omit to start one with `to`. | |
| replyToMessageId | No | reply to a specific message in the conversation |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false) and non-destructive nature. The description adds valuable behavioral details beyond that: the DID resolution step, the 1000-character limit (vs 300 for posts), and the specific refusal reasons (DMs off, follow-only, blocked, suspended, non-existent). This helps the agent understand expected failures.
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 tightly written, starting with the core action, then the two modes, a key constraint (character limit), and the behavioral note on refusals. No redundant or filler content; each sentence adds 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 write tool with four schema-documented parameters and no output schema, the description covers all essential aspects: how to initiate a conversation, the character limit, error semantics, and the explicit absence of broadcast. An agent has everything needed to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description enriches parameters by explaining that 'to' resolves to a DID before sending, and reinforces the character limit for 'text'. This adds meaning beyond what the schema provides, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Send' and the resource 'direct message' on Bluesky. It distinguishes two distinct invocation modes (existing conversation via convoId, or to a named handle with auto-resolution to DID), which separates it from public posting tools like post_to_bluesky.
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 clear when-to-use context: sending a private message versus a public post, and explicitly notes the absence of a broadcast form. It does not list alternative tools by name but implies the decision between replying to an existing conversation and starting a new one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_whatsapp_messageSend a WhatsApp messageAInspect
Send a WhatsApp message from one of the brand’s registered numbers to a customer. TWO KINDS, and which one is legal depends on time: pass template (an APPROVED template name) to START a conversation — the only thing WhatsApp accepts outside the 24-hour customer-service window — or text for a free-form reply INSIDE that window, which opens only when the customer messages the business first. Hermoso does not receive WhatsApp webhooks yet, so it CANNOT see whether that window is open: a free-form message is sent optimistically and Meta refuses it with a re-engagement error if it is closed, which the reply explains rather than reporting as a broken connection. THIS REACHES A REAL PERSON’S PHONE AND META BILLS THE BUSINESS for the conversation, so it is confirm-gated: show the user the exact message and the recipient, get an explicit yes, then call again with confirm:true. WhatsApp policy REQUIRES the business to hold the recipient’s opt-in first. An unapproved template is refused BEFORE the send, against the status Meta holds. ACCEPTED IS NOT DELIVERED — the reply reports what Meta accepted, and delivery arrives on a webhook we do not receive, so never tell the user it was delivered. THE VARIABLE COUNT IS CHECKED BEFORE ANYTHING IS DISPATCHED: Hermoso reads the template’s own components back from Meta and refuses a payload that supplies the wrong number of values, naming exactly what is missing — for free, before a real phone is involved, instead of Meta answering 132000 after the attempt. It refuses only what it can prove; anything it cannot determine is sent for Meta to judge. 0 Hermoso credits.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | the recipient in full international form, e.g. +14165550142 | |
| text | No | a free-form message — only lands INSIDE the 24-hour window | |
| wabaId | No | REQUIRED when sending a template — it is what the template’s review status is read from | |
| confirm | No | REQUIRED true — this sends a real message to a real phone and Meta bills the business for it | |
| language | No | which language of that template, e.g. en_US. Omitted, Hermoso uses the first one it finds and reports which. | |
| template | No | an APPROVED template name — required to start a conversation outside the 24-hour window | |
| components | No | the template’s variable values, in Meta’s component form. The count must match the {{1}}, {{2}} placeholders exactly. Hermoso checks this against the template’s real components before dispatching and refuses a provable mismatch by name. A media header needs its own component holding the link even though it carries no {{n}}, and a carousel needs one entry per card. | |
| phoneNumberId | Yes | WHICH NUMBER IT SENDS FROM — from list_whatsapp_accounts (a WABA can have several) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) are consistent, but the description goes far beyond them: it discloses that the message reaches a real person and bills the business, that delivery is not guaranteed by acceptance, that variable-count validation happens before dispatch, and that an unapproved template is refused pre-send. It also warns that free-form sends are optimistic and may be refused with a re-engagement error. All of this is essential behavioral context that the annotations do not capture.
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 long and dense, but every sentence serves a purpose, and key points (confirm gate, variable count check, delivery semantics) are front-loaded and emphasized. It is structured in blocks that logically flow from purpose to constraints to safety. While it could be tightened, the length is justified by the operational complexity of the WhatsApp API.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 8 params, no output schema, and high operational risk, the description covers everything an agent needs: legal send windows, confirmation requirement, variable-count validation, delivery semantics, and the handling of unapproved templates. There is no apparent gap that would cause an agent to misuse the tool or misinform the user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds deep semantic meaning to each parameter: confirm is explained as required because it sends a real message, to is given an exact format, wabaId is tied to template review status, components are detailed with count-checking and media/carousel nuance, and phoneNumberId is linked to list_whatsapp_accounts. The description substantially enriches the schema beyond its 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 opens with a clear statement of the action: 'Send a WhatsApp message from one of the brand’s registered numbers to a customer.' It also names the two modes (template vs. text) and distinguishes them by time window, which disambiguates it from sibling tools like post_to_meta or reply_to_meta_message. The purpose is so specific that an agent can immediately tell when this tool is relevant.
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 explicitly states when each mode is legal: template outside the 24-hour window, text inside it, and notes the opt-in requirement. It also mandates that the call be confirm-gated and that the agent must get explicit user approval before sending with confirm:true. This is decisive guidance on when to use this tool versus alternatives and how to execute it safely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_x_dmSend an X direct messageAInspect
Send ONE direct message from the connected X account, either into an existing conversation (conversationId) or to a named account (participantId — the NUMERIC id, not an @handle; sending to someone with no existing thread starts one). THIS IS A PRIVATE MESSAGE TO A REAL PERSON AND IT CANNOT BE TAKEN BACK: show the user the exact wording and the exact recipient and get an explicit yes BEFORE calling. Never send the same message to several people — send one, to one named recipient. X may refuse a message to someone whose settings do not accept DMs from accounts they do not follow; that refusal comes from X, not from Hermoso. Costs credits per send. Needs X connected with direct-message access — an X account connected before DMs shipped must be reconnected once (Settings ▸ Connectors ▸ X).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the message, exactly as it should be sent | |
| participantId | No | the NUMERIC X account id to message — starts a conversation if there is none. list_x_dms returns it beside every message. | |
| conversationId | No | reply into an existing conversation (from list_x_dms) | |
| idempotencyKey | No | pass the same key to make a retry safe — a timeout that already sent would otherwise send twice |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false and idempotentHint=false, so the description carries the burden and fully discharges it: it discloses irreversibility ('CANNOT BE TAKEN BACK'), that the message reaches a real person, that it 'costs credits per send', that X can refuse delivery based on the recipient's settings, and that the tool depends on connector state. It also reinforces idempotency behavior through the schema-attached idempotencyKey explanation. Nothing is contradicted.
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 comment is long but every sentence earns its place: irreversibility, consent protocol, single-recipient constraint, X-side refusal, credit cost, and a specific reconnect path through Settings. It is also front-loaded, opening with the operation's defining risk rather than boilerplate, and reads as an operational checklist rather than 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 state-changing tool with no output schema, the description covers everything needed to invoke it safely: preconditions, recipient vetting, and expected external behavior. Combined with the 100%-coverage schema, the agent has all necessary context to decide, prepare the exact message, and execute the send 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?
At 100% schema coverage the baseline is 3, but the description adds moderately: it elevates text to 'the message, exactly as it should be sent', and it contextualizes participantId as a numeric ID needing explicit user's approval as the exact recipient. It doesn't simply repeat the schema, yet the marginal value here is less than in the other dimensions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ('Send') with a precise resource ('a direct message from the connected X account') and distinguishes its two operating modes: continuing an existing thread via conversationId or starting one via participantId. Strong scope constraints ('ONE message', 'one named recipient') separate it cleanly from broadcast tools like post_to_x and sibling senders like send_bluesky_dm.
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 conditions are explicit and actionable: the agent must show the exact wording and recipient and get explicit yes before calling, and there is a hard when-not rule ('Never send the same message to several people'). Prerequisites are concrete (X connected with direct-message access, reconnection needed for pre-existing connections), and an expected failure mode is preemptively disambiguated ('refusal comes from X, not from Hermoso').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_auto_reloadSet auto-reloadAIdempotentInspect
Turn automatic credit reloads on or off (admin only): when the balance drops below a threshold, the card on file is charged for a top-up pack — SERVER-SIDE, even with no app open. Requires a saved card, added once in the app at first checkout/top-up; if there's none the tool tells you exactly where to add it. After that one-time card setup, agents can manage auto-reload, top-ups and plan links fully. Members (read-only billing) get an 'ask an admin' message.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true to turn auto-reload on, false to turn it off | |
| reloadCredits | No | how many credits to add each reload — must match a credit pack size (see buy_credits) | |
| thresholdCredits | No | reload when the balance drops below this many credits |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds valuable behavior beyond that: server-side execution ('even with no app open'), the one-time card setup prerequisite, and the specific error message for members. This gives agents a fuller picture of side effects and preconditions.
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 few sentences long, front-loaded with the core action and role, then explaining mechanics, prerequisites, and error paths. Every sentence adds necessary operational detail without filler. It is appropriately concise for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Cover the behavioral outcome, prerequisites (saved card), error handling for members, and the fact that it is server-side. While it does not describe the return value, this is acceptable for a configuration tool with no output schema. It feels complete for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all three parameters fully (100% coverage) with clear descriptions. The tool description adds the overall mechanism tying thresholdCredits and reloadCredits together, but does not add significant new information beyond the schema. Baseline 3 is appropriate; the description reinforces but does not extend parameter understanding.
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 opens with a specific verb-resource pair ('Turn automatic credit reloads on or off') and scopes it to admins. It clearly distinguishes this from manual credit purchase (buy_credits) by describing the automated mechanism (balance threshold, card on file, server-side execution). An agent can immediately understand what this tool does and how it differs from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States that it is admin-only, requires a saved card, and explains behavior for members (read-only billing) and what to do if no card exists. It gives clear context for when this tool is appropriate (managing auto-reload) versus manual top-ups, though it does not explicitly name an alternative tool like 'buy_credits' as the fallback for manual purchases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_competitor_watchSet the competitor watchAIdempotentInspect
Set (or STOP) this workspace's standing COMPETITOR WATCH — the weekly job that re-checks each named brand's ad libraries and reports what is NEW since last time. The same watch the web app's Ad Spy ▸ Watching tab manages, and the same one the weekly digest email is sent from (turn that email on/off with update_settings({watchEmail})). This REPLACES the whole watched list, it does not add to it — pass every brand you want watched, every time. Max 5 brands (the server trims past that). Pass an EMPTY list to stop the watch entirely, which also clears the findings. Give a domain wherever you know one: Google Ads Transparency is looked up BY DOMAIN and is skipped for a brand without one, and the domain is what resolves the right Meta page for a brand with an ambiguous name. The run itself spends ScrapeCreators credits against the ad libraries (roughly 3 per brand on Meta, 1 each on Google and LinkedIn) and is hard-capped per run server-side, so an oversized watch is trimmed rather than allowed to run away. Setting the list is free; only a run spends. runNow:true runs it once IMMEDIATELY (a background job — it spends now) and then keeps the weekly cadence; leave it off and the first check is a week out. The country and the platform mix are NOT settable here — a re-set inherits whatever the pending run already carried (US / Meta for a watch that has never been configured otherwise). Read the findings back with list_watch_findings.
| Name | Required | Description | Default |
|---|---|---|---|
| runNow | No | true to run one check immediately (spends credits now) instead of waiting a week for the first one | |
| competitors | Yes | the brands to watch — the COMPLETE list, replacing whatever was set before. Empty array = stop watching. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description directly contradicts the destructiveHint annotation (false) by stating that passing an empty list 'also clears the findings', which is a destructive side effect. Since annotations declare destructiveHint false, this is a clear contradiction, and per the rules the score must be 1. Despite the otherwise rich behavioral detail (credit costs, trimming, runNow effects), the contradiction invalidates the transparency credit.
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 long but dense and informative. It front-loads the core purpose and then provides necessary behavioral details in a logical order. While every sentence adds value, the length could be trimmed without losing essential information, so it is not extremely concise but remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (side effects, credit costs, max limits, how to stop), the description covers all major aspects: what it does, how to invalidate, cost implications, what it does not set, and where to read results. It does not over-explain return values (no output schema), which is appropriate. Slight gaps like specific timing of weekly runs are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and baseline is 3, but the description adds substantial meaning beyond the schema. It explains that competitors is the complete list (replace semantics), empty array stops the watch, domain is required for Google Ads and disambiguates Meta pages, and runNow immediately spends credits. This extra context helps the agent use parameters correctly beyond their schema definitions.
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 (Set) and resource (competitor watch), defines what the watch does (weekly re-check of ad libraries reporting new items), and distinguishes it from related tools by referencing the same watch managed in the web app and the digest email. It also clarifies that it replaces the whole list rather than adds to it, which differentiates it from any tool that might incrementally update a watch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: when to stop the watch (empty list), when to run immediately (runNow:true), and points to list_watch_findings for reading results and update_settings for the email toggle. It explains that the country/platform mix is not settable here, implying other tools may handle that, but it does not explicitly name which tools to use over this one for those specific cases. Overall, guidance is strong but could be more explicit about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_connector_accountsChoose which accounts a brand may useAIdempotentInspect
Set WHICH of a connector's accounts this brand is allowed to post to and spend from — Facebook Pages / Instagram / Meta ad accounts, Google Ads customers, LinkedIn company Pages (and the personal profile), Pinterest or Microsoft Advertising ad accounts. Pass ids from list_connector_accounts. This REPLACES the current selection: anything you leave out is un-shared, and an EMPTY list shares nothing (publishing then refuses — it fails closed by design, and the server re-verifies every id against the live connection, so an id the account cannot actually reach is rejected rather than saved). Ask the user which accounts they mean; posting as the wrong Page is a public mistake. Providers: meta, google_ads, linkedin, pinterest_ads, linkedin_ads, reddit_ads, apple_ads, microsoft_ads, google_business, google_analytics, snapchat_ads, x_ads, tiktok_ads, google_tag_manager, google_search_console, bing_webmaster. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | which connector to scope | |
| accountIds | Yes | the ids (from list_connector_accounts) this brand may use — an empty array shares nothing |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description goes far beyond by disclosing that the operation replaces the entire selection, fails closed on empty lists, re-verifies ids against live connections, and rejects unreachable ids. This is critical behavioral context that annotations alone do not provide, and it aligns with (and extends) the annotation 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?
The description is long but packed with high-value information, front-loaded with purpose and then covering usage, behavior, and safety. Every sentence earns its place; the provider list repeats the schema but is harmless. It is well-structured and scannable, though it could be slightly trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a configuration tool that mutates state across many providers, the description covers all essential aspects: what it sets, how to get ids, replacement behavior, failure modes, safety warning, and the complete provider list. It references the related list tool and gives clear operational guidance. Given no output schema, return details are minor. An agent can call this correctly with the provided information alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already described. The description adds practical meaning by specifying the accountIds source ('from list_connector_accounts') and clarifying that an empty array shares nothing, which is not fully evident from the schema. It reinforces provider choices by repeating the enum list, though this is slightly redundant. Overall, it enhances schema semantics without being essential.
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 opens with a specific verb and resource: 'Set WHICH of a connector's accounts this brand is allowed to post to and spend from.' It then lists concrete account types (Facebook Pages, Instagram, Google Ads, etc.) and explicitly contrasts with the sibling list_connector_accounts by instructing to pass ids from that tool. This makes the tool's purpose unmistakable and clearly distinguishes it from related list/disconnect tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage directives: 'Pass ids from list_connector_accounts,' explains the replacement semantics ('this REPLACES the current selection'), warns about empty list behavior, and advises consulting the user because 'posting as the wrong Page is a public mistake.' It also enumerates all providers, leaving no ambiguity about when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_post_refillConfigure the posting refillAIdempotentInspect
Turn the automatic posting refill on or off and set how it behaves. PASS ONLY WHAT CHANGES. enabled:false is the PAUSE — it removes the recurring job outright, and posts already queued are left alone (cancel those with cancel_scheduled if you want them gone). It starts in dryRun, which plans and previews without queueing; set dryRun:false only once a human has read a preview from run_post_refill. THE CADENCE IS THE BRAND’S POSTING TIMES, not a number here: three posting times means three posts a day. Raising maxImagesPerDay / maxVideosPerDay / maxCreditsPerDay above 0 lets it SPEND on new creative — at 0 (the default) it only reuses renders already in the Library and costs nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | No | TELEGRAM — which chat, group or channel posts go to (@username or numeric id). Without one, telegram is skipped: there is no default chat and posting to the wrong one is a public mistake. | |
| dryRun | No | true (the default) = plan and preview only, queue nothing. Set false ONLY after a human has read a preview. | |
| pageId | No | FACEBOOK / INSTAGRAM / THREADS — which connected Page to publish from (list_meta_pages). Omit for the brand’s only Page. | |
| boardId | No | PINTEREST — which board Pins go on (list_pinterest_boards). Without one, Pinterest is skipped: a Pin on the wrong board is a public mistake, so it is never guessed. | |
| enabled | No | on/off. false PAUSES it: the recurring job is deleted and nothing new is queued. Already-queued posts are untouched. | |
| channels | No | restrict it to these channels. Omit (or send an empty list) to use every connected channel that can carry each post. | |
| daysAhead | No | how far ahead to keep the queue full, 1–30 (default 7) | |
| postsPerDay | No | cap the posts per day BELOW the number of posting times. 0 (default) = use every posting time, which is where "3 a day" comes from. To post MORE per day, add posting times instead. | |
| maxImagesPerDay | No | how many NEW images a day it may render when the Library runs dry. 0 (default) = none, spend nothing. | |
| maxVideosPerDay | No | how many NEW videos a day it may render. 0 (default) = none. Video is the expensive one — hundreds of credits each. | |
| maxCreditsPerDay | No | a hard credit ceiling per day, checked BEFORE any render starts. It binds independently of the counts above. | |
| assetCooldownDays | No | how long before a Library render may be posted again (default 30). It never repeats one inside this window — it queues fewer posts and says so. | |
| linkedinOrganizationId | No | LINKEDIN — which company Page to post as (list_linkedin_pages). A single shared Page is used automatically; a Page that is not shared with this brand is ignored rather than failing the whole post. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors beyond annotations: enabled:false removes the recurring job (a side effect not implied by destructiveHint=false), dryRun starts by default, and spending limits with maxImagesPerDay=0 means only reuse. Warns about public mistakes for chatId and boardId. The description enriches the annotation profile (idempotentHint=true is consistent with setting configuration; openWorldHint=true aligns with the job removal). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being a lengthy paragraph, every sentence adds value. It is front-loaded with the core on/off action, then focuses on critical nuances (pause behavior, dryRun workflow, cadence, spending). The use of caps for emphasis ('PASS ONLY WHAT CHANGES', 'THE CADENCE IS...') highlights key points without redundancy. For a 13-parameter configuration tool, this is appropriately 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?
Covers all necessary context: how to pause, dryRun workflow, spending rules, asset cooldown, and channel-specific details (LinkedIn org, Pinterest board, Telegram chat). It references relevant sibling tools (run_post_refill, cancel_scheduled, list_meta_pages, etc.) for deeper dives. With no output schema, the description doesn't need to explain return values. For a complex config tool, nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds crucial meaning: explains the correlation between postsPerDay and posting times, the default spending behavior (0 = reuse only), and the independent credit ceiling. It clarifies that daysAhead and postsPerDay are caps, not direct counts. This goes beyond the schema's simple descriptions and ensures the agent understands the conceptual model.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact action ('Turn the automatic posting refill on or off and set how it behaves') and differentiates from siblings by naming run_post_refill for previews and cancel_scheduled for canceling queued posts. The title 'Configure the posting refill' matches the description, and the agent immediately knows this is the configuration tool, not the execution or retrieval tool.
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 explicit when-to-use guidance: 'PASS ONLY WHAT CHANGES' and explains the workflow with run_post_refill (read a preview before setting dryRun:false) and cancel_scheduled for canceling queued posts. Also clarifies the cadence is tied to posting times, not a number, which is critical for correct usage. No alternative is left ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_product_imageSet product photoAIdempotentInspect
Lock an image as the ad's real PRODUCT photo and SAVE it as this brand's default product, so every later plan_ad / render_ad / generate_image grounds on the true packaging without being told again. Pass imageUrl = a product shot's URL — an image from a prior research result (an organic Instagram/TikTok post, a scraped page image), a workspace / list_product_photos url, or any public product photo. The server downloads it and runs a product+safety check: a lifestyle/scene shot with no clear product, or an off-category / unsafe image, is REJECTED and NOTHING is locked or saved (the summary says why). On PASS it persists the photo to a DURABLE url, writes it to the brand's product library as the DEFAULT, and READS THE BRAND BACK to confirm — savedToBrand and the summary report what the brand ACTUALLY holds now, never what was asked for, so if it did not become the default you are told instead of finding out from a paid render. Bills one vision check. Reads YOUR saved brand for the category match (pass brandId to target a specific brand — switches this key's active brand like use_brand).
| Name | Required | Description | Default |
|---|---|---|---|
| brandId | No | a brand id/name from list_brands to lock the product for; omit to use the active brand | |
| imageUrl | Yes | the image URL to lock as the product (from a research result, a workspace / list_product_photos url, or any public product photo) | |
| source_note | No | a short note on where it came from, e.g. "from their IG post" |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by detailing that it bills one vision check, runs a product+safety check, rejects lifestyle/scene shots, persists to a durable URL, reads the brand back to confirm, and reports what actually holds rather than what was asked. This adds substantial operational context beyond readOnlyHint=false and idempotentHint=true.
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 lengthy but every sentence carries essential detail (validation, billing, confirmation, failure behavior, parameter context). It is front-loaded with the core purpose and then elaborates systematically. No fluff, though it could be tighter without losing critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mutation, validation, billing, brand switching) and lack of output schema, the description covers all necessary aspects: what happens on success/failure, how results are reported, parameter guidance, and side effects. An agent gets everything needed to call it correctly without surprise.
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 schema provides descriptions for all parameters (100% coverage), so baseline is 3. The description adds important meaning: imageUrl must be a product shot, not a lifestyle scene; brandId switches the active brand like use_brand; source_note is a short note. This clarifies usage beyond the schema, though the schema already gives adequate descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lock') and resource (product photo), and clarifies that it saves as the brand's default product, affecting future plan_ad/render_ad/generate_image calls. It explicitly distinguishes itself by explaining its role in grounding later tools on true packaging, which is unique among 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?
Provides clear context on when to use it: pass a product shot URL from specific sources (research results, workspace urls, etc.), and explains rejection criteria for inappropriate images. However, it doesn't explicitly name alternative tools or state when not to use it, though it implicitly contrasts with the read-back and active-brand switching like use_brand.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_roleChange a teammate’s roleAIdempotentInspect
Change a workspace member’s role — admin (full access incl. billing) or member (read-only on billing). A privilege change: confirm the exact person + new role with the user, then call with confirm:true.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | the new role | |
| Yes | the member’s email | ||
| confirm | No | REQUIRED true |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false (write), destructiveHint=false, and idempotentHint=true. The description adds valuable context: it highlights that this is a privilege change affecting billing access and mandates a confirmation step. This goes beyond the safety profile provided by annotations, disclosing the sensitive nature and required user consent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, followed by a clarifying privilege statement and a direct usage instruction. No wasted words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 3 parameters and no output schema, the description covers the action, role meanings, and the critical confirmation requirement. Minor gap: it doesn't explicitly state that confirm is required (though the description says 'call with confirm:true'), and the schema marks it optional, but this inconsistency is minor given the explicit instruction in prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all parameters with descriptions (100% coverage). The description adds meaning beyond the schema by explaining the role enum values (admin = full access incl. billing, member = read-only on billing) and emphasizing the confirm:true requirement. This enriches parameter understanding beyond the basic schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Change a workspace member’s role' with a specific verb and resource. It enumerates the two role values (admin, member) and their implications (full access vs read-only on billing). This distinguishes it from related tools like invite_member or remove_member by focusing on privilege modification.
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 explicit usage instruction: confirm the exact person and new role with the user before calling, and set confirm:true. It provides context (privilege change) but does not explicitly contrast with alternative tools. Still, the confirmation requirement is critical behavioral guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_tiktok_post_ad_authorizationTurn Spark-Ads authorization on or off for the brand’s own postAInspect
Turn TikTok's 'Ad authorization' setting ON or OFF for a post the authorized account owns — THIS IS WHERE A SPARK ADS AUTHORIZATION CODE COMES FROM. Until now the only way to get one was a human opening the TikTok app and copying a string; that is still true for somebody ELSE's post, and no longer true for the brand's own. Turning it on mints the code, which you then hand to authorize_tiktok_ads_spark_post so an ad account may promote the post. IT IS CONFIRM-GATED ON THE WAY ON, and not because it spends: TikTok changes the post's privacy to 'Available for Ads', sends it to their ad review team, says the post 'may also appear as an ad on third party platforms', and treats the call as accepting their Advertising Content Terms on the owner's behalf. Turning it OFF needs no confirm — but TikTok REFUSES to turn it off while an active Spark Ad is using the post, so pause those campaigns first. authorizationDays must be one of 7, 30, 60, 180, 365. THE ANSWER IS THE READ-BACK: the reply carries the post's real authorization status and its code, because TikTok's own response body is empty. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status).
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | the TikTok post id | |
| confirm | No | REQUIRED true when enabling — it makes the post publicly promotable and accepts TikTok’s advertising terms on the owner’s behalf | |
| enabled | Yes | true turns Ad authorization ON (and mints the Spark Ads code); false turns it off | |
| authorizationDays | No | 7 | 30 | 60 | 180 | 365 — TikTok publishes exactly those five; default 30 |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false, but the description goes far beyond: it explains that turning on is 'CONFIRM-GATED' due to side effects (privacy change, ad review, accepting terms on owner's behalf), that turning off is refused while active Spark Ads, and that the response body is empty so the read-back is the actual answer. These are critical behaviors not derivable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place. It front-loads the core action, then efficiently covers prerequisites, side effects, failure conditions, and output semantics. No filler; the length is warranted by the tool's complexity.
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 tool is complex: it has side effects, prerequisites, a non-standard response (empty body), and interacts with other tools. The description covers all of these: how to obtain the code, how it differs from other posts, what happens on enable, when disable fails, and what the response contains. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds value by clarifying the role of `confirm` (required on enabling) and `enabled` (mints the code). It also reinforces the allowed values for `authorizationDays` and the meaning of the read-back, which enriches but doesn't entirely rewrite the schema. Slightly above baseline because of the confirm/enable interplay.
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 the exact verb, resource, and scope: 'Turn TikTok's Ad authorization setting ON or OFF for a post the authorized account owns.' This clearly distinguishes it from siblings like `get_tiktok_post_ad_authorization` or `delete_tiktok_post_ad_authorization`. It also explicitly contrasts with the case of 'somebody ELSE's post', reinforcing its specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: it's the method to obtain a Spark Ads code for the brand's own post, vs the alternative for others' posts. It notes the prerequisite: 'NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status).' It also warns about turning off when active Spark Ads are present. This tells the agent exactly when to use it and what to check first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_youtube_thumbnailSet the custom thumbnail on a YouTube videoAIdempotentInspect
Set the CUSTOM THUMBNAIL on a video already on the connected channel, using a Hermoso image — a make_thumbnail render, a generated image, or a frame. The thumbnail is the single biggest lever on YouTube click-through and YouTube otherwise auto-picks a frame, so a published video without one is leaving reach on the table. It changes ONLY the thumbnail — video, title and privacy are untouched — but it is public and immediate, so show the user which image is going on which video and get a yes first. Custom thumbnails require a VERIFIED YouTube channel (a phone number at youtube.com/verify); without it YouTube refuses and the error says so. Images over YouTube’s 2MB cap are compressed automatically. The image must be Hermoso-HOSTED, which is not the same as Hermoso-GENERATED: the user’s own artwork works, put it through upload_file first and pass the URL that returns. An arbitrary external host is refused. 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | the YouTube video id (what post_to_youtube returned) | |
| imageUrl | Yes | a Hermoso-hosted image URL — a make_thumbnail / list_library render, OR any image of the user’s own passed through upload_file first. An arbitrary external host is refused. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This description goes well beyond the annotations. It discloses that the operation is public and immediate, that custom thumbnails require a verified channel, that images over 2MB are auto-compressed, and that only Hermoso-hosted URLs are accepted (external hosts refused). It also instructs the agent to show the user the image and obtain consent before applying. These behavioral details are not present in the annotations, adding significant transparency for correct and safe invocation.
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 informative but slightly verbose, with one motivational sentence ('The thumbnail is the single biggest lever...') that, while providing context for importance, is not strictly necessary for tool invocation. However, the core purpose is front-loaded, and all critical constraints and side effects follow in a logical order. Every sentence contributes meaningful information, and the length is justified given the complexity of the behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two parameters, no output schema, and minimal annotations, the description covers all essential aspects: the prerequisite of a verified channel, the side effects of being public and immediate, the host requirements, compression behavior, and the need for user confirmation. It provides comprehensive guidance for an agent to invoke this tool correctly and safely, with no obvious missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, and both parameters already have meaningful descriptions: videoId references the YouTube video id from post_to_youtube, and imageUrl clarifies acceptable sources (make_thumbnail, list_library, or upload_file) and explicitly rejects arbitrary external hosts. The tool description adds complementary details such as the 2MB compression cap and reinforces the hosting requirement, providing additional value beyond the schema parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise action: 'Set the CUSTOM THUMBNAIL on a video already on the connected channel, using a Hermoso image.' It specifies the exact resource (video), the action (set thumbnail), and the type of image (Hermoso-hosted). It clearly distinguishes this from auto-picked frames and other related tools (e.g., set_youtube_watermark) by focusing solely on the custom thumbnail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it applies to videos already on the connected channel, requires a verified YouTube channel, and is for setting a custom thumbnail only (not altering video, title, or privacy). It also advises that the operation is public and immediate, recommending a user confirmation before proceeding. While it does not explicitly name an alternative tool, the constraints and scope are unequivocal, effectively guiding when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_youtube_watermarkSet or remove the YouTube branding watermarkAIdempotentInspect
Set (or remove) the BRANDING WATERMARK — the small subscribe badge overlaid on EVERY video on the channel, including ones uploaded later. One generated asset brands the whole channel at once, which is why it is worth doing before a batch of uploads rather than after. YouTube wants a SQUARE image, at least 150x150, under 10MB, and it renders SMALL: a full logo lockup with text will not read at that size. By default it shows for the whole video; timingType offsetFromStart/offsetFromEnd with offsetMs and durationMs narrows it. THE DATA API PUBLISHES NO WAY TO READ A WATERMARK BACK — there is only set and unset — so this reports 'accepted', never 'confirmed', and says so rather than claiming a verification it did not get. 0 credits. Needs YouTube connected.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | defaults to 'set' when an imageUrl is given | |
| imageUrl | No | any public https image URL — a Hermoso render, or ANY file of your own brought in with upload_file. Square, at least 150x150 | |
| offsetMs | No | when the watermark appears, relative to timingType | |
| durationMs | No | how long it stays on screen | |
| timingType | No | leave off for a watermark that shows for the whole video |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by explicitly disclosing that the Data API cannot read a watermark back, so the tool reports 'accepted' but never 'confirmed'. This is a crucial behavioral limitation that prevents the agent from expecting verification. It also discloses the image rendering constraints. The description adds significant value beyond the annotations, which only provide generic 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?
The description is long but every sentence carries critical information. It is front-loaded with the purpose, then covers requirements, timing, and the verification limitation. There is no fluff; each clause adds practical value. The structure is logical and 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?
For a tool with 5 optional parameters and no output schema, the description covers essential context: prerequisites, image constraints, timing behavior, default parameter values, and the non-verifiable nature of the API. An agent has everything needed to invoke it correctly and set appropriate expectations. The sibling set is large, but the description's specificity makes this tool self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra meaning by explaining default behavior (action defaults to 'set' when imageUrl is given), the timingType options and their effect, and image requirements (square, at least 150x150). These details enrich the parameter understanding beyond the schema's terse descriptions, so a slight boost is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: set or remove the YouTube branding watermark. It specifies the resource (branding watermark on the channel) and the action (set/unset). It distinguishes from siblings like set_youtube_thumbnail by focusing specifically on the watermark overlay. The verb-resource combination 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?
The description provides practical guidance on when to use this tool (before a batch of uploads rather than after) and includes prerequisites (YouTube connected, 0 credits). However, it does not explicitly contrast with alternatives like set_youtube_thumbnail or give negative guidance on when not to use it. The timing context is helpful but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stitch_videoStitch multi-scene videoAInspect
Render a multi-scene STITCHED video (≥2 scenes) — ONLY for spots LONGER than ONE clip of the chosen model. A multi-beat ad that FITS one clip renders better and cheaper as ONE single-pass generate_video/render_ad (a single generation carries the whole hook→demo→payoff arc) — never stitch those. What fits is the model’s own maximum from hermoso_capabilities, not a fixed number: 15s on most models, 30s on the longest-clip one, so a 30s spot need not be stitched at all if you name that model. Blocks until done. Spends credits.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | video model id from hermoso_capabilities — omit to let the router pick | |
| voice | No | voiceover voice name, e.g. Rachel / George | |
| scenes | Yes | array of scene objects (visual + optional voiceover/seconds) | |
| voiceover | No | full voiceover script spoken across the scenes | |
| resolution | No | 1080p (default), or 480p/720p for a cheaper draft | |
| aspectRatio | No | output aspect ratio, e.g. 9:16 (default) / 1:1 / 16:9 | |
| durationSeconds | No | total spot length in seconds (defaults to the sum of the scenes’ seconds) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is not read-only and not destructive. The description adds critical behavioral info: 'Blocks until done' and 'Spends credits' - both beyond the annotations. It could also mention what the output resource is (e.g., a video URL), but the key side effects (blocking and cost) are disclosed.
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 but dense, with every sentence serving a purpose. It frontloads the purpose, then immediately provides usage conditions, alternatives, and a concrete example of how to determine fit. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 params, one required) and no output schema, the description covers the critical aspects: when to use, how to determine fit, and what to expect (blocking, cost). It could be slightly more explicit about the output (e.g., 'returns a video file path'), but the current description is sufficient for an agent to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description enriches parameter understanding by clarifying the 'model' parameter ('video model id from hermoso_capabilities — omit to let the router pick') and explaining the logic behind durationSeconds (defaults to sum of scenes). This goes beyond bare schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Render a multi-scene STITCHED video (≥2 scenes)'. It immediately distinguishes itself from single-generation tools like generate_video/render_ad by emphasizing the multi-scene stitched nature. This clearly separates it 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?
Explicit guidance is provided: 'ONLY for spots LONGER than ONE clip of the chosen model' and 'never stitch those' that fit one clip. It names the exact alternative (generate_video/render_ad) and references hermoso_capabilities to determine the model's maximum clip length, giving concrete decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_getRead a workspace storeARead-onlyInspect
Read one of this workspace’s data stores by key, for visibility into what the app holds — playbooks, swipefile, saved locations, avatars, creations, chats, brand, memory, skills. Read-only, free. Allowed keys: heist.memory.v1, heist.skills.v1, heist.playbooks.v1, heist.avatars.v1, heist.locations.v1, heist.chats.v1, heist.creations.v1, heist.assets.v1, heist.brand.v1, adInspo.swipefile.v1. (The typed tools — list_memory / list_skills / get_brand — are friendlier for those; use store_get for the rest.)
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | the store key to read (one of the allowlisted keys) | |
| limit | No | max array items to return (default 50) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description reinforces 'Read-only, free' and adds context about the store contents and the allowlist of keys. It also notes the existence of typed alternatives, which helps the agent choose correctly. This goes beyond simply repeating annotations, though it doesn't detail return format or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver purpose, scope, allowed keys, and routing guidance with zero filler. The primary action is front-loaded before alternatives are mentioned. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter tool with no output schema, the description covers the purpose, allowed keys, and when to use alternatives. It is complete for an agent to call this tool correctly without needing further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents the parameters. The description adds meaningful value by listing the exact allowed key values, which the schema does not enumerate. This goes beyond the baseline of 3, as it provides actionable semantics for the key parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read'), a specific resource ('one of this workspace’s data stores'), and a clear access method ('by key'). It enumerates what the stores hold (playbooks, swipefile, etc.) and explicitly contrasts with sibling typed tools (list_memory, list_skills, get_brand), making its function unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool ('Read-only, free') and when not to: it names the friendlier typed tools for specific keys and advises 'use store_get for the rest.' This gives clear routing guidance against alternatives without requiring the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_meta_webhooksSubscribe a Facebook Page to real-time eventsAIdempotentInspect
Have Meta PUSH events to Hermoso instead of Hermoso polling for them. Subscribe a Page to feed (comments, posts, likes and shares — this is what makes a new comment ARRIVE rather than be polled for), mention (someone mentions the Page), leadgen (a lead-ad form submission delivered the moment it happens, which turns "read the leads when asked" into "the leads arrive"), and messages (an inbound Messenger or Instagram DM — THE ONLY WAY to be told about one, and Meta’s 24-hour reply window starts the moment it arrives, so being told rather than polling is time on the clock). Read what has arrived with list_meta_webhook_events. THE ANSWER IS READ BACK FROM META, never the 200: Meta can accept a subscription and record FEWER fields than you asked for, and a caller told "subscribed to leadgen" whose leads never arrive has no way to discover why — so any field Meta did not record is named. Fields Hermoso does not consume (message_reactions, messaging_postbacks, message_echoes) are refused by name with the reason, so an agent gets a fact rather than "unsupported". 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | what to be told about. At least one — Meta marks it required, and defaulting it would decide on the brand’s behalf what they hear about. | |
| pageId | No | Facebook Page id — omit when only one Page is connected |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds crucial context beyond annotations: the answer is read from Meta (not the 200), unrecorded fields are named, unsupported fields are refused with reason, and the 0 credits cost. This goes well beyond the generic annotation flags and is essential for correct usage.
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 excessively verbose with multiple parenthetical asides and lengthy explanations. While it front-loads the main purpose, it loses focus in detailed field explanations and behavioral notes that could be condensed significantly. It is more than viable but not 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?
Despite no output schema, the description fully covers expected behavior: read-back from Meta, field refusal, next steps with list_meta_webhook_events, and cost. Comprehensive for a webhook subscription tool with no missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description adds meaningful semantics for each enum value (what feed, mention, leadgen, messages entail) and explains why pageId is optional. This elevates the parameter understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool subscribes a Page to Meta webhooks, explicitly contrasting it with polling, and names the sibling tool for reading events (list_meta_webhook_events). It specifies the exact verb (subscribe) and resource (Meta Page real-time events), making the purpose 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 explains when to use push vs polling, and recommends reading arrivals with list_meta_webhook_events. It does not explicitly say when not to use it, but the push-vs-poll context implies the alternative. No explicit exclusions, but clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_insightsThreads insightsARead-onlyInspect
Performance for ONE Threads post (views, likes, replies, reposts, quotes, shares) when postId is given, or for the whole ACCOUNT when it is omitted — views, likes, replies, reposts, quotes, LINK CLICKS, follower count, and follower_demographics broken down by country, city, age or gender. Note the two metric sets differ: "clicks" exists only at account level and "shares" only on a single post, and an unknown metric is refused by name rather than dropped. since/until narrow the account window (Threads has no data before 2024-04-13, and followers_count / follower_demographics are lifetime metrics that ignore a window — the reply says so when that happens). Threads returns no demographics below 100 followers; an absent block means the account is under Meta’s floor, NOT that the audience is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | YYYY-MM-DD window start (account scope) | |
| until | No | YYYY-MM-DD window end (account scope) | |
| postId | No | post id from list_threads_posts — omit for account-level insights | |
| metrics | No | account metrics: views, likes, replies, reposts, quotes, clicks, followers_count, follower_demographics | |
| breakdown | No | country / city / age / gender — required by follower_demographics, exactly one |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description goes far beyond by detailing important behavioral traits: unknown metrics are refused by name rather than silently dropped; followers_count and follower_demographics are lifetime metrics that ignore the since/until window; and an absent demographics block means the account has fewer than 100 followers, not an empty audience. These are non-obvious behaviors that an agent must know to interpret results correctly, and they are not captured in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph but is well-organized with dashes and semicolons to separate logical pieces. It front-loads the core purpose (performance for one post or the whole account) and then appends the necessary caveats (metric set differences, date window behavior, demographics floor). Every sentence carries information; there's no filler. It is moderately long but justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—two scopes, different metric sets, breakdown requirement, date window quirks, and the demographics floor—the description covers a large amount of context. It doesn't explicitly describe the output format (e.g., JSON structure), but that's acceptable given there is no output schema and the tool returns insights. It also doesn't reference related tools like meta_page_insights or instagram_insights, but the scope is clearly defined. Overall, the description provides enough information for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% coverage with descriptions for all 5 parameters (since, until, postId, metrics, breakdown). The description adds substantial meaning beyond the raw schema: it explains that metrics differ by scope, that breakdown is required by follower_demographics and exactly one value must be chosen, and that the date window only applies to account-level data. It also clarifies that postId comes from list_threads_posts. These enrich the parameter semantics well beyond 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 specifies the exact resource (a single Threads post or the whole account) and the metrics available for each scope (views, likes, replies, reposts, quotes, shares for a post; views, likes, replies, reposts, quotes, clicks, followers_count, follower_demographics for an account). It explicitly distinguishes between the two modes of operation and even clarifies that the metric sets differ (clicks only at account level, shares only on a post). This makes it clear what the tool does and how it differs from other insights tools like instagram_insights or meta_page_insights.
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 guidance on when to use the tool: providing a postId gives single-post performance, omitting it gives account-level insights. It also explains the effect of since/until on the account window and notes the lifetime nature of followers_count and follower_demographics. While it doesn't explicitly name alternatives or say 'use this instead of X', the distinction from other platform insights tools is implicit through the Threads-specific wording. The behavior for unknown metrics and the demographics floor are also covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_profileLook up a public Threads profileARead-onlyInspect
Read ANY public Threads account by handle — name, bio, avatar, verified badge, follower count, and its lifetime likes / quotes / reposts / views. This is competitor and creator research on Meta’s own data rather than a scraper: read a rival’s positioning straight off their profile instead of guessing it, then read what they are posting with list_threads_profile_posts and draft the brand’s answer. A bare handle ("nike"), an "@nike" and a threads.net profile link all resolve — Meta matches the handle EXACTLY, so a display name will not. IF NOTHING COMES BACK, DO NOT SAY THE ACCOUNT DOES NOT EXIST: read the note, which says whether that is a real absence or our app’s approval state. Read-only, 0 credits. Needs Threads connected.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | the Threads handle — "nike", "@nike", or a threads.net profile link |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds critical behavior beyond that: the exact-match handle rule, the warning about empty results (not to assume non-existence), the read-only and zero-credit nature, and the prerequisite of having Threads connected. This is substantial extra context that cannot be inferred from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence serves a purpose: purpose/data, differentiation, handle formats, error handling, and prerequisites. It is front-loaded with the core purpose and ends with the most critical warning. While it could be trimmed slightly, the structure is logical and no part is redundant with 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 one-parameter read tool with no output schema, the description is fully complete: it lists what is returned, how to pass the username, what to do on empty results, and the required connection. It also connects to the next logical step (list_threads_profile_posts). An agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage and a single parameter, the schema already documents the accepted handle formats. The description adds value by explaining that Meta matches the handle exactly (so display names fail) and reiterating the three format options, which clarifies edge cases beyond the schema's simple string 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 ('Read'), a clear resource ('public Threads account by handle'), and enumerates exact data returned (name, bio, avatar, verified badge, follower count, lifetime likes/quotes/reposts/views). It also differentiates from sibling tools by explicitly referencing list_threads_profile_posts and positioning itself as competitor research on Meta's own data rather than a scraper.
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 explicit when-to-use context (competitor/creator research) and directly suggests the next step (read posts with list_threads_profile_posts). It clarifies accepted handle formats, warns that display names will not resolve, and instructs how to interpret an empty result (read the note), effectively preventing a common misuse. It also states the prerequisite (Threads connected).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_publishing_limitThreads quota remainingARead-onlyInspect
How much of the brand’s Threads quota is left right now — posts (250 per rolling 24 hours), replies (1,000), DELETIONS (100) and location searches (500) — each as used, total and REMAINING. Check it before any bulk operation, and read it the moment Threads starts refusing: a quota refusal is otherwise indistinguishable from a broken connection or a missing permission, and reconnecting cannot fix it. A number comes back null when Threads did not report it, never as 0 — "none left" and "we could not tell" are different answers. Read-only, 0 credits. Needs Threads connected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description reinforces the read-only nature with 'Read-only, 0 credits' and adds a valuable behavioral nuance that a null value means Threads did not report it, not that it is zero. This distinguishes between 'none left' and 'could not tell' – a subtle but critical distinction. This exceeds what annotations provide and is particularly useful for interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the main purpose (quota remaining) and then adds context on when to use it and null semantics. Every sentence contributes meaning: the quota breakdown, the usage guidance, and the null interpretation. While slightly dense, it is efficient and not padded. The structure could be improved with bullet points, but it remains highly informative.
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 status tool with no output schema, the description fully covers what an agent needs: what counts are returned (used, total, remaining), the specific quota categories, when to check, and how to interpret null vs 0. It also clarifies the cost (0 credits) and the prerequisite (Threads connected). Nothing essential is missing for correct invocation and interpretation.
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 schema coverage is trivially 100%. The description does not need to explain parameters. Since there are none, the description correctly omits any parameter details. The baseline for 0 params is 4, and there is no reason to mark down.
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 explicitly states what the tool does: reports how much of the brand's Threads quota is left, enumerating the four quota types with their limits (posts 250, replies 1,000, deletions 100, location searches 500). It uses a clear verb-resource framing ('How much... is left') and distinguishes it from sibling tools by specifying it's about Threads quota specifically, not posting or listing. This is highly unambiguous and distinct from the many other Threads tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Check it before any bulk operation' and 'read it the moment Threads starts refusing'. It also explains why it's relevant by disambiguating quota refusal from connection/permission issues, and clarifies that reconnecting cannot fix it. This is actionable and prevents misuse. No alternatives are mentioned, but the conditions are crystal clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_accountRead the connected TikTok accountARead-onlyInspect
Read the connected TikTok account: display name, username, bio, verified status, and their follower / following / total-likes / video counts. Use it for “how many followers do we have on TikTok”, “how is our TikTok doing”, or to confirm whose account is linked before posting. Read-only. Needs TikTok connected (Settings ▸ Connectors ▸ TikTok).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds value by explicitly stating it is read-only and requires a connected TikTok account, and by listing the exact data returned, which clarifies what the agent can expect without needing an 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?
The description is two sentences, highly concise, and front-loaded with purpose. It lists the returned fields, gives usage examples, and states the prerequisite in a compact, scannable format. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and a simple read operation, the description is complete. It specifies the data returned (all relevant account fields), provides usage examples, and states the required connection state. Since there is no output schema, the description fully covers what an agent needs to know to call it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema description coverage is 100%, so there is no parameter documentation burden. With no parameters, the baseline is 4, and the description compensates well by explaining the output content, which serves as implicit parameter semantic information (i.e., what the tool returns). The description clarifies the meaning of the tool's function despite lacking parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads the connected TikTok account and enumerates the specific fields returned (display name, username, bio, verified status, follower/following/likes/video counts). It distinguishes itself as a read-only account profile tool, but does not explicitly differentiate from sibling tools like tiktok_account_insights or tiktok_account_status, which could be confused for similar purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete example queries ('how many followers do we have on TikTok', 'how is our TikTok doing') and a use case (confirm whose account is linked before posting). It also states the prerequisite (TikTok connected). However, it does not mention when NOT to use this tool or suggest alternative siblings for more detailed insights, leaving some ambiguity for edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_account_insightsTikTok follower demographics and daily performanceARead-onlyInspect
The connected TikTok account's OWN analytics: follower demographics broken down by AGE, GENDER, COUNTRY and CITY, the daily series (video views, profile views, likes, comments, shares, reached audience, engaged audience, follower gained/lost/net, and the profile-button clicks a verified Business account collects), and the lifetime counters. This is TikTok's twin of instagram_insights and youtube_channel_report. TWO PRECONDITIONS TIKTOK ENFORCES ON THE DEMOGRAPHICS, and this tool reports which one is in the way instead of returning an empty breakdown: the account must be a BUSINESS account, and it must have at least 100 FOLLOWERS. Below that TikTok withholds the distributions for privacy, which is not the same as an audience it could not measure. The look-back is capped at 60 DAYS, which is SHORTER than the 90 days the brand-mentions tools cover, and daily numbers lag by up to 48 hours. The bio, verified badge and profile link are deliberately not readable here. That needs a TikTok permission this authorization does not request, and tiktok_account on the TikTok posting connector already returns all three. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION with the audience-insights permission (tiktok_account_status says whether this brand has it). Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | defaults to everything this authorization can read. Demographics are audience_ages, audience_genders, audience_countries, audience_cities | |
| endDate | No | YYYY-MM-DD (UTC). Default is yesterday | |
| startDate | No | YYYY-MM-DD (UTC). Default is 7 days ago; TikTok keeps at most 60 days |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint, openWorldHint, destructiveHint). The description goes far beyond them by disclosing failure behavior (reports which precondition is in the way instead of empty verdict), data freshness (lag), scope limits (60 days), what is deliberately excluded (bio, badge, link), and the permission requirement. It also explicitly states 'Read-only, free.' This provides rich context about side effects, auth needs, and limitations, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and detailed, but every sentence adds substantive value—preconditions, failure behavior, look-back, exclusions, permissions. It is front-loaded with the core purpose, then proceeds logically. While it could be tightened slightly (e.g., instead of 'TWO PRECONDITIONS' phrasing), the density is appropriate for the tool's complexity. It's not padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and minimal annotations, the description fully compensates. It tells the agent exactly what data to expect, what conditions affect availability, how to interpret potential gaps, and what permissions are needed. It also differentiates from sibling analytics tools and explains exclusions. Nothing an agent needs to correctly invoke and interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra parameter information: it echoes the schema's field list and clarifies that demographics are the four audience_* fields, and it mentions the look-back cap relative to startDate. However, it doesn't add significant new meaning beyond the schema for any parameter. The defaults and formats are already in the schema, so the description adds marginal value.
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 ('get' analytics) and a specific resource (the connected TikTok account's own analytics), and enumerates precisely what data is returned (demographics by age/gender/country/city, daily series, lifetime counters). It explicitly differentiates from siblings by calling it TikTok's twin of instagram_insights and youtube_channel_report, and it clarifies what is NOT covered (bio, verified badge, profile link) pointing to tiktok_account. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance: it details the two TikTok preconditions (business account, ≥100 followers), explains that the tool reports which precondition is blocking instead of returning empty data, notes the 60-day look-back cap and 48-hour lag, and specifies the required authorization and permission. It also directs users to tiktok_account_status to check permission. This is model guidance with clear alternatives and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_account_statusCheck the TikTok account authorizationARead-onlyInspect
Report whether this brand holds the TikTok ACCOUNT-HOLDER authorization — the SECOND, separate consent on the same TikTok app that the TikTok Ads connection uses. TikTok issues two different grants: the ADVERTISER one (campaigns, budgets, reporting — that is tiktok_ads) and this ACCOUNT one, which is what lets Hermoso read and manage the comments on the brand's own TikTok posts and mint Spark-Ads authorization codes for them. Holding one does NOT give you the other, so a workspace can be fully connected for ads and still answer 'not connected' here — that is a real third state, not a broken session. Reports the state, the TikTok business id every other tool in this family uses, the scopes the grant actually carries, and any scope MISSING from it (TikTok binds scopes at authorize time and never retroactively, so a grant made before a scope was added simply does not have it and only a reconnect fixes that). Connecting is the one step that needs a browser — the reply carries the exact URL to send the user to. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description goes well beyond them: it discloses the third state (ads connected but account not), the fact that TikTok binds scopes at authorize time and never retroactively, that missing scopes require a reconnect, and that the tool returns a connect URL. It also explicitly states 'Read-only, free', matching annotations without contradicting them. This is rich, non-redundant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place, explaining the nuanced authorization model and the tool's outputs. It is front-loaded with the core purpose and the key distinction. It could be tightened slightly (the sentence about scopes is a bit dense), but it is well-structured and not padded. A 4 acknowledges the length while recognizing the informational density.
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 status-check tool with no output schema, the description fully specifies what the reply contains: state, TikTok business id, scopes carried, missing scopes, and the connect URL. It also clarifies the third-state scenario and the reconnect requirement. No critical detail an agent needs to interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty, so there is nothing for the description to add about parameter semantics. Baseline 4 is appropriate: the description correctly focuses on what the tool returns rather than inputs, and it doesn't waste space on non-existent parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Report whether') and a precise resource ('TikTok ACCOUNT-HOLDER authorization'), and explicitly distinguishes it from the ADVERTISER grant used by tiktok_ads. This differentiates it clearly from the sibling tiktool tiktok_account and the ads-related tools, so an agent can instantly know what it checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains exactly when this tool matters by contrasting the two grants: 'Holding one does NOT give you the other', and it notes that a workspace can be fully connected for ads yet 'not connected' here. It also tells the agent that connecting requires a browser and that the reply carries the URL, guiding the user through the necessary action. This is explicit enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_category_benchmarkTikTok industry averages for a business categoryARead-onlyInspect
What an average TikTok Business account in a given industry looks like: mean likes, comments, shares, video count, follower count, 30-day follower growth, engagement rate and video views. Pair it with tiktok_account_insights to answer 'are we ahead of our category or behind it', which neither number answers alone. These are TikTok's own cross-account averages, not this brand's numbers. businessCategory must be one of TikTok's twenty-five published values. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| businessCategory | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds valuable context beyond these: it requires TikTok account authorization, clarifies the data source (TikTok's own cross-account averages), and explicitly states 'Read-only, free.' No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but multi-sentence; every sentence adds value: purpose, pairing, clarification of data origin, category constraint, auth requirement, and read-only/free status. The main function is front-loaded, and it avoids unnecessary fluff. Slightly long but efficient.
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 lookup tool with one enum parameter, no output schema, and read-only annotations, the description covers purpose, usage, data source, auth, and constraints. It does not describe the return format, but given the output schema is absent and the tool is straightforward, this is acceptable. It is complete enough 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?
The single parameter businessCategory has a complete enum in the schema, so schema coverage is effectively 100%. The description only restates that it must be one of TikTok's published values, which adds no new meaning beyond the schema. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool returns (mean likes, comments, shares, video count, follower count, follower growth, engagement rate, views) for an industry category, and explicitly contrasts it with tiktok_account_insights. This clearly distinguishes the tool from siblings and gives a specific verb (get averages) and resource (TikTok industry benchmarks).
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 explicit when-to-use guidance: 'Pair it with tiktok_account_insights to answer are we ahead of our category or behind it, which neither number answers alone.' This names the alternative tool and the condition under which it should be combined. It also clarifies that the numbers are not the brand's own, which is a key usage nuance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_creator_infoRead the connected TikTok creator’s posting optionsARead-onlyInspect
Read the connected TikTok creator’s REAL posting options BEFORE posting: which privacy levels THEY are allowed to use, whether comments / duet / stitch are available on their account, their maximum video length, and their nickname. TikTok REQUIRES that the user is shown these actual options and picks a privacy level — never assume or default one. Call this first, show the options, get the user’s pick, then call post_to_tiktok with destination:"post". The SAME privacy options govern PHOTO posts (slideshows), not just video — TikTok takes the same four levels on both. Needs TikTok connected (Settings ▸ Connectors ▸ TikTok).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description does not contradict this. It adds valuable context beyond the annotation by specifying what data is read (REAL options, four privacy levels), the requirement to surface them to the user without defaulting, and that this applies to both video and photo posts. This enriches the agent's understanding of the tool's behavior without conflicting with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed and front-loaded with the primary purpose, then expands with usage instructions and constraints. It is arguably slightly lengthy but every sentence adds necessary information (prerequisite, photo equivalence, required call order). 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?
Given the tool has no parameters and no output schema, the description fully covers what an agent needs: what the tool reads, why it's required, how to sequence it with post_to_tiktok, and the connection prerequisite. It leaves no critical gaps 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?
The tool has zero parameters and the schema indicates 100% coverage, so there is nothing to document. The description goes beyond schema by detailing the content returned (privacy levels, features, nickname), which indirectly aids the agent in understanding what information to expect, effectively compensating for the absence of an output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (read) and resource (connected TikTok creator's posting options), listing specific data elements (privacy levels, comment/duet/stitch availability, max video length, nickname). It differentiates itself from siblings like post_to_tiktok by framing itself as the pre-posting read step.
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 explicitly instructs the agent to call this tool first before posting, then to call post_to_tiktok with destination:'post' after showing options and getting user's pick. It also specifies the prerequisite of having TikTok connected, and notes that the same privacy options apply to photo posts, covering both when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_mention_top_termsThe words and hashtags inside the brand’s TikTok mentionsARead-onlyInspect
The top 20 KEYWORDS and the top 20 HASHTAGS appearing in the captions of the posts that mention this brand. It is what people say when they talk about it, rather than which posts they said it in. Two TikTok endpoints behind one tool because they take identical parameters and answer the same question at two granularities; kind:'KEYWORDS' or kind:'HASHTAGS' calls only one. Counted across the top 1,000 mentioning posts of the last 90 days, so this is the language of the mentions and not of TikTok at large. Same BUSINESS-account precondition as every mentions tool. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION with the brand-insights permission. Read-only, free.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | default BOTH, which makes two calls | |
| regions | No | two-letter codes to narrow which mentioning posts are counted |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint), the description adds crucial behavioral details: requires TikTok account authorization with brand-insights permission, counts across the top 1,000 mentioning posts of the last 90 days, and explains that kind:'KEYWORDS' or kind:'HASHTAGS' triggers a single endpoint while BOTH makes two calls. It also notes it is read-only and free, reinforcing the annotation.
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 logically ordered: first states the core purpose, then clarifies granularity, scope, preconditions, and auth. Every sentence serves a purpose, and the key information is front-loaded. No redundant or filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with only two parameters and no output schema, the description covers the essential aspects: return content (top 20 terms), scope (1000 posts, 90 days), authorization, and parameter behavior. It could optionally describe the exact response structure, but the description implies the output sufficiently for an agent to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful context about the 'kind' parameter: it explains the dual-endpoint nature and that each enum value calls one or both endpoints, which goes beyond the schema's simple enum listing. The regions parameter is already well-described in the schema, so the description does not need to add more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the top 20 keywords and top 20 hashtags from captions of posts mentioning the brand. It explicitly says 'It is what people say when they talk about it, rather than which posts they said it in', distinguishing it from post-level mention tools. The resource and action are 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?
The description gives context on when to use (to understand the language around brand mentions) and contrasts it with post-level tools. It mentions the BUSINESS-account precondition, but does not explicitly name sibling tools or provide 'when not to use' guidance. The distinction from post-level tools is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_meta_webhooksStop Meta pushing events for a PageADestructiveIdempotentInspect
Remove this app’s webhook subscription from a Page, so Meta stops pushing its events. It removes the WHOLE subscription — Meta’s DELETE takes no field list — so it is all fields or none; to keep some, call subscribe_meta_webhooks again with just those. Nothing published or posted is affected; only the notifications stop. THE ANSWER IS THE READ-BACK: a subscription still present when read back means the unsubscribe did NOT take effect, and that is reported rather than the 200. 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Facebook Page id — omit when only one Page is connected |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint and idempotentHint, but the description adds crucial behavior: the whole subscription is removed (no field list), the read-back is the source of truth (a lingering subscription means the unsubscribe failed), and this failure is reported instead of a plain 200. This goes well beyond the structured 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?
The description is information-dense, covering purpose, behavior, and caveats without excessive verbosity. The emphasis on 'THE ANSWER IS THE READ-BACK' is useful though slightly loud, but every sentence contributes to the agent's decision and execution.
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, the description fully covers what is removed, what is not affected, how to interpret the result, and the fallback (re-subscribe). It even mentions the credit cost (0 credits). Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for pageId ('Facebook Page id — omit when only one Page is connected'). The tool description does not add extra parameter meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Remove'), the resource ('webhook subscription from a Page'), and the effect ('stops Meta pushing its events'). It also distinguishes from the sibling subscribe_meta_webhooks by explaining the all-or-nothing nature, so an agent can immediately tell this out from its complementary tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance: if you want to keep any fields, call subscribe_meta_webhooks again with just those. It also clarifies that content is unaffected, only notifications stop. It doesn't list other alternatives, but the main one is covered, so usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_brandUpdate brand fieldsAInspect
Patch SPECIFIC fields of the workspace brand profile (name, domain, sells, summary, category, audience, positioning, voice, style, goal) WITHOUT overwriting the rest — a read-modify-write on the saved brand. Use for “change our voice to playful”, “we sell to dentists now”. To onboard a brand from scratch, use draft_brand. Only pass the fields you’re changing.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | current marketing goal | |
| name | No | ||
| sells | No | what the brand sells | |
| style | No | visual style — palette, typography, aesthetic | |
| voice | No | brand voice/tone | |
| domain | No | website domain | |
| summary | No | one-line description | |
| audience | No | ||
| category | No | ||
| positioning | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only, non-idempotent, non-destructive, but the description adds the critical read-modify-write behavior and explicitly states that unspecified fields are not overwritten. This is valuable context beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero fluff. The core behavior is front-loaded, then examples, then the alternative. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description fully explains how to use it, what it doesn't do (overwrite), when to use it, and what fields are allowed. No critical 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 coverage is 60% (6 of 10 parameters have descriptions). The description lists all 10 patchable fields and reiterates the partial-update rule ('Only pass the fields you're changing'), which helps compensate for the uncovered parameters. It adds contextual meaning even though it doesn't repeat per-field details.
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 ('Patch'), resource ('workspace brand profile'), and scope (specific fields with a list). Clearly distinguishes from draft_brand by naming the onboarding alternative. The purpose is unambiguous and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives use cases ('change our voice to playful', 'we sell to dentists now') and directs to draft_brand for initial onboarding. This gives both when-to-use and when-not-to-use, with a named alternative. Strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_business_locationUpdate a Google Business Profile listingADestructiveIdempotentInspect
Change the brand’s Google Business Profile listing — hours, phone, website, description, categories, service area, labels, store code, address or the business name. THIS EDITS THE PANEL ON GOOGLE SEARCH AND MAPS, immediately and publicly: there is no draft, no preview and no undo. Pass ONLY what changes, in fields, keyed by Google’s own field names: websiteUri, phoneNumbers, regularHours, specialHours, moreHours, profile, categories, storefrontAddress, title, labels, storeCode, openInfo, serviceArea, serviceItems, latlng, adWordsLocationExtensions, relationshipData. CALL IT WITHOUT confirm FIRST — nothing is written, Google validates the payload for you, and you get back the CURRENT value of every field you are about to change, so you can show the user the exact before-and-after; then call again with confirm:true once they approve. Changing the business NAME (title) or ADDRESS (storefrontAddress) additionally needs confirmName set to the listing’s CURRENT name, because Google can suspend a listing over either. Output-only fields (metadata) and immutable ones (languageCode) are refused by name rather than dropped. Use dryRun:true to validate a payload with Google and write nothing. Needs Google Business Profile connected.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | validate with Google and write nothing (needs no confirm) | |
| fields | Yes | the changes, keyed by Google’s Location field names, e.g. {"websiteUri":"https://example.com"} or {"regularHours":{"periods":[…]}} | |
| confirm | No | true ONLY after the user has seen the exact before-and-after and approved it | |
| locationId | No | which listing, from list_business_locations — only needed when more than one is shared with this brand | |
| confirmName | No | the listing’s CURRENT name, echoed back — required when changing title or storefrontAddress |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds critical behavioral nuances: 'THIS EDITS THE PANEL ON GOOGLE SEARCH AND MAPS, immediately and publicly: there is no draft, no preview and no undo.' It also discloses the two-step confirm pattern, the dry-run option, and that output-only/immutable fields are 'refused by name rather than dropped.' These details are not inferable from annotations and significantly increase the agent's ability to use the tool safely and correctly. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and dense, but every sentence earns its place given the complexity of the operation. It is front-loaded with the core purpose, then the critical warning, then the step-by-step confirm workflow, then special cases. It avoids redundancy and is logically organized. It could potentially be trimmed, but the length is justified by the need to cover the two-step pattern, confirmName, dryRun, and immutable fields. Not excessive enough to be a 3, but not as tight as a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description addresses all critical aspects for a mutation tool with no output schema: the destructive nature, the required confirm flow, the dry-run option, the field whitelist, the edge case of name/address changes, the behavior for output-only/immutable fields, and the connector prerequisite. An agent has everything needed to call it correctly and safely without guessing. The only minor gap is not describing the exact return format, but the description explicitly says it returns 'the CURRENT value of every field you are about to change,' which is sufficient. Given the lacking output schema, the description fully compensates.
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?
Despite 100% schema coverage, the description adds substantial value by enumerating the exact field names expected in `fields` (websiteUri, phoneNumbers, regularHours, etc.) and explaining the interplay between parameters: confirm must follow a prior validation call, confirmName is required for title/address changes, dryRun needs no confirm. It also clarifies that locationId is only needed when multiple listings are shared. This goes well beyond the schema descriptions, which are brief. For example, the schema says 'which listing, from list_business_locations' but the description adds 'only needed when more than one is shared with this brand.'
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 starts with a clear statement: 'Change the brand’s Google Business Profile listing' and enumerates specific fields it can modify (hours, phone, website, etc.). This is a specific verb + resource, and it clearly distinguishes from the many sibling tools (e.g., post_to_google_business for creating posts, get_business_location for reading, list_business_locations for listing). No ambiguity about what the tool does.
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 an explicit usage workflow: call without confirm first to validate, receive current values, then call again with confirm:true after user approval. It also explains when confirmName is required (changing title or address), when dryRun is appropriate, and the prerequisite 'Needs Google Business Profile connected.' This provides complete when-to-use and how-to-use guidance beyond simply naming the tool. It does not need to mention all alternatives because the sibling set is not directly competing; the tool's scope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_docEdit a Google Doc in placeADestructiveIdempotentInspect
EDIT a Google Doc — the correction append_to_doc cannot make, which until now meant a doc could only ever grow and a wrong line stayed in it forever. Two shapes: replacements:[{find, replace}] rewrites specific text wherever it appears (call read_doc first and match the text EXACTLY; matchCase:false ignores case), or rewrite:"…" replaces the ENTIRE body (rewrite:"" empties it). Find/replace runs immediately and REPORTS how many occurrences changed — zero matches is reported as a FAILURE to match, never as a quiet success, because a text edit that silently does nothing is worse than one that visibly fails. A whole-body rewrite is destructive: call it without confirm first to get the character count, then confirm:true + confirmCells. Both are index-free by design — an agent cannot reliably compute Google’s character offsets, and a wrong offset deletes the wrong sentence.
| Name | Required | Description | Default |
|---|---|---|---|
| docUrl | No | a Google Docs URL — the id is extracted from it | |
| confirm | No | ||
| rewrite | No | replace the WHOLE body with this text ("" empties the doc) | |
| documentId | No | the document id (from create_doc, or list_drive_files for one the user picked) | |
| confirmCells | No | echo back the character count the unconfirmed call reported (rewrite only) | |
| replacements | No | find/replace pairs, applied in order |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint and readOnlyHint, but the description goes well beyond that by explaining that find/replace reports occurrence counts, zero matches is a failure not a silent success, and whole-body rewrite is destructive requiring confirmation. It also discloses the index-free design rationale, adding significant behavioral context beyond the structured 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?
The description is detailed and a bit long, but every sentence carries value—no filler or redundancy. It front-loads the primary purpose and then logically structures the two modes with their requirements. Slightly overlong for a tool description, but the density of useful information justifies the 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?
For a tool with two operation modes, confirmation flow, failure semantics, and destructive risk, the description covers all necessary aspects. It references read_doc as a prerequisite, explains both shapes, details confirmation, and notes the design rationale. Even without an output schema, it states what the tool reports (occurrence counts), making it fully actionable.
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 high (83%), but the description adds meaningful semantics for each parameter: it explains replacements find/replace/matchCase including the effect of matchCase:false, clarifies that replacements apply in order, and details the confirm/confirmCells interaction for rewrite. This exceeds the schema's descriptions and provides practical usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool edits a Google Doc in two distinct ways: find/replace on specific text or a full-body rewrite. It explicitly contrasts with append_to_doc, making it distinct from that sibling and others. The verb 'EDIT' and resource 'Google Doc' are specific, and the two modes are precisely described.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: it names append_to_doc as the alternative that cannot make corrections, and explains the two shapes with conditions. For replacements it instructs to call read_doc first and match text exactly; for rewrite it details the two-step confirm flow (call without confirm, then confirm:true + confirmCells). This is thorough and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_drive_fileRename / move / trash a Drive fileAIdempotentInspect
Update a Drive file: rename (name), move it into a folder (moveToFolderId, optionally removeFromFolderId to move OUT of the old one), or trash / untrash it (trash:true|false). Pass fileId (from list_drive_files). To delete permanently, use delete_drive_file.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | new name | |
| trash | No | true → move to Trash; false → restore from Trash | |
| fileId | Yes | the Drive file id | |
| moveToFolderId | No | folder id to move the file into (from create_drive_folder / list_drive_files) | |
| removeFromFolderId | No | the old parent folder id to remove (when moving) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds concrete behavior details by explaining the three modifications and their effects (e.g., move into/out of folders, trash/restore). It clarifies that permanent deletion is out of scope, but doesn't mention any side effects like permission requirements or return values, which are minor given the annotations already cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently enumerate all operations and parameters, with the fileId source and deletion alternative front-loaded. No filler or redundant phrasing; every word contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and clear annotations, the description covers the core usage completely. It lacks explicit mention of success/error returns or permission requirements, but these are common expectations for such tools and not critical. The description is sufficient 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 coverage is 100%, so each parameter already has a description. The description goes further by mapping parameters to actions (name→rename, moveToFolderId→move into, removeFromFolderId→move out, trash→trash/restore) and identifying fileId's source. This adds meaningful operational context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the three distinct operations (rename, move, trash/untrash) with their corresponding parameters, and explicitly contrasts with delete_drive_file for permanent deletion. This gives a specific verb+resource with unambiguous sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to pass fileId from list_drive_files and explicitly directs permanent deletion to delete_drive_file, providing a clear when-to-use and when-not-to-use. The intended context for each parameter is also explained, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_meta_catalogRename or reconfigure a Meta product catalogAIdempotentInspect
Change a product catalog’s settings — most often its NAME. Also accepts the default and fallback product image URLs (what Meta shows when a product row has no usable image), the dynamic-ad display settings, and the destination / flight / store / partner-integration settings for travel and local-inventory catalogs. A catalog’s VERTICAL and its owning business portfolio are permanent and cannot be changed here — Meta publishes no way to change either. THE 200 IS NOT THE ANSWER: Meta replies {"success":true} and never returns the catalog, and it says exactly the same thing for a field it quietly ignored — so the summary is built from a fresh READ-BACK, and if a value does not read back as sent you are told it was NOT confirmed. Free, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | new name for the catalog | |
| catalogId | Yes | numeric catalog id from list_meta_catalogs | |
| defaultImageUrl | No | public http(s) image URL Meta falls back to for a product with no image | |
| fallbackImageUrl | No | public http(s) image URL used when the default also fails | |
| daDisplaySettings | No | dynamic-ad display settings object | |
| partnerIntegration | No | partner-integration settings object | |
| storeCatalogSettings | No | store-catalog settings object (local inventory) | |
| flightCatalogSettings | No | flight-catalog settings object | |
| additionalVerticalOption | No | additional vertical option | |
| destinationCatalogSettings | No | destination-catalog settings object (travel verticals) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false, so the description carries the burden of explaining behavioral nuance. It does this excellently by warning that Meta replies {"success":true} even when it silently ignores a field, and that the summary comes from a fresh read-back with a NOT confirmed warning. This is highly valuable and goes well beyond the structured metadata.
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 dense but every sentence earns its place: primary use, supported settings, immutable constraints, the critical 200-is-not-the-answer caveat, and cost. The warning is front-loaded enough to prevent the agent from misinterpreting a successful response. 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 tool with 10 parameters, nested objects, and no output schema, the description is remarkably complete. It explains what happens after the call, how to interpret the summary, which fields are immutable, and what the settings objects relate to. An agent has enough behavioral context to call the tool and verify the result 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?
The schema documents all 10 parameters with 100% coverage, setting a baseline of 3. The description adds meaning by explaining image URLs as fallbacks when a product row has no usable image, grouping destination/flight/store/partner-integration settings by vertical, and clarifying that vertical and portfolio cannot be changed. This is useful contextual enrichment beyond parameter names.
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 opens with a specific verb and resource: 'Change a product catalog’s settings — most often its NAME.' It enumerates the exact kinds of settings the tool accepts, which distinguishes it from create_meta_catalog, delete_meta_catalog, list_meta_catalogs, and other catalog-related siblings. The title 'Rename or reconfigure a Meta product catalog' reinforces the scope.
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 clearly implies when to use it: whenever an existing Meta catalog needs its settings updated. It also gives a concrete when-not: the VERTICAL and owning business portfolio are permanent and cannot be changed here. It does not name alternative sibling tools explicitly, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_onedrive_fileRename / move a OneDrive fileAIdempotentInspect
Update a OneDrive item: rename (name) and/or move it into a folder (moveToFolderId). Pass fileId (from list_onedrive_files). To remove an item, use delete_onedrive_file.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | new name | |
| fileId | Yes | the OneDrive item id | |
| moveToFolderId | No | folder id to move the item into (from create_onedrive_folder / list_onedrive_files) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the description's burden is lower. The description adds the scope of mutation (rename and/or move) and clarifies that removal is not part of this operation, which is useful behavioral context beyond the annotations. It does not describe edge cases or side effects, but given the annotation coverage, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the primary actions and includes the essential pointer to the delete tool. Every sentence earns its place with no redundancy or filler. Ideal structure for agent consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with three parameters and no output schema, the description covers everything an agent needs: what it does, how to obtain the required fileId, the optional parameters, and the alternative for deletion. Annotations cover idempotency and safety, so nothing is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema describes all three parameters. The description goes beyond by explaining the purpose of name and moveToFolderId ('rename (name) and/or move it into a folder'), and specifies that fileId comes from list_onedrive_files, adding a source that the schema does not have. This enriches the parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Update a OneDrive item: rename (name) and/or move it into a folder (moveToFolderId).' It names the specific resource (OneDrive item) and the two possible operations, distinguishing it from deletion by pointing to delete_onedrive_file. This is precise and 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?
The description explicitly tells the agent when not to use this tool ('To remove an item, use delete_onedrive_file') and instructs to pass fileId from list_onedrive_files, providing a source for the parameter. It does not contrast with other update tools (e.g., update_drive_file), but the tool name and domain specificity (OneDrive) make the distinction clear enough. This is solid usage guidance for the intended scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pinterest_boardRename or re-privacy a Pinterest boardAIdempotentInspect
Rename a board, rewrite its description, or change its privacy. ⚠️ SETTING A BOARD TO SECRET HIDES EVERY PIN ON IT from everyone but this account — nothing errors and nothing is deleted, the Pins simply stop being public, which is the Pinterest flavour of a post that looks published and is not. Say so and get a yes before doing it; it IS reversible (set PUBLIC again), and the read-back reports how many Pins were hidden. Pinterest accepts only PUBLIC or SECRET on an update: PROTECTED can be chosen when a board is created and can never be set afterwards, so that is refused by name rather than sent and rejected. 0 credits. Needs Pinterest connected.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| boardId | Yes | numeric board id from list_pinterest_boards | |
| privacy | No | SECRET hides every Pin on the board from everyone but this account | |
| description | No | max 500 characters |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive, but the description goes far beyond by explaining the exact side effect of setting SECRET (hides all pins from everyone but this account), that nothing errors or is deleted, that it's reversible, and that the read-back reports hidden pin count. It also discloses that PROTECTED is refused by name. This significantly enriches the agent's understanding of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description opens with the core action, then provides a critical warning about SECRET in a way that's attention-grabbing but not wasteful. It's a bit long, but every sentence carries important operational or safety information. The structure front-loads the purpose and then details consequences, making it scannable despite its 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?
The description covers prerequisites (Pinterest connected), cost (0 credits), side effects (hiding pins), reversibility, domain-specific constraints (PROTECTED not allowed), and what the read-back reports. With no output schema, it sufficiently explains what the agent should expect. Nothing critical is missing 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?
The schema covers 75% of parameters (boardId, privacy, description) with descriptions; the description adds valuable context for privacy (SECRET hides pins, only PUBLIC/SECRET allowed) and mentions credits. However, it adds nothing about the 'name' parameter, which lacks schema description, and doesn't elaborate on boardId beyond what the schema already states. With high schema coverage, the baseline is 3 and the description adds some but not exceptional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool modifies a board's name, description, or privacy. It distinguishes itself from siblings like create_pinterest_board and delete_pinterest_board by focusing on updates, and the title reinforces the action. No ambiguity about the resource or the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the prerequisite of Pinterest being connected and notes that PROTECTED can only be set at creation, implying you'd use create_pinterest_board for that. However, it doesn't explicitly say 'use this tool when you want to update an existing board' or contrast with alternatives. The guidance is implied rather than explicit, so it misses the higher bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pinterest_pinEdit a published PinAIdempotentInspect
Edit a published Pin — its title, description, destination link, alt text, or which board it sits on. Only send the fields that should change. TWO LIMITS TO STATE BEFORE OFFERING THIS. (1) Pinterest marks its Update Pin endpoint "currently in beta and not available to all apps" in its own API description, so it may be refused outright whatever the account’s scopes or access tier — reconnecting cannot change that. If it is refused, save_pinterest_pin gets the Pin onto another board (generally available) and changing the wording means deleting and re-pinning. (2) A published Pin’s IMAGE or VIDEO can never be changed by anyone: Pinterest’s update model has no media field at all, so swapping the creative means delete and re-pin, which loses the Pin’s accumulated saves. The values reported back are what Pinterest STORED, not what was sent. 0 credits. Needs Pinterest connected.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | destination URL, max 2048 | |
| pinId | Yes | numeric Pin id from list_pinterest_pins | |
| title | No | max 100 characters | |
| altText | No | accessibility alt text, max 500 | |
| boardId | No | move the Pin to this board | |
| description | No | max 800 characters — the text Pinterest search reads | |
| boardSectionId | No | section within the board |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, destructiveHint false), the description discloses that the endpoint is 'currently in beta and not available to all apps', that returned values are what Pinterest stored rather than what was sent, and that media can never be changed. These are critical behavioral facts not inferable from annotations or 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 long but tightly structured with two numbered limits, and every sentence earns its place: purpose, partial-update rule, beta risk, alternatives, media limitation, stored-value caveat, credit cost, and connection requirement. It is front-loaded with the most important constraint (beta refusal) and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with significant caveats, the description covers failure modes (beta refusal), alternatives, behavior on accepted updates (stored vs. sent), media limitations, partial update, and integration requirements (needs Pinterest connected, 0 credits). There is no output schema, so return format need not be described. Nothing essential is missing for an agent to use this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all 7 parameters with descriptions and max lengths (100% coverage). The description adds the crucial instruction 'Only send the fields that should change,' which is a partial-update guideline not present in the schema. This is valuable, but the schema carries most of the parameter semantics; the description provides minimal additional syntax guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Edit a published Pin — its title, description, destination link, alt text, or which board it sits on.' This clearly identifies the verb (edit), resource (published Pin), and specific attributes, distinguishing it from save_pinterest_pin (create) and delete_pinterest_pin. It is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns of two limits before offering the tool: the beta status that may cause refusal and the impossibility of changing media. It then names alternatives: save_pinterest_pin for moving to another board and delete/re-pin for changing wording. This gives concrete when-to-use and fallback guidance beyond generic advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_settingsChange app settingsAIdempotentInspect
Change this account's app settings. language = the language EVERY ad, script, plan and answer is written in from now on (say the language in plain English, e.g. "German", "Japanese", "Brazilian Portuguese") — it applies to renders made over MCP as well as in the app. theme = the app's appearance, "dark" or "light". watchEmail = the weekly competitor-watch email on/off. Only pass what you are changing. Account-wide (every brand), and it takes effect on the next call.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | app appearance | |
| language | No | language for generated ads, copy and answers — e.g. "English", "German", "Japanese" | |
| watchEmail | No | weekly competitor-watch email on/off |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds meaningful behavioral context: language applies to all future outputs and renders, takes effect on the next call, and is account-wide. This goes beyond the annotations, providing clarity on scope and timing.
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 but thorough, using inline definitions for the parameters. Each sentence serves a purpose: the main action, parameter explanations, usage guidance, and scope/timing. No wasted words, though it is slightly longer than strictly necessary.
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 settings-update tool with no output schema, the description covers all essential aspects: what changes, how (partial updates), scope (account-wide), and timing (next call). It lacks permission or error details, but these are not critical for this tool. It is complete enough for an agent 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 100% with descriptions for each parameter. The description enhances this by explaining language in detail ('the language EVERY ad, script, plan and answer is written in from now on', with plain-English examples) and clarifying that theme is 'dark' or 'light' and watchEmail is the weekly competitor-watch email. This adds nuance not captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Change this account's app settings.' It enumerates the three exact settings (language, theme, watchEmail) and clarifies scope with 'Account-wide (every brand)'. This distinguishes it from the sibling get_settings (read-only) and other set_* tools that target specific features.
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 practical usage guidance: 'Only pass what you are changing' and 'Account-wide (every brand), and it takes effect on the next call.' It implies when to use (when altering account settings) but does not explicitly state the alternative for reading settings (get_settings). Still, the context is sufficient for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sheetWrite to a range in a Google SheetADestructiveIdempotentInspect
CORRECT cells in a Google Sheet — write values to an exact range, overwriting whatever is there. This is the fix append_to_sheet cannot make: appending only ever adds rows at the bottom, so without this a wrong number stays wrong forever and the only "correction" is a second row contradicting the first. Pass range (e.g. "B2:C5", or "Q3 Report!B2" to name a tab — list_sheet_tabs gives the names) and values as an array of row arrays; an anchor cell like "B2" is fine and the block is written down and right from it. Writing into EMPTY cells goes straight through. Writing OVER cells that already hold values is REFUSED first, naming exactly how many filled cells would be overwritten — show the user that, get a yes, then call again with confirm:true. The result is READ BACK from the sheet, so what you report is what the sheet now holds rather than what Google accepted.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | A1 range or anchor cell, e.g. "B2:C5", "B2", or "Q3 Report!B2" (default A1) | |
| values | No | array of row arrays to write | |
| confirm | No | required only when the target range already holds values | |
| updates | No | write SEVERAL disjoint ranges in one call, instead of range+values | |
| sheetUrl | No | ||
| spreadsheetId | No | ||
| valueInputOption | No | USER_ENTERED (default) parses formulas, dates and numbers the way typing them would; RAW stores every value as literal text |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true, idempotentHint=true), the description adds crucial behavioral context: overwriting existing cells is REFUSED first, the confirmation flow, and the fact that results are read back from the sheet. This is exactly the kind of disclosure beyond structured fields that agents need.
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 long but every sentence earns its place: purpose, differentiation, parameters, behavior, and confirmation are all covered. It front-loads the verb and resource, then flows logically. Slightly verbose but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with no output schema and 7 parameters, the description is remarkably complete: it covers when to use vs append, how to specify ranges and values, the confirmation guard, and the read-back guarantee. It even references list_sheet_tabs for tab names. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, and the description enriches key parameters: explains range with anchor-cell examples ('B2', 'Q3 Report!B2'), clarifies values as 'array of row arrays', and explains the confirm flag's role. It does not detail sheetUrl/spreadsheetId, but these are standard identifiers and the schema provides descriptions for valueInputOption, so the added value is strong.
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 opens with a specific verb and resource ('CORRECT cells in a Google Sheet — write values to an exact range, overwriting whatever is there') and immediately differentiates itself from append_to_sheet, so an agent knows exactly what this tool does and how it differs.
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 names append_to_sheet as the alternative and explains the exact condition that selects this tool ('This is the fix append_to_sheet cannot make'). Also points to list_sheet_tabs for tab names and details the confirmation flow (ask user, get yes, then pass confirm:true).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_youtube_channelApply the brand to the YouTube channel itselfAIdempotentInspect
APPLY THE BRAND TO THE CHANNEL ITSELF — banner art, description, keywords, country and the trailer non-subscribers see. Every other YouTube tool brands the videos; this brands the page they sit on. Under the hood channels.update is a PUT, so the CURRENT settings are read and merged first — otherwise setting a description would silently wipe the channel's keywords, country and trailer. AND YOUTUBE SILENTLY IGNORES SOME FIELDS, channel title above all (usually only changeable in YouTube Studio): the result DIFFS what YouTube actually stored against what was asked for and reports anything that did not stick in notApplied. DO NOT REPORT THOSE AS CHANGED — a 200 is what YouTube accepted, not what it stored. A banner must be a Hermoso render (jpeg or png, under 6MB); YouTube re-crops it per device, so the safe area is the middle 1235x338 of a 2048x1152 image. Public and immediate — show the user what is going on the channel first. 0 credits. Needs YouTube connected.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | the channel title — YouTube often accepts and ignores this; the result says whether it stuck | |
| country | No | two-letter country code for the channel | |
| keywords | No | channel keywords, COMMA-SEPARATED (Google's wire format is one string, not a list) | |
| description | No | the channel description — the About text | |
| bannerImageUrl | No | any public https image URL to upload as the channel banner — a Hermoso render, or ANY file of your own brought in with upload_file | |
| defaultLanguage | No | the channel's default language | |
| unsubscribedTrailer | No | video id of the trailer shown to people who are not subscribed |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations. It reveals that the underlying API is a PUT with read-merge behavior to avoid wiping fields, that YouTube silently ignores some fields (e.g., channel title), and that the result diffs expected vs. stored values with a `notApplied` field. It also warns about banner requirements (Hermoso render, JPEG/PNG, under 6MB, safe area) and the 0-credit cost. These are critical behavioral details not captured in the annotations, making the tool's behavior explicit and preventing misuse.
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?
Despite its length, every sentence earns its place. The structure is front-loaded with the purpose, then covers merge behavior, silent ignores, banner requirements, and operational notes. The all-caps emphasis on critical warnings (e.g., 'AND YOUTUBE SILENTLY IGNORES SOME FIELDS') makes key points stand out. No filler or redundancy; it's information-dense and well-organized.
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 7 parameters and no output schema, the description adequately covers the tool's behavior: the result format ('reports anything that did not stick in `notApplied`'), prerequisites (connected account, Hermoso render for banner), and operational context (0 credits, public/immediate). It also explains the read-merge PUT behavior, which is essential for correct invocation. Nothing an agent needs to call this tool successfully is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, giving baseline 3. The description adds valuable semantics for key parameters: bannerImageUrl is clarified as 'a Hermoso render, or ANY file of your own brought in with upload_file,' and keywords are explained as 'COMMA-SEPARATED (Google's wire format is one string, not a list).' It also warns that title is often ignored by YouTube. These clarifications go beyond the schema, though not all parameters receive extra explanation, so a 4 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 opens with 'APPLY THE BRAND TO THE CHANNEL ITSELF — banner art, description, keywords, country and the trailer non-subscribers see,' which gives a specific verb, resource, and scope. It further distinguishes from siblings by clarifying 'Every other YouTube tool brands the videos; this brands the page they sit on,' making it unambiguous which tool to use for channel-level branding.
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 clearly states the use case: branding the channel page itself vs. videos. It does not name specific alternative tools (e.g., update_youtube_video) but provides a clear differentiation. It also includes practical guidance on prerequisites like 'Needs YouTube connected' and states the operation is 'Public and immediate,' which informs when to use it. Minor gap: it doesn't explicitly say 'use this instead of X when Y,' but the context is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_youtube_videoUpdate a YouTube video’s title, description, tags or privacyAIdempotentInspect
Edit an existing video on the connected channel: title, description, tags, and/or privacy (unlisted | public | private). THIS IS HOW YOU FLIP AN UNLISTED UPLOAD PUBLIC — post_to_youtube defaults to UNLISTED, and without this there was no way to publish it afterwards. Making a video PUBLIC puts it on the channel where anyone can find it, so show the user exactly what will change and get an explicit yes before calling with privacy:"public". Fields you omit are left untouched. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ≤100 chars | |
| privacy | No | public = live on the channel; confirm with the user first | |
| videoId | Yes | the YouTube video id | |
| description | No | ≤5000 chars |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=false and destructiveHint=false, so the description does not need to restate those. It adds valuable behavioral context: making a video PUBLIC puts it on the channel and requires explicit confirmation, and omitted fields are left untouched (partial update semantics). It also states the prerequisite of a connected channel. These behaviors go beyond the annotation hints and are critical for safe usage, though it doesn't mention error handling or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose and then the critical warning about public visibility. It contains no fluff; each sentence adds meaningful guidance. It is slightly lengthy due to the emphasis on the public case, but that is warranted because of the potential impact. The structure flows well from general to specific.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 5 parameters and no output schema, the description covers the essential aspects: what it does, when to use it, the key behavioral pitfall (public visibility), and the partial-update semantics. It also includes the prerequisite. It does not describe return values, but with no output schema and the tool being a side-effect operation, this is less critical. The description is sufficient for an agent to know how and when to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so most parameters are already documented (title, description, privacy, videoId have descriptions). The description adds the crucial 'Fields you omit are left untouched' behavior, which clarifies that all fields are optional and partial updates are supported. It also reinforces the privacy parameter's meaning by tying it to the flip scenario. For tags, which lack a schema description, the description implies they can be set as part of the edit. This adds value beyond the schema without duplicating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (edit/update) and resource (existing video on the connected channel) and lists the editable fields. It also explicitly distinguishes itself from post_to_youtube by explaining that it is the way to flip an unlisted upload to public, which differentiates it from the creation sibling. The purpose is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative (post_to_youtube defaults to UNLISTED) and the exact scenario where this tool is required (flipping to public). It gives a prerequisite (needs a connected channel) and provides a clear directive for the public case: get explicit user confirmation. This is explicit when-to-use information with a named alternative, meeting the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_planUpgrade planAInspect
Change this account's SUBSCRIPTION plan (admin only). Call with no argument to list the plans (id · monthly price · monthly credits); call again with plan set to a plan id. A NEW subscriber gets a ready-to-pay Stripe Checkout URL to hand your human — THEY pay on Stripe (agents never spend money directly). If the account already has a paid plan, or you're DOWNGRADING, the change is made by a person in the app (Settings → Billing) and the tool returns exactly what to do. Members (read-only billing) get an honest 'ask an admin' message. Nothing is charged until your human pays.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | the plan id to move to (e.g. pro) — omit to list the available plans first | |
| period | No | billing cadence — monthly (default) or yearly (2 months free) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false), so the description carries the full burden — and it delivers. It discloses that agents never spend money directly (human pays on Stripe), that nothing is charged until payment, that downgrades are executed by a person, the admin-only gating, and the member rejection message. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core purpose and admin gate, then branches logically through each path. Every sentence carries a distinct piece of information — listing, checkout URL, downgrade handoff, member message. It's long, but the multi-path behavior genuinely needs the space; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must explain return values, and it does: the plan-listing format (id · monthly price · monthly credits), the ready-to-pay Stripe Checkout URL, the exact-do-this message for downgrades, and the 'ask an admin' message for members. For a branching tool with four distinct user states, this is highly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema, placing the baseline at 3. The description adds genuine value beyond the schema by explaining the interaction between the two modes (omitting `plan` lists plans, setting it triggers a change) and enriching `period` with the '2 months free' yearly incentive that the schema also mentions. This pushes it above 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 opens with a specific verb + resource ('Change this account's SUBSCRIPTION plan (admin only)'), and immediately disambiguates from siblings like buy_credits and billing_status by scoping the action to plan changes, not credit purchases or status reads. The dual-mode behavior (list vs. change) makes the tool's function unmistakable.
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 spells out a sequencing protocol ('Call with no argument to list the plans... call again with `plan` set to a plan id') and writes conditional paths for new subscribers, existing paid plans, downgrades, and members. It doesn't explicitly name alternative sibling tools, but it clearly explains when the tool hands off to a human instead of acting, which is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileUpload a local file → durable public URLAInspect
Persist an ARBITRARY user file (image, video, audio, PDF or document, up to 150MB) into Hermoso and get back a durable public URL that EVERY publish, schedule and ad-build tool accepts — post_to_meta / post_to_linkedin / post_to_linkedin_page / post_to_youtube / post_to_tiktok / post_to_pinterest / post_to_x / post_to_reddit / post_to_google_business / schedule_post / upload_meta_asset / upload_google_ads_asset / create_meta_ad / create_linkedin_ads_creative / set_youtube_thumbnail / save_to_drive / save_to_onedrive. THIS IS THE BRING-YOUR-OWN-CREATIVE PATH: it is for files that have NOTHING to do with a Hermoso render (media on the user's desktop, an agency's finished ad, a photo they shot), and it means you can publish, schedule and run ads through Hermoso without generating anything here. Provide exactly ONE source — passing two is an error, never a silent preference: url (ANY public http(s) link — Hermoso fetches it server-side, so nothing crosses this connection and there is no practical size limit; THIS IS THE ONE THAT ALWAYS WORKS, including on the hosted connector), path (a local file — ONLY when Hermoso runs on the user's own machine over stdio/CLI; the hosted connector cannot see their disk), or dataUri (a base64 data: URI — keep it under ~15MB, since the bytes travel over this connection). If the file is already at a public https URL, the Meta, Reddit and ChatGPT-Ads tools take it directly and re-host it safely — but LinkedIn (posts and ad creatives), Pinterest, the YouTube thumbnail and upload_google_ads_asset upload the BYTES themselves and therefore refuse an external host, so run it through here first and pass the URL this returns. When in doubt, use this: its URL works everywhere. (Calling the underlying HTTP route directly? POST /api/upload takes the file's RAW BYTES as the request body with its own content-type — NOT multipart/form-data — or ?url= with no body.) Returns {url, kind, bytes}.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | a PUBLIC http(s) URL Hermoso fetches server-side (private/internal addresses are refused, and every redirect hop is re-checked). Works on every surface including the hosted connector, and the bytes never cross this connection — prefer this whenever the file is reachable on the web. | |
| name | No | original file name — helps pick the right extension | |
| path | No | local filesystem path (stdio/CLI only — refused on the hosted connector) | |
| dataUri | No | base64 data: URI of the file bytes (data:<mime>;base64,<…>) — bytes travel over this connection, so keep it small |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, openWorldHint=true), but the description adds substantial behavioral context: size limits (150MB for file, ~15MB for dataUri), server-side fetch for url (bytes never cross connection), security checks (refuses private/internal addresses, re-checks redirects), error on multiple sources, and the raw HTTP fallback. It also mentions the return shape. All this goes beyond the structured fields and aligns with annotations (no contradiction).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense. It front-loads the core purpose and the list of accepting tools, then explains the creative path, source modes, and usage notes. Every sentence earns its place (e.g., the HTTP route detail is niche but useful). It could be broken into bullet points for scannability, but it's not padded or redundant, so it loses only a point for structure.
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 4 parameters, no required fields, no output schema, and a complex dual-purpose (upload and return a URL), the description covers everything: all parameter modes, size limits, security, when to use, when not to, error behavior, and the return format '{url, kind, bytes}'. It even mentions the raw HTTP route for direct callers. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a rich description (e.g., url mentions server-side fetch and security). The tool description adds extra context that aids selection: 'arbitrary file up to 150MB', 'dataUri... keep under ~15MB', 'passing two is an error', and the 'always works' priority for url. While the schema does much of the work, the description reinforces and adds nuances like the practical size limit for dataUri, justifying a 4 over the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Persist') and resource ('arbitrary user file') and clearly defines the outcome: a durable public URL that all publish/schedule/ad tools accept. It explicitly distinguishes itself as the 'bring-your-own-creative' path versus Hermoso renders, and even names sibling tools that accept its output. The purpose is unmistakable and differentiates from the many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'When in doubt, use this: its URL works everywhere.' It also details when NOT to use direct URLs (LinkedIn, Pinterest, YouTube thumbnail, upload_google_ads_asset) and instructs to run through this tool first. It explains the three source modes with precise conditions (url always works, path only on local/stdio, dataUri under 15MB) and states that passing two sources is an error. No ambiguity remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_tiktok_comment_imageUpload an image for a TikTok commentAInspect
Turn a public image URL into the imageUri that comment_on_tiktok_video needs — TikTok will not take a raw URL on a new comment, only on a reply. Returns imageUri, imageWidth and imageHeight, and ALL THREE must be passed back together: TikTok rejects dimensions that do not match what it stored. Limits are TikTok's own — at most 5 MB, JPG/JPEG/PNG/WebP, between 360x360 and 1080x1920 (or 1920x1080). upload_file turns a local file into a URL this accepts. NEEDS THE TIKTOK ACCOUNT AUTHORIZATION (see tiktok_account_status).
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | a public URL to the image — upload_file turns a local file into one |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond minimal annotations: discloses return values (imageUri, imageWidth, imageHeight), that all three must be passed together or TikTok rejects dimensions, and the exact limits (5 MB, formats, dimensions). Also flags authorization requirement. This is exactly the behavioral detail an agent needs, and does not contradict the annotations (readOnlyHint=false indicates a mutating operation, which the upload is).
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?
Every sentence earns its place. The main purpose is front-loaded, then the critical return-format caveat, then limits, then the related tool, then authorization. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is fully complete: it explains the purpose, the output contract, constraints, prerequisites, and related tools. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema covers the single parameter at 100%, the description adds indispensable semantics: the URL must be public, and that upload_file can generate it. It also explains the size constraints, adding more value than the schema alone.
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: turns a public image URL into imageUri for TikTok comments. Clearly separates itself from comment_on_tiktok_video (which consumes the result) and upload_file (which produces the URL), so an agent can immediately tell its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: you need an imageUri for a new comment, not a reply (raw URL only works on replies). Names upload_file as the precursor for local files and points to tiktok_account_status for authorization. Gives a clear workflow without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upscale_videoUpscale videoAInspect
Upscale a video to higher resolution (2x) for final delivery. Paid render; returns the served URL.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | the source video URL |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false (a mutation) and destructiveHint=false (not destructive). The description adds 'Paid render' (a cost side-effect) and 'returns the served URL' (the return format), both useful beyond the annotations. It does not contradict the annotations and provides additional behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first states the operation and intent, the second covers cost and return. The most important details are front-loaded, and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and no output schema, the description covers the operation, the cost implication, and the return URL. It could mention that this is a render potentially taking time, but for a simple upscale operation, it is sufficient for an agent to invoke correctly without missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already defines the 'video' parameter as 'the source video URL' with 100% coverage. The description does not add parameter-specific details beyond mentioning the 2x scaling, which applies to the operation rather than the parameter. It meets the baseline for full schema coverage but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb (upscale), the resource (video), and the resolution increase (2x), which clearly distinguishes it from other video operations like edit_video, reframe_video, or clip_video. It also mentions the purpose ('for final delivery'), making 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?
The phrase 'for final delivery' provides context that this is meant for final output, and 'Paid render' warns of cost. However, it does not explicitly name any alternative tools or provide when-not-to-use conditions, leaving some inference to the agent. It gives clear context but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
use_brandSwitch brandAIdempotentInspect
Pin which brand this connection acts on (multi-brand accounts). Pass the brand id or exact name from list_brands. Works for a brand on your own account AND for a workspace another account SHARED with you — for a shared one pass its name or the profile id list_brands prints, and access is verified against your real membership before it is pinned. Persists for this API key until changed, on every surface (hosted connector included — no environment variables, no restart).
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | brand id (e.g. default / p_xxx), its exact name from list_brands, or the profile id of a workspace shared with you |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's not read-only, not destructive, and idempotent. The description adds substantial behavioral detail beyond that: it persists for the API key until changed, works across all surfaces including hosted connectors, and verifies real membership for shared workspaces before pinning. No contradiction with annotations; the description enriches the safety and side-effect profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but not wasteful. It front-loads the primary purpose, then provides necessary detail on shared brands and persistence. The sentences are structured logically, covering scope, usage, and behavior without redundancy. It's slightly long but every sentence adds value, making it appropriately concise for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does not explicitly state what the tool returns, but it covers the core aspects: what it does, how to use it, accepted parameter formats, persistence behavior, and shared-workspace handling. It does not mention error conditions or explicit success confirmation, but for a simple pinning operation, the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers the parameter at 100%, the description adds significant meaning beyond it. It explains the three accepted formats (brand id, exact name from list_brands, or profile id for shared workspaces) and references list_brands as the source of valid values. This guidance is crucial for correct invocation and goes well beyond the schema's simple 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 clearly states the tool's purpose: to 'Pin which brand this connection acts on' for multi-brand accounts. It uses a specific verb ('Pin') and resource ('brand'), and distinguishes it from siblings like get_brand, create_brand, and update_brand by focusing on selection/activation rather than CRUD operations. The mention of multi-brand accounts adds context, and the clarification about shared workspaces further differentiates its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool—when you need to set the active brand for the connection—and mentions that 'list_brands' provides the valid id/name values. It also implies the tool is the one to use for shared workspaces, verifying membership. However, it does not explicitly state alternatives or provide exclusions, but the context is implied strongly enough for an agent to decide appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_mentionsRead who is mentioning you on XARead-onlyInspect
Read the posts mentioning the connected X account — who is talking to the brand, in their own words, newest first. Use it to find what deserves a reply (reply with post_to_x + replyToId) and to mine real objections and customer language for ad copy. COSTS CREDITS PER MENTION RETURNED, plus one account lookup — keep maxResults small (default 10) and tell the user the cost before pulling a big page. Needs X connected.
| Name | Required | Description | Default |
|---|---|---|---|
| sinceId | No | only return mentions newer than this post id | |
| maxResults | No | how many mentions to pull, 5-100 (default 10) — every one is billed | |
| paginationToken | No | next_token from a previous call, to page further back |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral value by disclosing that each mention costs credits (beyond annotations), that there is an account-lookup cost, and that ordering is newest first. It also mentions the prerequisite of having X connected. These are useful behavioral details not present in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-structured: purpose first, then use cases, then cost warning and prerequisite. Every sentence contributes meaning, and the most critical operational warning (cost) is highlighted. It is somewhat longer than ideal but remains focused.
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 tool with three optional parameters and no output schema, the description covers the necessary context: what it returns, ordering, cost implications, connection requirement, and typical use cases. It does not explain the meaning of `paginationToken` in depth, but the schema already does that. Overall, it is complete enough 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 descriptions cover all three parameters with 100% coverage, so the baseline is 3. The description enhances this by explaining the cost implication of `maxResults` and advising to keep it small, plus noting the default of 10. It also implies that `paginationToken` is for deeper pages and ties `sinceId` to filtering, adding operational nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the exact function: reading posts mentioning the connected X account, in newest-first order. It names the specific resource (X mentions) and the action (read), and immediately clarifies what it returns and how it can be used. It distinguishes from generic inbox or other network mention tools by tying to X and mentioning reply flow.
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 clear use cases: reply-worthy mentions and mining customer language for ad copy. It also instructs to reply via `post_to_x + replyToId` which is a concrete alternative path. However, it does not explicitly exclude other tools like `list_inbox` or `list_threads_mentions`, but given the context of X, the guidance is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_post_insightsAdvertiser analytics for your own posts on XARead-onlyInspect
Advertiser-grade analytics for the connected account’s OWN posts on X — impressions, engagements, LINK CLICKS, profile visits, video views and video completion quartiles. This is the read that answers “did the creative work”, which x_post_metrics cannot: public metrics show likes and reposts, never clicks or video retention. Takes up to 25 post ids in one call. COSTS CREDITS PER POST READ, so ask about the posts that matter rather than everything. If X returns no rows, say so — that is missing data, not zero performance. Needs X connected.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | numeric X post ids (max 25) — the last part of each post URL | |
| granularity | No | default Total |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds valuable behavioral context: costs credits per post read, handles missing data as distinct from zero performance, and requires X to be connected. This goes beyond the annotations and clarifies the cost implication and error semantics, which are not evident from structured data.
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 long but every sentence earns its place: it fronts the core purpose, then contrasts with sibling, then covers batch limit, cost, error handling, and connection requirement. No filler or repetition. It is efficiently structured for an AI agent to parse.
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 enumerates all expected metrics (impressions, engagements, link clicks, profile visits, video views, and completion quartiles), giving the agent a clear picture of return values. It also covers error interpretation (missing data vs zero) and prerequisites (X connection). For a two-parameter tool, nothing essential is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters (ids and granularity) at 100% with clear descriptions, so baseline is 3. The description reinforces the max 25 ids and adds cost guidance ('ask about the posts that matter') that affects how ids should be chosen. It does not add syntax details, but the cost note adds semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves advertiser-grade analytics for the connected account's OWN posts, enumerating specific metrics (impressions, engagements, link clicks, profile visits, video views and completion quartiles). It explicitly contrasts with x_post_metrics, distinguishing itself as the only read that provides clicks and video retention, so an agent can immediately identify its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (when creative effectiveness needs evaluation, e.g., clicks/retention) and when not (when public metrics like likes/reposts suffice, pointing to x_post_metrics). Also gives operational constraints: 25 post IDs per call, credits cost per post read, and the need for X connection. No ambiguity remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_post_insights_historicalAdvertiser analytics for your own X posts, over any date rangeARead-onlyInspect
The same advertiser-grade X analytics as x_post_insights — impressions, engagements, LINK CLICKS, profile visits, video views and video completion quartiles — over ANY date range instead of only the last 28 hours. This is the one to use for “how did last week’s post do”, “compare these three posts over the month”, or any retrospective: x_post_insights physically cannot see past yesterday, so asking it about an older post returns nothing and that is not zero performance. Takes up to 25 post ids at once; the window defaults to the last 28 days when you name none, and the window actually queried is reported back. COSTS CREDITS PER POST READ — X bills us per API call — so say the cost before pulling a big batch and ask about the posts that matter. Needs X connected.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | numeric X post ids (max 25) — the last part of each post URL | |
| endDate | No | YYYY-MM-DD or a UTC timestamp; defaults to now | |
| startDate | No | YYYY-MM-DD or a UTC timestamp; defaults to 28 days before the end | |
| granularity | No | default Total |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and other annotations, the description discloses cost implications (credits per post read), the default 28-day window, that the actually queried window is reported back, and the critical nuance that older posts return nothing rather than zero performance. It also notes the X connection requirement. These behaviors are not derivable from annotations or 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 long but every sentence earns its place: it front-loads the core differentiator, then covers limits, defaults, cost, and requirements. All-caps emphasis on key points (LINK CLICKS, COSTS CREDITS) aids scanning, and it does not waste words on restating the obvious.
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 enumerates the returned metrics and explains behavioral quirks (window reporting, empty results for old posts). It also covers prerequisites (X connected) and pricing. For a read-only analytics tool, no essential information an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all parameters with 100% coverage, so the description adds marginal value per parameter. However, it adds important context: the max 25 ids, the default window when none specified, and the reporting of the actual window. The description doesn't rehash schema definitions but adds operational semantics, so it slightly exceeds 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 it provides the same advertiser-grade analytics as x_post_insights but over any date range, enumerating specific metrics (impressions, engagements, link clicks, profile visits, video views) and explicitly distinguishing it from the sibling that only covers the last 28 hours. It also frames its use case with concrete examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative x_post_insights and states that the historical variant is the one to use for older date ranges, even explaining that the sibling cannot see past yesterday. This gives clear when-to-use and when-not-to-use guidance without leaving inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_post_metricsRead performance of a post on XARead-onlyInspect
THE X ANALYTICS TOOL THAT WORKS — impressions, likes, reposts, replies, quotes and bookmarks for any post, PLUS the advertiser numbers (link clicks, profile clicks, engagements) for YOUR OWN posts published in the last 30 days. X serves those private metrics on this same lookup with the user-context connection you already have; that is X's own design, not a workaround. Prefer this over x_post_insights, whose endpoint family X has retired. If a post is deleted, protected or suspended, X answers with no data at all and this says so — that is MISSING DATA, never zero engagement, and must never be reported as a measured zero. Costs a small number of credits (X bills per API read). Needs X connected.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the numeric X post id — the last part of the post URL | |
| publishedAt | No | epoch ms the post went out, if known — lets the private owned-post metrics be requested only inside X's 30-day window instead of costing a refused call |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses critical behavior: missing vs zero data for deleted/protected/suspended posts, the credit cost ('Costs a small number of credits'), and the connection requirement ('Needs X connected'). This is exactly the kind of context agents need.
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 dense and information-rich, but it's still concise given the amount of context. The opening 'THE X ANALYTICS TOOL THAT WORKS' is a bit hyperbolic, but the rest is structured: metrics list, private-metrics eligibility, alternative, missing-data semantics, cost, and connection requirement. Every sentence adds value.
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 enumerates the exact metrics returned (impressions, likes, reposts, replies, quotes, bookmarks, and advertiser numbers). It also explains the missing-data case and the credit cost. For a simple read-only lookup, this is a complete picture; an agent can call it correctly without further docs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters thoroughly (id as numeric post ID, publishedAt as epoch ms). The description adds only minor context (why publishedAt helps avoid refused calls), so it does not significantly improve on the schema, which has 100% 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 states a specific verb ('read performance') and resource ('a post on X'), enumerates the exact metrics returned (impressions, likes, reposts, etc.), and explicitly contrasts with the retired x_post_insights, making its purpose unmistakable.
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 clearly says 'Prefer this over x_post_insights' and explains why (X has retired that endpoint family). It also clarifies when private advertiser metrics are available (own posts, last 30 days). It doesn't address other siblings like x_post_insights_historical or collect_post_metrics, but the main alternative is covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_bulk_reportYouTube bulk report (thumbnail CTR, cards, end screens)ARead-onlyInspect
THE ONLY PLACE YOUTUBE PUBLISHES THUMBNAIL IMPRESSIONS AND THUMBNAIL CTR. This is a different API from youtube_channel_report — YouTube’s bulk Reporting API — and for a product that generates thumbnails it is the number that says whether the thumbnail actually worked. Reports: thumbnails (impressions + CTR per video per day) · thumbnails_by_source (the same, split by traffic source, traffic source DETAIL, device and OS) · cards (per-card impressions, clicks and click rate by card_id) · end_screens (per end-screen element) · traffic_source (with the UNCAPPED traffic_source_detail — youtube_channel_report caps that at 25 rows) · basic. IT IS SCHEDULED, NOT ON-DEMAND, AND THIS IS THE ONE THING YOU MUST EXPLAIN TO THE USER: the first call SCHEDULES a job and returns NO DATA. YouTube then writes one CSV per 24-hour Pacific day — the first within 48 hours — plus a backfill of the 30 days before scheduling, and files expire after 60 days. It can NEVER answer about a period before the job existed, so "we have no thumbnail history yet" is a real and correct answer on day one. An unknown report name is refused with the list. Zero rows means missing data for that window, never zero impressions. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | how many recent daily files to read (1–14, default 7) | |
| since | No | YYYY-MM-DD — only files whose data starts on or after this | |
| until | No | YYYY-MM-DD — only files whose data starts before this | |
| report | No | default thumbnails | |
| schedule | No | false = do not create the job if it is missing; just report that none exists |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses critical behavioral traits: scheduling (not on-demand), no data on first call, backfill of 30 days, 60-day file expiry, zero rows meaning missing data (never zero impressions), unknown report refusal, and read-only/0 credits. This is far more than annotations provide and is essential for correct invocation.
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 long but front-loads the most critical caveat (scheduled, not on-demand) in caps, and uses bullet points to enumerate report types. Every sentence adds value, but the length is substantial. It is justifiable given the complexity, yet not as concise 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?
For a tool with no output schema and moderate parameter count, the description covers everything an agent needs: report types, scheduling timeline, backfill, expiry, zero-row semantics, unknown-report handling, and read-only status. It even addresses the 'we have no thumbnail history yet' scenario. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by explaining the scheduling context for the 'schedule' parameter, the meaning of zero rows relative to 'days'/'since'/'until', and the list of report names. It doesn't individually elaborate each parameter but enriches the agent's understanding of how they interact.
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 — it is the YouTube bulk Reporting API — and lists six concrete report types. It explicitly distinguishes itself from youtube_channel_report, naming the sibling and the key difference (thumbnail CTR, scheduled vs on-demand). This allows an agent to select it correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'This is a different API from youtube_channel_report' and explains the critical scheduling behavior: the first call schedules a job and returns no data, files arrive within 48 hours, and it can never answer about periods before the job existed. It also states the correct response when no history exists. This gives the agent clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_channelGet the connected YouTube channelARead-onlyInspect
Read the brand’s connected YouTube channel — title + subscriber / view / video counts (for reporting). Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds the return value details and the connectivity requirement, which is useful but minimal. No extra behavioral traits like pagination or error conditions are disclosed, but the bar is lower due to annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the core purpose and return data, then states the prerequisite. Every clause earns its place, making it concise and highly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no parameters and no output schema, the description provides all essential information: what it reads, what it returns, and the required precondition. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% trivially. Per the rule for 0 parameters, the baseline is 4. The description does not need to elaborate on parameters since there are none, and it does not add anything beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the brand's connected YouTube channel and specifies exactly what is returned (title, subscriber/view/video counts) for reporting. The verb 'read' and resource are concrete, and it is easily distinguishable from sibling tools like youtube_channel_report or list_youtube_videos.
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 notes the prerequisite 'Needs a connected YouTube channel,' which is a clear usage condition. It implies a reporting use case but does not explicitly mention alternatives or when not to use it, though the context of a lightweight stats read is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_channel_reportYouTube analytics broken down by dimensionARead-onlyInspect
The YouTube Analytics reports that say WHERE views came from, WHO watched and WHERE they stopped watching — the questions youtube_channel (totals) and youtube_video_insights (one video, flat) cannot answer. Pick a report: day / month (time series) · country / province (US states) / city / dma (geography) · trafficSource (search vs browse vs suggested vs shorts feed vs external — the single most useful one for judging a thumbnail and title) · trafficSourceDetail (the actual search terms, inside ONE source — pass parent, e.g. "YT_SEARCH") · playbackLocation / playbackLocationDetail (which sites embedded it) · device / operatingSystem · demographics (age + gender) · sharingService · subscribedStatus · audienceRetention (the drop-off CURVE, 100 points across ONE video — the read that tells you whether the hook held and exactly when people left) · topVideos (the channel’s best in the window). Scope it to one or more videoIds, or omit for the whole channel. An unknown report name is refused WITH the list rather than quietly swapped. TWO THINGS TO SAY OUT LOUD WHEN REPORTING: demographics returns viewerPercentage and NOTHING else — YouTube publishes no absolute demographic counts, so never convert it into a number of viewers — and a capped report (city 250, topVideos 200, the *Detail reports 25) is the TOP N, not the whole set. Zero rows means missing data for that window, never zero views. Read-only, 0 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | rows, within YouTube’s own cap for that report | |
| parent | No | required by the *Detail reports: the ONE parent to drill into, e.g. "YT_SEARCH" / "SUBSCRIBER" / "RELATED_VIDEO" for trafficSourceDetail, "EMBEDDED" for playbackLocationDetail | |
| report | No | which report (default day) | |
| endDate | No | YYYY-MM-DD, default today | |
| videoIds | No | narrow to these videos — audienceRetention requires exactly ONE, because the curve is per video | |
| startDate | No | YYYY-MM-DD, default 28 days ago |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, destructiveHint), the description discloses critical behavioral traits: demographics returns only viewerPercentage (no absolute counts), capped reports (city 250, topVideos 200, *Detail 25) are TOP N not full sets, and zero rows mean missing data not zero views. It also states 'Read-only, 0 credits', which aligns with readOnlyHint. No contradiction with annotations; the description adds substantial 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 long but every sentence earns its place, covering 17 reports, usage nuances, and two critical reporting warnings. It is front-loaded with a clear purpose statement and organized into logical sections. Slightly verbose but efficient for the tool's complexity; not a single wasted sentence.
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 high complexity, the description fully explains return semantics: what each report yields, the top-N caps, the demographics limitation, and zero-row behavior. It also covers scoping, required parents, and error handling for unknown reports. An agent can call this correctly without needing additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema: it explains the significance of trafficSource for judging thumbnails, requires parent for *Detail reports with example values, notes audienceRetention requires exactly one video, and clarifies that videoIds can be omitted for the whole channel. While schema gives basic param descriptions, this narrative provides crucial selection and usage nuances.
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 opens by stating exactly what the tool does: 'The YouTube Analytics reports that say WHERE views came from, WHO watched and WHERE they stopped watching'. It also explicitly distinguishes itself from siblings (youtube_channel for totals, youtube_video_insights for one video flat) and lists every report dimension. This makes the purpose unmistakable and differentiates it clearly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs. alternatives: it names what youtube_channel and youtube_video_insights cannot answer, suggests trafficSource as 'the single most useful one', and explains how to scope to videoIds or omit for the whole channel. It also warns about the *Detail reports requiring parent, and states that unknown report names are refused with the list. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_video_insightsPerformance of one of your YouTube videosARead-onlyInspect
Per-VIDEO performance for a video on the connected channel — views, estimated minutes watched, average view duration, average view PERCENTAGE (the retention number that tells you whether the hook held), likes, comments, shares and subscribers gained. Use it for "how did that video do", "which upload performed best", or to judge an ad before spending more behind it. youtube_channel only returns channel-wide totals and cannot answer this. Defaults to the last 28 days; pass startDate/endDate (YYYY-MM-DD) for another window. Read-only, 0 credits. Needs a connected YouTube channel.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | YYYY-MM-DD, default today | |
| videoId | Yes | the YouTube video id (the v= part of the watch URL, or the videoId returned by post_to_youtube) | |
| startDate | No | YYYY-MM-DD, default 28 days ago |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds 'Read-only, 0 credits' and 'Needs a connected YouTube channel', which are prerequisites and cost details not present in annotations. It also communicates the default time window (last 28 days), adding operational context without contradicting any annotation.
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 dense but efficient. It front-loads the core purpose and metrics in the first clause, then gives usage scenarios and a sibling comparison, then parameters and prerequisites. No filler; every sentence justifies its place. The structure moves from 'what' to 'when' to 'how', aiding quick comprehension.
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 insights tool with three parameters (one required) and no output schema, the description fully equips an agent: it lists the returned metrics, states use cases, differentiates from the channel-wide alternative, specifies date defaults, and notes prerequisites (connected channel, 0 credits). Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all three parameters are already described in the input schema, including videoId, startDate, and endDate with defaults. The description only reiterates the default 28-day window and date format, adding no substantive meaning beyond the schema. A baseline of 3 is appropriate since the schema carries the documentation load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair ('per-VIDEO performance') and enumerates the exact metrics returned (views, minutes watched, average view duration, retention percentage, likes, comments, shares, subscribers gained). It explicitly contrasts with the sibling youtube_channel tool, which 'only returns channel-wide totals', making the distinction 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 concrete use cases ('how did that video do', 'which upload performed best', 'to judge an ad') and states a clear exclusion: youtube_channel cannot answer these. This gives explicit when-to-use and when-not-to-use guidance, with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceManage ad campaigns across Meta, Google, and TikTok, create campaigns, analyze performance, spy on competitors, and generate AI creatives.10MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to create, analyze, and optimize ad campaigns across Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Amazon Ads, and ChatGPT Ads through natural language using 400+ tools.83MIT
- AlicenseAqualityAmaintenance50 tools for Meta Ads campaign management, creative analysis, audience building, and conversion tracking, accessible to any MCP-compatible AI agent.6844612MIT
- AlicenseAqualityDmaintenanceProvides Meta and Google Ads intelligence for AI assistants, enabling users to analyze performance, track competitors, and manage ad campaigns through natural language. It features 17 tools for generating creative concepts, scraping competitor ads, and performing deep account-level analysis.17MIT
Your Connectors
Sign in to create a connector for this server.