Skip to main content
Glama

Server Details

Publish, schedule, and manage social media posts across major platforms via the Postproxy API.

Ownership verified
Status
Healthy
Uptime
15.3% over 58 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-03-26
URL
Repository
postproxy/postproxy-mcp
GitHub Stars
3
Server Listing
PostProxy MCP Server

TDQS

A3.5/5.0

Scored across 103 tools

Disambiguation4/5

Tools are strongly namespaced by prefix (post_, comments_, dm_, google_business_, whatsapp_, queues_, profiles_) and within each namespace actions are distinct (like/unlike, hide/unhide, block/unblock are cleanly separated). A few boundaries require reading descriptions—comments_create (post comments) vs profile_comments_create (review replies) vs dm_comment_private_reply (private reply DM), and post_delete vs post_delete_on_platform—but the descriptions disambiguate them reliably. At 103 tools there is inherent selection friction, but not much genuine overlap.

Naming Consistency4/5

Overwhelmingly consistent snake_case with a namespace_action pattern and verb-last ordering (list/get/create/update/delete), which makes related tools easy to scan. Minor deviations exist: some read tools are bare nouns (auth_status, profiles_placements, queues_next_slot) and singular/plural prefixes are mixed (profiles_list vs profile_comments_list, dm_chat vs dm_chats_list), but the convention is broadly predictable.

Tool Count2/5

103 tools is a very heavy surface that will strain an agent's selection budget, even though the server spans genuinely distinct domains (social posting, DMs, Google Business, WhatsApp Business, queues, profiles). Many tools are individually justified by the broad scope, but the total far exceeds what is comfortably usable as a single MCP server. The count is defensible per-domain yet excessive as a set.

Completeness5/5

Coverage is exceptionally thorough: posts (publish/draft/update/delete/status/stats/history), comments (create/edit/delete/hide/like), DMs (chat lifecycle, send/edit/react, private replies), and deep WhatsApp (groups, templates, business profile, block/unblock, usernames, conversions, datasets) and Google Business surfaces (attributes, hours, media, services, place actions, food menus). CRUD and lifecycle operations are present across every domain with no obvious dead ends.

Available Tools

103 tools
auth_statusA
Read-only
Inspect

Check authentication status, API configuration, and workspace information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds context by detailing what it checks (auth, API config, workspace info). There is no contradiction with annotations, and the description provides behavioral insight 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.

Conciseness5/5

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

The description is a single, front-loaded sentence that conveys all necessary information without any filler or redundancy. Every word earns its place.

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

Completeness5/5

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

Given the tool's simplicity (0 parameters, read-only, no output schema), the description completely covers what the tool does. It specifies exactly what information is checked (auth, API config, workspace info), leaving no gaps.

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

Parameters4/5

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

The input schema has zero parameters, and schema description coverage is 100%. The description does not need to add parameter info. Baseline is 3, but given the simplicity, the description is sufficient and clear.

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

Purpose5/5

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

The description clearly states 'Check authentication status, API configuration, and workspace information', specifying the verb 'Check' and distinct resources. This differentiates it from sibling tools that handle comments, posts, DMs, etc., with no tautology.

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

Usage Guidelines3/5

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

The description implies usage for verifying auth or workspace info, but provides no explicit guidance on when to use this tool versus alternatives or exclusions. It could be improved by stating that it is a safe, read-only operation for initial setup or troubleshooting.

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

comments_createA
Destructive
Inspect

Create a comment or reply on a published post. The comment is published to the platform asynchronously. Supported on Instagram, Facebook, Threads, YouTube, and LinkedIn.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesComment text content
post_idYesPost ID
parent_idNoOptional ID of comment to reply to (Postproxy ID or external ID). Omit to comment on the post itself.
profile_idYesProfile ID

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare it is a non-read-only, non-idempotent, destructive, open-world operation; the description adds one genuinely useful behavioral fact — publishing to the platform happens asynchronously. It omits other behavioral context an agent needs, such as whether retries create duplicate comments and what permissions/profiles are required.

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

Conciseness5/5

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

Two sentences with zero waste: the core action is front-loaded and the platform-scope sentence is short and informative. Nothing is repeated from the schema or annotations.

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

Completeness3/5

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

With no output schema, the description should say what the call returns and how to learn the outcome of the async publish (e.g., a status check), which it does not. The async disclosure helps but leaves the agent unsure how to confirm the comment actually landed.

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

Parameters3/5

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

Schema description coverage is 100%, so post_id, profile_id, text, and parent_id (including reply-vs-top-level semantics) are already fully documented in the schema. The description adds no parameter meaning beyond that, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb+resource ("Create a comment or reply on a published post") and constrains scope to published posts, which separates it from comments_edit/comments_delete/comments_get. It does not distinguish itself from the ambiguous sibling profile_comments_create, so no explicit sibling differentiation.

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

Usage Guidelines3/5

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

Implies usage (creating a comment or a reply, with platform support listed for Instagram, Facebook, Threads, YouTube, LinkedIn), but never states when-not to use it or points to an alternative such as profile_comments_create or dm_comment_private_reply.

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

comments_deleteA
DestructiveIdempotent
Inspect

Delete a comment from the platform asynchronously. Supported on Instagram, Facebook, YouTube, and LinkedIn. Not supported on Threads.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID
comment_idYesComment ID (Postproxy ID or external ID)
profile_idYesProfile ID

TDQS

A4.4/5.0
Behavior5/5

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

Description adds value beyond annotations by stating the operation is asynchronous and listing supported platforms. No contradiction with annotations (destructiveHint=true, 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.

Conciseness5/5

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

Two concise sentences that cover purpose, async nature, and platform support. No unnecessary words.

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

Completeness4/5

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

Covers essential aspects: purpose, async, platforms. Lacks mention of error conditions or what happens upon success, but for a delete tool with no output schema, this is adequate.

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

Parameters3/5

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

All three parameters are fully described in the input schema (100% coverage). Description does not add additional meaning beyond what the schema provides, so baseline score is appropriate.

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

Purpose5/5

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

Clear verb 'delete' with specific resource 'comment' and list of platforms. Distinguishes from siblings like comments_hide and comments_unlike by explicitly stating deletion.

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

Usage Guidelines4/5

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

Mentions asynchronous execution and platform support (Instagram, Facebook, YouTube, LinkedIn) but does not explicitly state when to use this tool versus alternatives like hiding or unliking a comment.

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

comments_editA
Idempotent
Inspect

Edit the text of a comment you published, asynchronously. Supported on Facebook and YouTube only. Returns { accepted: true }; the result arrives via comment.edited / comment.edit_failed webhooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesNew comment text
post_idYesPost ID
comment_idYesComment ID (Postproxy ID or external ID)
profile_idYesProfile ID

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: the operation is asynchronous, it returns only { accepted: true }, and completion arrives via the comment.edited / comment.edit_failed webhooks. The annotations only declare it non-read-only and idempotent; the async contract and webhook names are exactly the context an agent cannot get elsewhere.

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

Conciseness5/5

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

Two tight sentences with zero filler; the action and the async/webhook consequence are front-loaded in order of importance.

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

Completeness5/5

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

No output schema exists, yet the description explains the return shape and how the real result is delivered, plus the platform restriction. For a 4-param async mutation this covers everything an agent needs to call and interpret it.

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

Parameters3/5

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

Schema description coverage is 100%, so post_id, comment_id, profile_id and body are already documented in the schema. The description adds no format, ID-type, or body-length nuance beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Edit the text of a comment') plus an ownership scope ('you published'), which cleanly separates it from comments_create, comments_delete, comments_hide, and comments_like among the siblings. An agent can route to it 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.

Usage Guidelines4/5

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

Gives a real usage constraint — 'Supported on Facebook and YouTube only' — which prevents calling it on unsupported platforms. It stops short of naming alternatives (e.g. comments_delete for removal), so it is clear context rather than full when/when-not routing.

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

comments_getA
Read-only
Inspect

Get a single comment with its replies

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID
comment_idYesComment ID (Postproxy ID or platform external ID)
profile_idYesProfile ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, and description adds return of replies, but does not disclose structure or limitations.

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

Conciseness5/5

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

Single short sentence, to the point with no unnecessary words.

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

Completeness4/5

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

Adequate for a simple read operation with 3 parameters; could mention response format or field details but not necessary.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all parameters; the description adds no new parameter information.

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

Purpose5/5

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

The description clearly states the action ('Get') and the resource ('a single comment with its replies'), distinguishing it from siblings like comments_list which would list comments.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives like comments_list or profile_comments_get; 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.

comments_hideA
DestructiveIdempotent
Inspect

Hide a comment on the platform asynchronously. Supported on Instagram, Facebook, and Threads.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID
comment_idYesComment ID (Postproxy ID or external ID)
profile_idYesProfile ID

TDQS

A3.7/5.0
Behavior4/5

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

The description adds value beyond annotations by noting the operation is asynchronous and listing supported platforms. Annotations already indicate destructive and idempotent behavior; the description reinforces these traits 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.

Conciseness5/5

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

The description is extremely concise—only two short sentences—covering the key points without any extraneous information. It is front-loaded with the action and platforms.

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

Completeness3/5

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

The description is adequate for a simple tool with three required parameters and full schema coverage. However, it lacks details about success/failure responses, reversibility (though implied by 'comments_unhide'), and implications of asynchronous execution.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add additional context beyond the schema's parameter descriptions (e.g., 'Post ID', 'Comment ID (Postproxy ID or external ID)'), so no extra credit.

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

Purpose5/5

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

The description clearly states the action ('Hide a comment') and specifies the platforms (Instagram, Facebook, and Threads). It distinguishes from sibling tools like 'comments_delete' and 'comments_unhide' by using the verb 'hide'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'comments_delete' or 'comments_unhide'. The description mentions 'asynchronously' but does not elaborate on expected behavior or when hiding is preferred over deleting.

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

comments_likeA
Idempotent
Inspect

Like a comment on the platform asynchronously. Currently only supported on Facebook.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID
comment_idYesComment ID (Postproxy ID or external ID)
profile_idYesProfile ID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true and non-destructive, but the description adds valuable context: the operation is asynchronous and currently limited to Facebook. No contradictions.

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

Conciseness5/5

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

Two sentences with no wasted words. Front-loaded with the action and resource, then clarifies async and platform support.

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

Completeness5/5

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

For a simple tool with no output schema and fully described parameters, the description is complete. It covers the key behavioral aspects (async, platform) and is self-sufficient.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all three parameters. The description does not add additional meaning beyond what the schema provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (like) and resource (comment), and distinguishes from siblings like comments_unlike. It also notes the async nature and Facebook-only limitation.

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

Usage Guidelines4/5

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

The description specifies when to use (for liking comments) and implies limitations (only Facebook), but does not explicitly mention when not to use or provide alternatives.

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

comments_listA
Read-only
Inspect

List comments on a published post. Returns paginated top-level comments with nested replies. Optionally filter by when PostProxy received the comment with from/to. Not all platforms support comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoOptional ISO 8601 date/time — only include comments received at or before this point. Applies to top-level comments only; a comment in range still returns its full replies array.
fromNoOptional ISO 8601 date/time — only include comments received at or after this point. A bare date (2026-03-25) means that date's start of day. Filters on when PostProxy received the comment, not the platform's posted_at.
pageNoPage number, zero-indexed (default: 0)
post_idYesPost ID
per_pageNoNumber of top-level comments per page (default: 20)
profile_idYesProfile ID to identify which platform's comments to retrieve

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, not open-world). The description adds genuinely useful behavior beyond them: the return shape (paginated top-level comments with nested replies) and the platform-support limitation that may cause empty/unsupported results.

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

Conciseness4/5

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

Four sentences, each carrying content, with the core action front-loaded. No filler or redundancy, though it is slightly prose-y rather than maximally tight.

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

Completeness4/5

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

With no output schema, the description compensates by describing the return structure, and annotations cover safety while the schema covers all parameters. The platform-support caveat closes the last gap; only explicit pagination/return-volume guidance is absent.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented in detail, including that from/to filter on PostProxy receipt time. The description's restatement ('filter by when PostProxy received the comment with from/to') adds only marginal value over 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.

Purpose4/5

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

States a specific verb and resource ('List comments on a published post') and adds scope detail (paginated top-level comments with nested replies). It is clearly distinguishable from write siblings like comments_create/comments_delete, though it never explicitly names an alternative tool, keeping it short of a 5.

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

Usage Guidelines3/5

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

The description implies the use context (reading comments on a post) and offers a useful caveat ('Not all platforms support comments'), but it gives no explicit when-to-use vs alternatives guidance and does not route the agent to siblings such as comments_get or profile_comments_list.

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

comments_unhideA
Idempotent
Inspect

Unhide a previously hidden comment on the platform asynchronously. Supported on Instagram, Facebook, and Threads.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID
comment_idYesComment ID (Postproxy ID or external ID)
profile_idYesProfile ID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark it as non-readOnly, non-destructive, and idempotent. The description adds the 'asynchronously' behavior and platform support (Instagram, Facebook, Threads), providing useful context beyond annotations.

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

Conciseness5/5

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

A single sentence that is front-loaded with the action and includes only essential information (platforms). No wasted words.

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

Completeness5/5

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

For a simple unhide operation with 3 required parameters, no output schema, and comprehensive annotations, the description is complete and sufficient. It mentions key platforms and the asynchronous nature.

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

Parameters3/5

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

Schema coverage is 100% and parameter descriptions are present but minimal. The tool description does not add any extra meaning or format details beyond the schema, so it meets the baseline.

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

Purpose5/5

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

The description clearly states the action (unhide) and the resource (a previously hidden comment), distinguishing it from siblings like comments_hide or comments_delete.

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

Usage Guidelines4/5

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

The description implies the tool should be used after hiding a comment, but does not explicitly state when to use vs alternatives or exclude cases where comment is already unhidden (though idempotentHint covers this).

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

comments_unlikeA
Idempotent
Inspect

Remove a like from a comment on the platform asynchronously. Currently only supported on Facebook.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID
comment_idYesComment ID (Postproxy ID or external ID)
profile_idYesProfile ID

TDQS

A4.2/5.0
Behavior4/5

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

Adds context beyond annotations: async execution and Facebook-only support. Annotations already indicate idempotent and non-destructive. No contradictions.

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

Conciseness5/5

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

Single sentence with no extraneous information. Very concise and front-loaded with key information.

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

Completeness4/5

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

Covers purpose and constraints (Facebook, async). Missing explicit mention of return value, but as an async operation, it is acceptable. Adequate given the simplicity of the action.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all three parameters. The tool description adds no additional parameter-specific information beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the action ('Remove a like from a comment'), the resource (comment), the platform (Facebook), and the async nature. Differentiates from siblings like comments_like.

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

Usage Guidelines4/5

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

Specifies that it is currently only supported on Facebook, giving a clear context for use. Does not explicitly list alternatives, but the sibling list includes comments_like, implying when to use the opposite.

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

dm_chat_archiveA
Idempotent
Inspect

Archive (mute) a chat. Bluesky only — calls Bluesky's muteConvo. Returns the chat with archived: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesChat hashid OR external_conversation_id

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false. The description adds specific behavioral details: it calls Bluesky's muteConvo and returns the chat with archived:true. This adds value beyond annotations.

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

Conciseness5/5

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

The description is extremely concise: two sentences with no wasted words. The primary action is front-loaded ('Archive (mute) a chat'), followed by platform and behavior details.

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

Completeness4/5

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

For a simple toggle operation with one parameter and no output schema, the description sufficiently covers the behavior. It could optionally mention the reversible nature via sibling, but not required.

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

Parameters3/5

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

Schema coverage is 100% and the description does not add any parameter-specific information beyond what the schema provides (chat_id is described as 'Chat hashid OR external_conversation_id' in both). Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Archive (mute) a chat'), the platform ('Bluesky only'), and the API call ('calls Bluesky's muteConvo'). It distinguishes from the sibling 'dm_chat_unarchive' by stating the operation and return value.

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

Usage Guidelines4/5

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

The description gives platform context ('Bluesky only') which helps when to use. It does not explicitly state when not to use or mention alternative tools, but the sibling 'dm_chat_unarchive' implies the opposite operation.

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

dm_chat_createA
Idempotent
Inspect

Find or create a chat for a participant on a DM-capable profile (idempotent — returns the existing chat if one already exists). Use before sending a message to a participant the profile has not yet messaged. On WhatsApp, placement_id (the phone number id from profiles_placements) is required and participant_external_id is the recipient's phone number in international format (digits only, no +); a new WhatsApp conversation must open with an approved template via dm_message_send.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid
placement_idNoPlacement id from profiles_placements. Required on WhatsApp (the phone number the chat belongs to); optional on Facebook (the page id). Ignored elsewhere.
participant_nameNoOptional display name for the participant
participant_usernameNoOptional display username for the participant
participant_external_idYesPlatform participant ID (Instagram-scoped user ID, Facebook PSID, Telegram user id, Bluesky DID, or WhatsApp phone number with country code — non-digits are stripped)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare idempotentHint, readOnlyHint=false, destructiveHint=false, and openWorldHint, so safety is covered. The description adds real behavioral context beyond them: WhatsApp requires placement_id and a template-opened conversation, and the call returns the existing chat rather than erroring. That is meaningful added disclosure.

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

Conciseness4/5

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

Two sentences, front-loaded with the find-or-create purpose before usage and platform caveats. It is somewhat dense and packs multiple platform rules into the second sentence, but every clause carries actionable information.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers return behavior (returns existing chat if present), the pre-send usage flow, and WhatsApp prerequisites. Missing only an explicit pointer to the sibling read tool, which would make it fully self-sufficient.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the description earns an upgrade by adding platform-conditional meaning: placement_id is required on WhatsApp (phone number id from profiles_placements) and participant_external_id must be digits-only international format there. It adds format and conditional-requirement context the schema alone doesn't fully convey.

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

Purpose5/5

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

States a specific verb+resource ('Find or create a chat') and scopes it ('for a participant on a DM-capable profile'), which separates it from siblings like dm_chat_get or dm_chats_list without opening a schema. The idempotent qualifier sharpens the contract.

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

Usage Guidelines4/5

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

Explicitly gives the triggering situation: 'Use before sending a message to a participant the profile has not yet messaged,' and routes WhatsApp users to dm_message_send for required templates. It does not name the read alternative (dm_chat_get) or state when not to use it, so it stops short of full when/when-not coverage.

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

dm_chat_getA
Read-onlyIdempotent
Inspect

Get a single chat by Postproxy hashid or by the platform's external_conversation_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesChat hashid OR external_conversation_id

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only, safe behavior is clear. The description adds the identification detail but does not contradict annotations. It contributes minimal 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.

Conciseness5/5

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

The description is a single, clear sentence with no extraneous words. All information is front-loaded and efficient.

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

Completeness4/5

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

For a simple read-only retrieval tool with comprehensive annotations, the description sufficiently covers how to identify the chat. It lacks explicit mention of response contents, but this is implied by 'Get a single chat'. No output schema exists, but the tool's simplicity reduces the need for extra details.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter. The description repeats the allowable values (hashid or external_conversation_id) already documented in the schema, adding no new semantic meaning.

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

Purpose5/5

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

The description clearly states the tool retrieves a single chat using either a Postproxy hashid or an external_conversation_id, precisely identifying the resource and identification method. It distinguishes from siblings like dm_chats_list (list) and dm_chat_create (create).

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

Usage Guidelines3/5

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

The description specifies the two identification methods but provides no guidance on when to use this tool versus alternatives such as dm_chats_list. No exclusions or when-not-to-use information is given.

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

dm_chat_mark_readA
Idempotent
Inspect

Mark a chat as read. On WhatsApp this sends the read receipt (blue ticks) for the newest inbound message to the participant; on other networks it only stamps metadata.read_at locally. Returns the chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesChat hashid OR external_conversation_id

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only declare it is a non-destructive, idempotent, open-world mutation; the description adds the crucial externally visible consequence that on WhatsApp this fires a read receipt (blue ticks) to the participant while on other networks it only writes local metadata.read_at, and notes the return value. That is real behavioral context 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.

Conciseness5/5

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

Three tight sentences, front-loaded with the action, then the platform-specific behavior, then the return value. No filler and every clause carries information.

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

Completeness4/5

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

For a single-parameter mutation with full schema coverage and annotations covering the safety profile, the description covers action, side effects, and return value. Only the absence of any precondition/routing guidance keeps it short of fully complete.

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

Parameters3/5

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

Schema coverage is 100% and chat_id already documents that it accepts a hashid or external_conversation_id, so the description adds no parameter-level meaning. Baseline 3 applies when the schema carries the load.

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

Purpose5/5

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

States a specific verb and resource ('Mark a chat as read') and immediately scopes the effect by platform, so an agent can tell exactly what operation this is and how it differs in behavior from any other dm_* tool.

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

Usage Guidelines3/5

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

Usage is implied by the operation itself, but the description never states when to prefer this over adjacent tools (e.g. dm_chat_archive) or any precondition for calling it. Adequate but leaves routing to inference.

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

dm_chats_listA
Read-onlyIdempotent
Inspect

List direct-message chats (conversations) for a DM-capable profile, ordered by most recent activity. Supported on Facebook (Messenger), Instagram, Telegram, Bluesky, and WhatsApp. WhatsApp chats carry external_placement_id (the phone number), group (true for group chats) and within_messaging_window.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (zero-indexed, default 0)
afterNoISO 8601 timestamp — only chats with last_message_at after this
beforeNoISO 8601 timestamp — only chats with last_message_at before this
per_pageNoItems per page (default 20)
profile_idYesProfile hashid (Facebook, Instagram, Telegram, Bluesky, or WhatsApp)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds genuine behavior: ordering by most recent activity and the WhatsApp-specific return fields (external_placement_id, group, within_messaging_window), which tell the agent to expect schema variance per platform.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action and ordering, then platform scope, then the WhatsApp field caveat. Dense but every clause carries information; the platform enumeration is slightly list-heavy but earns its place.

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

Completeness4/5

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

With no output schema and only annotation-level safety info, the description does meaningful work by flagging WhatsApp-only return fields and the recency ordering. It stops short of describing the general chat object shape or pagination interaction for non-WhatsApp platforms.

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

Parameters3/5

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

Schema coverage is 100%, so page, after, before, per_page and profile_id are already documented with types and semantics. The description adds no parameter-level detail (e.g., how after/before interact with ordering), so the baseline 3 applies.

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

Purpose4/5

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

Names a specific verb and resource ('List direct-message chats (conversations)') and adds scope ('for a DM-capable profile'), which clearly separates it from dm_messages_list and dm_chat_get. It does not explicitly name those siblings, but the resource noun alone makes the distinction legible.

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

Usage Guidelines3/5

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

Usage is implied (enumerate a profile's chats, most recent first) and the supported-platform list gives useful context, but there is no explicit when-to-use rule, no exclusions, and no routing to dm_messages_list for message-level data or dm_chat_get for a single chat.

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

dm_chat_unarchiveA
Idempotent
Inspect

Unarchive (unmute) a chat. Bluesky only — calls Bluesky's unmuteConvo. Returns the chat with archived: false.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesChat hashid OR external_conversation_id

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true and destructiveHint=false, and the description adds that it calls Bluesky's unmuteConvo and returns a chat with archived: false. This provides sufficient transparency beyond annotations, though no side effects or prerequisites are mentioned.

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

Conciseness5/5

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

The description is two concise sentences, front-loading the primary action and adding necessary context about the return value. Every sentence earns its place.

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

Completeness5/5

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

Given the single parameter, full schema coverage, no output schema, and adequate annotations, the description fully explains the tool's purpose, behavior, and return value without gaps.

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

Parameters3/5

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

Schema coverage is 100% with a clear description for chat_id. The tool description does not add meaning beyond what the schema already provides, which is acceptable but not exceptional.

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

Purpose5/5

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

The description clearly states it unarchives/unmutes a chat, specifies the platform (Bluesky only), calls Bluesky's unmuteConvo, and returns the chat with archived: false. This distinguishes it from sibling tools like dm_chat_archive and dm_chat_get.

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

Usage Guidelines4/5

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

While the description doesn't explicitly state when to use it vs alternatives, it is clearly the inverse of dm_chat_archive, and the sibling list provides enough context. A slightly higher score would require explicit direction.

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

dm_comment_private_replyA
Destructive
Inspect

Send a DM to the author of a comment, in reply to that comment (Meta 'Private Replies'). Bypasses the 24h window (comments up to 7 days old) and creates/reuses a chat automatically. One private reply per comment, ever. Instagram and Facebook (Page comments) only. Supports the same quick_replies / buttons / card interactive elements as dm_message_send; media attachments are not available on private replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardNoExtra generic-template fields for the card that carries buttons — requires buttons. Renders a richer product-style card.
textYesDM text
buttonsNoUp to 3 buttons attached to the reply, which stay in the thread. Sent as a Meta generic template whose element title is your text — so text is capped at 80 characters when buttons are present. A postback tap arrives as an inbound message carrying tapped_action.payload.
post_idYesPost hashid
comment_idYesComment hashid OR external ID
profile_idYesProfile hashid (Instagram or Facebook only)
quick_repliesNoUp to 13 tappable chips shown above the participant's composer; they disappear once one is tapped. A tap arrives as an inbound message carrying tapped_action.payload. On Instagram, quick replies cannot be combined with buttons (Facebook accepts both).

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare the mutation profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), and the description adds rich context beyond them: it auto-creates/reuses a chat, is hard-limited to one reply per comment ever, bypasses the 24h window, and omits media attachments. These are exactly the operational traits an agent needs before calling a write tool.

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

Conciseness4/5

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

Front-loads purpose in the first clause, then layers constraints and interactive-element behavior. It is dense but nearly every clause carries a distinct, decision-relevant fact; only the dm_message_send parity sentence is arguably redundant.

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

Completeness5/5

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

For a mutation tool with no output schema and seven parameters, the description covers the platform scope, the one-shot constraint, window bypass, and how postback taps surface as inbound messages. An agent has everything needed to call it correctly and anticipate the side effects.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter constraints not encoded in the schema: text is capped at 80 characters when buttons are present, media is unavailable, and quick replies cannot be combined with buttons on Instagram. This meaningfully extends what the schema alone conveys.

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

Purpose5/5

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

States a precise verb+resource ('Send a DM to the author of a comment, in reply to that comment') and names the Meta concept ('Private Replies'). The scope ('Instagram and Facebook (Page comments) only') and the implicit contrast with dm_message_send, which it references for interactive-element parity, let an agent place it correctly among siblings.

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

Usage Guidelines4/5

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

Gives strong usage context: bypasses the 24h window for comments up to 7 days old, one private reply per comment ever, and platform limits. It references dm_message_send but only for feature parity, not as an explicit 'use that instead when X' routing rule, so it stops just short of full when/when-not guidance.

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

dm_message_editA
Destructive
Inspect

Edit a previously-sent outbound message on the platform. Telegram only — Facebook and Instagram do not expose outbound edits, so Meta quick_replies and buttons cannot be changed after sending. Provide body (new text/caption) and/or reply_markup (pass {} to clear the keyboard); at least one is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoNew message text (or new caption for media messages).
message_idYesMessage hashid OR external_id
reply_markupNoNew inline keyboard / reply_markup. Pass an empty object {} to remove the existing keyboard.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds real context beyond that: the Telegram-only limitation, and that passing {} to reply_markup clears an existing keyboard. It does not mention auth requirements, rate limits, or edit-window constraints, so it is strong 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.

Conciseness4/5

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

Three sentences, front-loaded with the action and its platform scope, followed by the constraint. Every sentence carries information, though the Meta quick_replies/buttons clause is somewhat redundant with the preceding 'Facebook and Instagram do not expose outbound edits'.

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

Completeness4/5

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

No output schema exists, and this is a destructive mutation on an open-world platform, yet the description covers platform scope, parameter constraints, and keyboard-clearing behavior adequately. It omits failure modes and edit-window limits, which would be useful for a destructive edit but are not strictly required to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description contributes a cross-parameter constraint the schema cannot express: 'at least one of body/reply_markup is required' even though only message_id is schema-required. It also reinforces the {} semantics for reply_markup.

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

Purpose5/5

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

States a specific verb (edit) and resource (a previously-sent outbound message) with the scope narrowed to Telegram. An agent can distinguish it from dm_message_send (new message), dm_message_react, and comments_edit without opening any schema.

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

Usage Guidelines4/5

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

Explicitly states when the tool is unavailable (Facebook/Instagram do not expose outbound edits, so Meta quick_replies/buttons cannot be changed) and gives the precondition that at least one of body/reply_markup is required. It does not, however, name a sibling alternative for the unsupported platforms, so routing guidance is one step short of complete.

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

dm_message_getA
Read-onlyIdempotent
Inspect

Get a single message by Postproxy hashid or by the platform's external_id. Outbound messages echo the quick_replies / buttons / card they were sent with; an inbound message created by a tap carries tapped_action: {kind, payload, title}.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesMessage hashid OR external_id

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes further, disclosing return-shape behavior that annotations cannot: outbound messages echo quick_replies/buttons/card, and inbound tap messages carry tapped_action with kind/payload/title — genuinely useful context since no output schema exists.

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

Conciseness4/5

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

Two sentences, zero filler, with the core action front-loaded ahead of the supporting return-value detail. Efficient and easy to scan.

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

Completeness4/5

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

With no output schema, the description steps in to describe notable return content, which is the right call for a single-item getter. It omits error behavior (e.g., unknown identifier) but is otherwise sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% and the message_id field already documents 'Message hashid OR external_id'. The description restates this, only marginally sharpening it with the 'Postproxy hashid' qualifier, so it adds little beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Get a single message') and enumerates the two accepted identifiers (Postproxy hashid or external_id). The 'single message' scope implicitly separates it from dm_messages_list, though it never names a sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the agent infers it should call this when it already holds a message identifier. There is no guidance on when to prefer dm_messages_list versus this tool, and no mention of prerequisites or paging context.

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

dm_message_reactA
Idempotent
Inspect

Add a reaction from your business account to a message. Facebook Messenger, Instagram Direct and WhatsApp (not Telegram or Bluesky). On WhatsApp pass emoji — any unicode emoji — and reaction names are ignored. A second react replaces the previous one.

ParametersJSON Schema
NameRequiredDescriptionDefault
emojiNoUnicode emoji. Forwarded to Instagram; on Facebook Messenger it overrides 'reaction' as the literal value sent; required on WhatsApp.
reactionNoNamed reaction, defaults to 'love'. On Instagram only 'love' is accepted; on Facebook Messenger common names (love, like, dislike, smile, wow, sad, angry) are auto-translated to emoji.
message_idYesMessage hashid OR external_id

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, and the description explains the replace-on-second-react semantics that back the idempotency claim, plus platform availability. It doesn't address auth/permission requirements beyond 'your business account', but adds genuine context over 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.

Conciseness5/5

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

Three tight sentences, front-loaded with the action, then platform scope, then per-platform parameter rule, then the replace behavior. No filler; every sentence carries information.

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

Completeness4/5

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

For a mutation tool with full annotations and no output schema, the description covers platform scope, parameter rules, and the idempotent replace behavior. Remaining gaps (success/return shape, error cases) are minor against the annotation coverage.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds cross-parameter behavior the schema doesn't: WhatsApp ignores 'reaction' and requires 'emoji', and a second react replaces the prior one. That is meaningful semantic value beyond the per-field descriptions.

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

Purpose5/5

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

States a specific verb+resource ('Add a reaction from your business account to a message') and scopes it to three named platforms with explicit exclusions (not Telegram or Bluesky). Together with the sibling dm_message_unreact, the write direction is unambiguous.

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

Usage Guidelines4/5

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

Gives platform-conditional guidance: on WhatsApp pass emoji and ignore reaction names, while Instagram/Messenger use named reactions. It does not explicitly route the agent to dm_message_unreact or state prerequisites, but the platform context is clear enough to invoke correctly.

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

dm_message_sendA
Destructive
Inspect

Send an outbound direct message. Provide EXACTLY ONE of body (text), media (a single attachment), or — on WhatsApp — template, interactive, location or contacts. The message is queued and delivered asynchronously (returns status: pending). Outside Meta's 24h messaging window, a human agent replying to the participant's own inquiry can pass tag: HUMAN_AGENT (Facebook/Instagram only) — never for promotional or automated content. On WhatsApp the window is re-opened only by sending an approved template (or a text with category: utility); free-form sends outside it return 422. reply_markup is Telegram-only; reply_to_external_id works on Telegram and WhatsApp; quick_replies, buttons and card are the Facebook/Instagram interactive primitives and are rejected elsewhere — WhatsApp uses interactive (Meta-shaped) instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoMessage tag for sending outside the 24h window — extends it to 7 days from the participant's last inbound message. Facebook and Instagram only; ignored on Telegram and Bluesky. Meta's policy restricts it to a human agent replying to the participant's own inquiry: using it for marketing, offers, or automated re-engagement can get that Page / Instagram account's messaging capability suspended. Past 7 days Meta rejects the send and the message lands in status: failed with the platform error in error_details.
bodyNoMessage text. Required when media is empty (provide body OR media, not both).
cardNoFacebook and Instagram only. Extra generic-template fields for the card that carries buttons — requires buttons. Renders a richer product-style card.
mediaNoUp to one media attachment as a URL or local file path (absolute /path/to/file.jpg, relative ./image.png, or ~/Pictures/photo.jpg). Max 1 attachment. Not supported on Bluesky. WhatsApp limits: image 5MB jpeg/png, video 16MB mp4/3gpp, audio 16MB, document 100MB; on WhatsApp body may accompany media as its caption.
buttonsNoFacebook and Instagram only. Up to 3 buttons attached to the message itself, which stay in the thread. Sent as a Meta generic template whose element title is your body — so body is required and capped at 80 characters, and buttons cannot be combined with media. A postback tap arrives as an inbound message carrying tapped_action.payload.
chat_idYesChat hashid OR external_conversation_id
categoryNoWhatsApp only. Mark a plain text send as a utility Direct Send so it can go outside the 24h window without a template. Text only — cannot be combined with media, template, interactive, location or contacts. Meta reviews and bills these as utility conversations.
contactsNoWhatsApp only. Contact cards in Meta's contacts shape, e.g. [{ name: { formatted_name, first_name }, phones: [{ phone, type }] }].
filenameNoWhatsApp only. Display filename for a document attachment; defaults to the uploaded file's name.
locationNoWhatsApp only. Send a map pin.
templateNoWhatsApp only. Send an APPROVED message template (see whatsapp_templates_list). The only way to message a participant outside the 24h window or to open a brand-new conversation. Cannot be combined with body or media. variables fill the positional placeholders in order: header text vars first, then body vars, then dynamic URL button vars — the count must match the template's variable_count.
voice_noteNoWhatsApp only. Deliver an audio attachment as a voice note (renders with the waveform player). The file must be OGG with the Opus codec.
interactiveNoWhatsApp only. Meta-shaped interactive message object passed through unchanged — reply buttons (type: button, up to 3), list (type: list, up to 10 rows), cta_url, product / product_list, flow, location_request_message. Must carry type. A tap comes back as an inbound message whose body is the tapped title, with the reply id in platform_data.interactive. Session message: only inside the 24h window.
link_previewNoWhatsApp only. Set false to suppress the URL preview on a text message (default true).
reply_markupNoTelegram only. reply_markup payload — inline keyboard, custom reply keyboard, force-reply, or remove-keyboard.
quick_repliesNoFacebook and Instagram only. Up to 13 tappable chips shown above the participant's composer; they disappear once one is tapped. A tap arrives as an inbound message carrying tapped_action.payload. On Instagram, quick replies only work on a plain-text message — not with media and not with buttons (both are accepted on Facebook).
reply_to_external_idNoTelegram and WhatsApp. Platform message id (Telegram message_id or WhatsApp wamid) of the message to quote / thread under.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare the mutation/safety profile, and the description adds substantial context beyond them: asynchronous queueing with status: pending, the 422 on free-form sends outside the 24h window, tag extending the window to 7 days, and the suspension risk from misuse. This is exactly the operational context an agent needs before calling a destructive send.

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

Conciseness4/5

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

Front-loaded with the core action and the exclusivity rule, and every sentence carries real information for a 17-param multi-platform tool. It reads as a dense wall of text in one paragraph, which slightly hurts scannability, but nothing is wasted.

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

Completeness5/5

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

Covers async delivery, platform support boundaries, window/permission rules, and even return-state behavior (status: pending, status: failed with error_details) despite having no output schema. For a tool this complex, the description is complete enough to call correctly.

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

Parameters4/5

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

Schema coverage is 100% and the schema already labels each param's platform, so baseline is 3. The description adds genuine cross-parameter value the schema lacks: the one-of exclusivity between body/media/template/interactive/location/contacts, the WhatsApp window mechanics, and the note that quick_replies/buttons/card are rejected outside Facebook/Instagram.

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

Purpose5/5

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

States a specific verb+resource ('Send an outbound direct message') with clear scope (outbound, asynchronous). The platform-specific detail makes it unmistakable versus siblings like dm_message_edit or dm_message_react.

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

Usage Guidelines5/5

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

Explicit exclusivity rule ('Provide EXACTLY ONE of body, media, or — on WhatsApp — template, interactive, location or contacts') plus when-to-use guidance for templates, tag:HUMAN_AGENT, and category:utility. States when-not (never for promotional/automated content) and names the alternative route for re-opening the window.

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

dm_messages_listA
Read-onlyIdempotent
Inspect

List messages in a chat, most recent first. Optionally filter by direction or status. Inbound messages created by a tap on an interactive element you sent (quick reply, button postback, Instagram ice breaker, Telegram callback query) carry tapped_action: {kind, payload, title} — read the payload from there instead of digging through platform_data.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (zero-indexed, default 0)
statusNoFilter by status (pending, published, failed_waiting_for_retry, failed, received)
chat_idYesChat hashid OR external_conversation_id
per_pageNoItems per page (default 20)
directionNoFilter by direction

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: deterministic ordering (most recent first) and, importantly, that tapped interactive-element messages expose tapped_action {kind, payload, title} so the agent should read the payload there rather than parse platform_data. That is a non-obvious behavioral detail an agent would otherwise miss.

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

Conciseness4/5

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

Two sentences, front-loaded with purpose and ordering before the filter detail. The second sentence is dense with a long parenthetical enumeration of interactive element types, but each clause carries actionable information rather than filler.

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

Completeness4/5

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

There is no output schema, so the description carries some return-shape burden and does address it by explaining the tapped_action structure. With 100% parameter coverage and annotation-declared safety, the only mild omission is pagination behavior, which is largely covered by the schema's page/per_page descriptions.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (page, status, chat_id, per_page, direction) are already documented in the schema; the description only echoes direction and status. Baseline 3 applies. The tapped_action detail is about return data, not parameters, so it does not raise this dimension.

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

Purpose4/5

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

States a specific verb and resource ("List messages in a chat") plus a result ordering ("most recent first"), which implicitly separates it from the singular dm_message_get and the write-oriented dm_message_send. It stops short of explicitly naming an alternative sibling, so it lands at 4 rather than 5.

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

Usage Guidelines3/5

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

It says filters are optional and which two dimensions can be filtered (direction, status), which is implied usage guidance. But there is no explicit when-to-use-this vs dm_message_get or dm_chats_list, and no stated prerequisites for the chat_id. Adequate but with a clear gap.

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

dm_message_unreactA
Idempotent
Inspect

Remove your business account's reaction from a message. Facebook Messenger, Instagram Direct and WhatsApp only.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesMessage hashid OR external_id

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds meaningful nuance by narrowing scope to 'your business account's reaction' only, but says nothing about permissions, whether the reaction must already exist, or failure behavior.

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

Conciseness5/5

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

Two short front-loaded sentences: the action first, the platform constraint second. No wasted text.

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

Completeness4/5

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

For a single-parameter, idempotent, non-destructive tool with full schema coverage and annotations, the description is nearly sufficient. It covers action and platform scope but omits any error-case or precondition context, keeping it just short of complete.

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

Parameters3/5

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

With one parameter and 100% schema description coverage, the schema already explains that message_id accepts a hashid or external_id. The description adds no additional meaning about the identifier format. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Remove') and resource ('your business account's reaction from a message'), which cleanly distinguishes it from the sibling dm_message_react. An agent can tell the two 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.

Usage Guidelines3/5

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

The description names the applicable platforms (Messenger, Instagram Direct, WhatsApp), which is useful scoping, but never states when to prefer this over dm_message_react or any error/precondition for unreacting. Usage is only implied.

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

google_business_attributes_availableA
Read-only
Inspect

List which attributes a location can actually set, with their value types. Valid attributes depend on the primary category and region, so ALWAYS call this before google_business_attributes_update. Two modes: by location (the default — omit region_code and language_code, Google takes them from the listing) or by category_name (then region_code is required).

ParametersJSON Schema
NameRequiredDescriptionDefault
show_allNoReturn metadata for every attribute Google knows, not just this location's
page_sizeNo1-200 (default 200)
page_tokenNoFrom a previous response's nextPageToken
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'
region_codeNoCLDR region code. Only valid together with category_name.
category_nameNoLook up by category instead of by location, e.g. 'categories/gcid:restaurant'. Requires region_code.
language_codeNoBCP-47 code for display names. Only valid together with category_name.

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context that valid attributes depend on primary category and region and describes the two modes, but it gives no detail on pagination behavior or result shape despite having no output schema.

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

Conciseness5/5

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

Two dense, front-loaded sentences with no filler. The critical dependency (call before update) is stated immediately and the mode rules follow compactly.

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

Completeness4/5

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

For a read-only listing tool with no output schema, the description covers purpose, ordering dependency, and mode selection well. It could say more about the returned value-type metadata or paging, but 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains that region_code/language_code should be omitted in the default location mode and that region_code is required in category_name mode, clarifying the interdependency beyond the schema's per-field notes.

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

Purpose5/5

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

States a specific verb (List) and resource (attributes a location can set) plus the returned detail (value types). It clearly distinguishes itself from google_business_attributes_get and google_business_attributes_update by describing discovery of settable attributes rather than reading or writing them.

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

Usage Guidelines5/5

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

Explicitly says to ALWAYS call this before google_business_attributes_update, and names the sibling alternative. It also lays out the two invocation modes (by location as default, or by category_name) with the condition selecting each.

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

google_business_attributes_getA
Read-only
Inspect

Read the attributes currently set on a Google Business Profile location (payments, accessibility, service options, social links). Note Google omits the attributes key entirely when none are set rather than returning an empty array.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description is not obligated to restate safety. It does add genuinely useful behavioral context: Google omits the `attributes` key entirely when none are set instead of returning an empty array, which is exactly the kind of edge case an agent would otherwise mishandle.

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

Conciseness5/5

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

Two sentences, no filler. The core action and its scope lead, and the non-obvious empty-response quirk follows as a targeted caveat.

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

Completeness4/5

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

With annotations covering safety and a fully documented two-param schema, the remaining gap was return-shape behavior, which the description addresses via the omitted-`attributes`-key note. No output schema exists, so this is close to sufficient; explicit sibling routing is the only real omission.

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

Parameters3/5

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

Schema description coverage is 100%, with both profile_id and location_id documented (including the 'accounts/X/locations/Y' format). The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Read') and resource ('attributes currently set on a Google Business Profile location') and enumerates example attribute groups (payments, accessibility, service options, social links). The phrase 'currently set' implicitly separates it from google_business_attributes_available, but the sibling is never named, so the differentiation is left to inference.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance and no named alternative. The words 'currently set' imply this is the read-side counterpart to google_business_attributes_update, but the agent must infer that routing itself.

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

google_business_attributes_updateA
DestructiveIdempotent
Inspect

Set attributes on a Google Business Profile location. Value shape depends on the attribute's valueType from google_business_attributes_available: BOOL uses "values": [true], URL uses "uriValues": [{ "uri": "..." }], ENUM uses "repeatedEnumValue": { "setValues": ["TOKEN"] }. attribute_mask defaults to exactly the names you send, so untouched attributes are preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
attributesYesAttribute objects, each with a `name` (e.g. 'attributes/url_linkedin') and a value field matching its type.
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'
attribute_maskNoAttribute names to replace. Defaults to the names in `attributes`. Widen it deliberately to clear an attribute — anything listed here but absent from `attributes` is removed.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructive=true, idempotent=true and openWorld=true, so the safety profile is covered. The description adds non-obvious behavioral detail: attribute_mask defaults to exactly the names sent, so untouched attributes are preserved, and deliberately widened masks remove attributes absent from the payload.

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

Conciseness5/5

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

Three tightly packed sentences with zero filler. The core action leads, the value-shape rules follow, and the mask-default caveat closes it out.

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

Completeness4/5

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

For a mutation tool with no output schema, it covers the required inputs, the payload shape, and the destructive edge case. It does not describe the response body or error behaviour, though annotations already carry the safety profile.

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

Parameters5/5

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

Schema coverage is 100%, so the baseline would be 3, but the description goes well beyond it by spelling out the concrete value shape per valueType (BOOL values: [true], URL uriValues, ENUM repeatedEnumValue). That resolves the ambiguity of an untyped array of objects.

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

Purpose5/5

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

Specific verb + resource: 'Set attributes on a Google Business Profile location.' It also names the related tool google_business_attributes_available, signalling that this tool writes values whose shape that sibling defines, which cleanly separates it from the get/available siblings.

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

Usage Guidelines4/5

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

It tells the agent to consult google_business_attributes_available for the valueType before constructing a value, giving a clear precondition. It stops short of explicit when-not-to-use or alternative guidance (e.g. vs google_business_attributes_get).

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

google_business_categories_listA
Read-only
Inspect

Resolve Google business category resource names (e.g. 'categories/gcid:software_company') for a region. Category patches need these resource names, not display names, and the available set differs per country. Use filter to search by display name rather than paging thousands of results.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoBASIC (default) returns names only; FULL includes service types and hours types.
filterNoGoogle filter expression, e.g. "displayName=software"
page_sizeNo1-100. Values above 100 are clamped.
page_tokenNoFrom a previous response's nextPageToken
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'
region_codeYesCLDR region code, e.g. 'US', 'DE'
language_codeNoBCP-47 code for display names. Defaults to 'en'.

TDQS

A4.2/5.0
Behavior4/5

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 genuinely useful context beyond that: the category set is region-dependent, results are numerous (thousands), and the values returned are resource names rather than display names.

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

Conciseness5/5

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

Three sentences, front-loaded with the core purpose and output shape, followed by the why (patches need resource names) and the practical filtering tip. No wasted wording.

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

Completeness4/5

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

For a read-only lookup with full schema coverage and no output schema, the description covers purpose, output value form, and the key scale/region caveats. It does not describe pagination flow or default view behavior, but those are already in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all eight parameters including filter syntax, page_size clamping, and the view enum. The description reinforces filter's purpose but adds no syntax or format detail the schema lacks; baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource ('Resolve Google business category resource names ... for a region') and even shows the output format ('categories/gcid:software_company'). It is the only category-listing tool among the google_business_* siblings, so an agent can place it immediately.

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

Usage Guidelines4/5

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

It gives a clear operational condition: use `filter` to search by display name instead of paging through thousands of results, and it explains the resource-name-vs-display-name distinction needed for category patches. It stops short of explicit when-not-to-use or named alternatives, but there is no obvious sibling competitor.

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

google_business_food_menus_getA
Read-only
Inspect

Read food menus for a Google Business Profile location. Restaurant-like categories only — other locations return 422 with FAILED_PRECONDITION, which is expected rather than an error to retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOptional read mask
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'

TDQS

A4.2/5.0
Behavior4/5

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 genuinely useful context beyond annotations by warning that a 422 FAILED_PRECONDITION is expected for non-restaurant locations and should not be retried — a non-obvious behavior an agent would otherwise mishandle.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action and followed by the important error-semantics caveat. No filler or repetition of schema/annotation content.

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

Completeness4/5

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

For a read-only tool with full schema coverage and no output schema, the description covers purpose and the key error behavior. It does not sketch what a returned menu looks like, but nothing critical to correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with all three parameters documented in the schema (including the 'fields' read mask). The description adds no parameter-level syntax or format detail, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Read') and resource ('food menus') scoped to a Google Business Profile location. It is immediately distinguishable from the sibling google_business_food_menus_update, which differs only by verb.

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

Usage Guidelines4/5

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

Explicitly states the applicability condition: 'Restaurant-like categories only', and explains the failure mode for other locations (422 FAILED_PRECONDITION). It does not name the update sibling as an alternative, but the when-to-use context 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.

google_business_food_menus_updateA
DestructiveIdempotent
Inspect

Replace the food menus on a Google Business Profile location. Full replacement, not a merge. Structure is menu -> sections -> items; every label carries a languageCode and prices need currencyCode and units. Requires metadata.canHaveFoodMenus on the location, otherwise 422.

ParametersJSON Schema
NameRequiredDescriptionDefault
menusYesThe complete menu list, e.g. [{ labels: [{ displayName, languageCode }], sections: [{ labels, items: [{ labels, attributes: { price: { currencyCode, units } } }] }] }]
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description makes the destruction concrete ('full replacement, not a merge') and adds a concrete error contract (422 when canHaveFoodMenus is absent). It does not cover auth/permission requirements or rate limits, so it is strong 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.

Conciseness5/5

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

Four dense sentences, each earning its place: replacement semantics first, then structure, then the prerequisite/error condition. No filler and the critical constraint is front-loaded.

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

Completeness5/5

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

For a 3-parameter mutation tool with full annotation coverage and no output schema, the description covers the destructive semantics, the nested data shape, and the failure mode. Nothing essential for calling it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning by explaining the menu -> sections -> items nesting and the required languageCode/currencyCode/units fields that the agent must populate inside the free-form menus array. This is genuinely useful beyond the schema's terse example.

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

Purpose5/5

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

States a specific verb (replace) and resource (food menus on a Google Business Profile location), and the word 'Replace' plus 'Full replacement, not a merge' immediately distinguishes it from the sibling google_business_food_menus_get. An agent can tell what it does 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.

Usage Guidelines4/5

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

Gives clear context and a real precondition: the location must have metadata.canHaveFoodMenus or the call returns 422, and the operation is a full replacement rather than a merge. However, it never explicitly names google_business_food_menus_get as the read alternative or spells out when to prefer one over the other, so routing is left partly to inference.

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

google_business_hours_updateA
DestructiveIdempotent
Inspect

Set opening hours on a Google Business Profile location. Times accept either "09:00"/"09:00:00" strings or Google's { hours, minutes } objects. Read current hours from google_business_location_get — each block you name in fields is replaced entirely.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesWhich hour blocks to replace. At least one matching block must be sent.
moreHoursNoNamed hour sets, e.g. [{ hoursTypeId: 'DELIVERY', periods: [...] }]. Valid hoursTypeIds come from the category (see google_business_categories_list with view=FULL).
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'
regularHoursNo{ periods: [{ openDay, openTime, closeDay, closeTime }] }. Days are MONDAY..SUNDAY. A day with no period is closed.
specialHoursNo{ specialHourPeriods: [{ startDate: {year,month,day}, endDate, openTime, closeTime, closed }] } for holidays and exceptions.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds the crucial replace semantics ('each block you name in `fields` is replaced entirely'), which tells the agent exactly what gets destroyed and complements the destructive hint with real scope detail.

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

Conciseness5/5

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

Three tightly packed sentences, front-loaded with the operation, then format, then the read-and-replace semantics. No filler; every sentence earns its place.

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

Completeness4/5

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

For a destructive mutation with nested objects and no output schema, the description covers the replacement semantics and time format well. It omits auth/permission requirements and does not explicitly confirm that unnamed blocks are left untouched, minor gaps given the rich schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds format guidance the schema lacks: accepted time strings like '09:00'/'09:00:00' versus Google's { hours, minutes } objects. That is meaningful input-format information beyond the structured fields.

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

Purpose5/5

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

States a specific verb (Set) and resource (opening hours on a Google Business Profile location), which cleanly distinguishes it from the sibling read tool google_business_location_get and the unrelated google_business_location_update. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent to google_business_location_get to read current hours before writing, establishing the workflow. It stops short of stating when NOT to use this tool or explicitly warning that partial updates require sending the full block, so it is strong context rather than complete guidance.

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

google_business_location_getA
Read-only
Inspect

Read a Google Business Profile location — name, description, website, phones, categories, address, hours, service area, service items, and metadata. This is the business listing itself, not posts published to it. Read this before any google_business_*_update: Google's updates are field-masked, so you patch back objects you fetched here.

ParametersJSON Schema
NameRequiredDescriptionDefault
read_maskNoOptional comma-separated Google field paths (e.g. 'name,title,websiteUri,metadata'). Defaults to the full profile-oriented field set.
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'. Get it from profiles_placements.

TDQS

A4.5/5.0
Behavior4/5

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 context beyond the annotations: the field-masked update workflow and the requirement to fetch before updating. It doesn't mention auth or rate limits, keeping it just short of a 5.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what is read, then the disambiguation from posts, then the update-workflow prerequisite. Every sentence carries distinct, non-redundant value.

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

Completeness5/5

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

There is no output schema, so the description compensates by enumerating the returned fields, and it covers the read-before-update workflow that an agent needs. 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.

Parameters3/5

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

Schema description coverage is 100%, so profile_id, location_id, and read_mask are already fully documented in the schema. The description does not elaborate on parameter syntax or formats (e.g., the read_mask field-path convention), so baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Read') and resource ('Google Business Profile location'), then enumerates the fields returned (name, description, website, phones, categories, address, hours, etc.). It explicitly distinguishes itself from the posts resource ('This is the business listing itself, not posts published to it'), separating it from sibling post_* tools.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance: 'Read this before any google_business_*_update,' and explains why (Google's updates are field-masked, so you patch back objects fetched here). This is a concrete prerequisite workflow that routes the agent correctly relative to the *_update siblings.

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

google_business_location_updateA
DestructiveIdempotent
Inspect

Update fields on a Google Business Profile location. fields names exactly what you're replacing — anything named there but missing from the payload is CLEARED, and nested objects are replaced wholesale, not merged. Read with google_business_location_get first. Hours and the service list have their own tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoBusiness name
fieldsYesWhich fields to replace. Send a matching value for each one.
labelsNoFree-form labels, not shown publicly
latlngNo{ latitude, longitude }
profileNo{ description }. Business description, max 750 characters. Replaces the whole profile object.
openInfoNoGoogle OpenInfo object, e.g. { status: 'OPEN' }
storeCodeNoYour own external identifier for the location
categoriesNoGoogle Categories object. Category values are resource names like 'categories/gcid:software_company' — resolve them with google_business_categories_list.
profile_idYesProfile hashid of a google_business profile
websiteUriNoPublic website URL
location_idYesFull Google resource path 'accounts/X/locations/Y'
serviceAreaNoGoogle ServiceAreaBusiness object
phoneNumbersNoGoogle PhoneNumbers object, e.g. { primaryPhone, additionalPhones[] }
storefrontAddressNoGoogle PostalAddress object

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, yet the description adds the specific destructive mechanism an agent actually needs: fields named but absent from the payload are CLEARED and nested objects are replaced wholesale rather than merged. That is exactly the kind of non-obvious write semantics annotations cannot express.

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

Conciseness5/5

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

Three sentences, zero filler, and the highest-risk information (the clear-and-replace semantics of `fields`) is front-loaded right after the purpose statement. The prerequisite read and the sibling exclusions are compressed into single clauses.

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

Completeness4/5

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

For a 14-parameter mutation with no output schema and an openWorld profile, the description covers the destructive mechanics, the read-first workflow, and sibling boundaries well. It stops short of describing what the response returns or the permission/auth requirements for the update, which would complete the picture.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning to the `fields` parameter by defining it as an exact replacement manifest with clear-on-omission behavior, which the schema's own 'Which fields to replace' text only implies. Other parameters (title, labels, openInfo, etc.) are left entirely to the schema.

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

Purpose5/5

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

States a specific verb and resource ('Update fields on a Google Business Profile location') and explicitly carves out scope by naming siblings that own other parts of the resource ('Hours and the service list have their own tools'). An agent can distinguish this from google_business_hours_update and google_business_service_list_update immediately.

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

Usage Guidelines4/5

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

Gives a concrete prerequisite flow ('Read with google_business_location_get first') and names two categories of fields that must not be routed here because dedicated tools exist. It does not mention the adjacent google_business_attributes_update, so the alternative-routing advice 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.

google_business_media_createA
Destructive
Inspect

Add a photo or video to a Google Business Profile location. Google downloads the file from media_url itself — there is no upload step, so the URL must be publicly reachable https (not a short-lived signed URL, not localhost). Images need at least 250x250 and at most 5MB. Use category COVER or LOGO only when you intend to change the profile header or logo.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoWhere the media appears. Defaults to ADDITIONAL.
media_urlYesPublic https URL Google can fetch the file from
profile_idYesProfile hashid of a google_business profile
descriptionNoMax 2000 characters
location_idYesFull Google resource path 'accounts/X/locations/Y'
media_formatNoDefaults to PHOTO

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, open-world and destructive behavior, so the safety profile is covered. The description adds genuine mechanism detail absent from the annotations: Google fetches the file server-side from media_url, so there is no upload step. It could go further on return values or rate limits, but the added fetch semantics are substantive.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the core action and mechanism, then constraints, then the one parameter caveat. No filler and nothing repeated from the schema or annotations.

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

Completeness4/5

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

For a creation tool with no output schema and full annotation coverage, the description supplies the operative constraints an agent needs to succeed (URL reachability, format, size, category intent). Minor omissions remain, such as what the call returns or whether the created media id is needed for later deletion, but nothing critical blocks correct invocation.

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

Parameters4/5

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

Schema description coverage is 100%, so a baseline of 3 would apply, but the description meaningfully enriches key parameters: media_url must be publicly reachable https with concrete size/dimension limits, and category gets intent-based guidance beyond the enum list. This adds value over the schema's terse field descriptions.

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

Purpose5/5

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

The description uses a specific verb+resource ('Add a photo or video to a Google Business Profile location'), immediately distinguishing it from siblings like google_business_media_list and google_business_media_delete. An agent knows exactly what the tool does 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.

Usage Guidelines4/5

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

It gives real usage constraints ('Use category COVER or LOGO only when you intend to change the profile header or logo') and excludes invalid inputs (no short-lived signed URLs, no localhost). It stops short of routing the agent against alternatives such as media_list or media_delete, which is the only gap.

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

google_business_media_deleteA
DestructiveIdempotent
Inspect

Permanently remove a photo or video from a Google Business Profile location. media_name is the full resource name from google_business_media_list and must belong to this location.

ParametersJSON Schema
NameRequiredDescriptionDefault
media_nameYesMedia resource name 'accounts/X/locations/Y/media/Z'
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is largely covered. The description still adds value by emphasizing the removal is permanent (irreversible) and by imposing the cross-location ownership constraint, which annotations do not convey.

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

Conciseness5/5

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

Two tight sentences with the action and its effect front-loaded, followed by the parameter constraint. No filler or repetition of the tool name.

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

Completeness4/5

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

For a three-parameter delete tool with full annotation coverage and no output schema, the description supplies purpose, parameter provenance and a precondition. Return-value behavior is not described, but that is a minor gap for a straightforward deletion.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by stating that media_name originates from google_business_media_list and must belong to the target location, adding provenance and validation meaning the schema alone does not.

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

Purpose5/5

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

The description pairs a specific verb ('Permanently remove') with a specific resource ('a photo or video from a Google Business Profile location'), which cleanly separates it from sibling tools google_business_media_create and google_business_media_list 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.

Usage Guidelines4/5

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

It tells the agent where the required media_name comes from ('the full resource name from google_business_media_list') and adds a precondition ('must belong to this location'). There is no explicit when-not-to-use guidance, but the sourcing pointer is concrete routing context.

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

google_business_media_listA
Read-only
Inspect

List the photos and videos on a Google Business Profile location. These are profile photos, distinct from media attached to a local post.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNo1-250 (default 100)
page_tokenNoFrom a previous response's nextPageToken
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one piece of context beyond that (these are profile-level photos, not post media). It says nothing about pagination behavior or result ordering, but with annotations carrying the safety burden a 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.

Conciseness5/5

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

Two short sentences with zero filler, and the core operation is front-loaded ahead of the disambiguating nuance. Every sentence earns its place.

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

Completeness4/5

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

For a read-only list tool with a fully documented parameter schema and no output schema, the description covers what it is and how it differs from post media. Pagination and return-shape details are the only omissions, and the schema already hints at pagination, so it is adequate.

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

Parameters3/5

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

Schema description coverage is 100%, so page_size, page_token, profile_id, and location_id are already documented in the schema. The description adds no parameter-level detail (e.g., how to obtain location_id or how page_token chains). Baseline 3 for a fully-documented schema.

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

Purpose4/5

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

States a specific verb and resource: 'List the photos and videos on a Google Business Profile location.' It adds a useful scope clarification that these are profile photos rather than media attached to a local post, which helps distinguish it from other media concepts. It doesn't explicitly differentiate from the closer siblings media_create/media_delete, but the verb makes the distinction obvious.

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

Usage Guidelines3/5

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

The second sentence implies the usage boundary by contrasting profile media with local-post media, which helps an agent route correctly. However, there is no explicit 'use this when' statement, no alternatives named, and no mention of prerequisites or pagination workflow. Usage is only implied.

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

google_business_service_list_getB
Read-only
Inspect

Read the services offered by a Google Business Profile location. Editable only when the location's metadata.canModifyServiceList is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds the metadata.canModifyServiceList precondition, which is genuinely useful context, but it applies to editability rather than to this read operation and adds no return/format behavior.

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

Conciseness4/5

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

Two short sentences with the action front-loaded and zero filler. The second sentence is terse, though its placement in a read tool's description is slightly off-topic.

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

Completeness4/5

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

For a simple two-parameter read tool with full schema coverage, complete annotations, and no output schema, the description is sufficient. Nothing critical for correct invocation is missing, though naming the update sibling would have completed the picture.

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

Parameters3/5

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

Both parameters are fully documented in the schema (100% coverage, including the 'accounts/X/locations/Y' path format), so the schema carries the burden. The description adds nothing about profile_id or location_id; baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Read the services offered by a Google Business Profile location.' An agent can identify it as the read counterpart to google_business_service_list_update, but the sibling is never named explicitly, so differentiation is inferred rather than stated.

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

Usage Guidelines2/5

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

No when-to-use guidance or alternative mentioned. The clause 'Editable only when metadata.canModifyServiceList is true' is a condition governing mutation via the sibling update tool, not guidance for invoking this read tool, so it does not help the agent choose here.

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

google_business_service_list_updateA
DestructiveIdempotent
Inspect

Replace the service list on a Google Business Profile location. This is a full replacement, not a merge — send the complete list. Items are either { structuredServiceItem: { serviceTypeId } } using a serviceTypeId from the location's category, or { freeFormServiceItem: { category, label: { displayName, languageCode } } }. Fails with 422 when metadata.canModifyServiceList is false.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a google_business profile
location_idYesFull Google resource path 'accounts/X/locations/Y'
serviceItemsYesThe complete service list. Read the current one first and edit those objects — accepted fields vary by location.

TDQS

A4.6/5.0
Behavior5/5

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

While annotations already flag destructiveHint=true and idempotentHint=true, the description adds substantial context beyond them: it explains the replacement is destructive (overwrites, not merges), names the exact failure condition (422 when metadata.canModifyServiceList is false), and specifies the accepted item shapes. This is genuinely useful behavioral disclosure.

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

Conciseness5/5

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

Three dense, front-loaded sentences with zero filler: replacement semantics lead, item formats follow, failure condition closes. Every sentence earns its place.

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

Completeness4/5

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

For a destructive mutation tool with no output schema, the description covers replacement semantics, item structure, the read-first workflow, and the failure mode. It omits any note on the response shape, but that is a minor gap against otherwise thorough coverage.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description meaningfully exceeds it by detailing the two item shapes (structuredServiceItem with serviceTypeId from the location's category vs freeFormServiceItem with category/label), which the schema's generic 'accepted fields vary' text does not provide.

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

Purpose5/5

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

States a specific verb and resource ('Replace the service list on a Google Business Profile location') with clear scope. An agent can immediately distinguish this mutation tool from the sibling google_business_service_list_get 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.

Usage Guidelines4/5

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

Gives strong usage context: 'This is a full replacement, not a merge — send the complete list,' and the schema note directs reading the current list first. It also states the 422 precondition tied to metadata.canModifyServiceList. It stops short of explicitly naming the get sibling as the read-first step, so it's clear but not exhaustively routing.

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

history_listA
Read-only
Inspect

List recent post jobs. Each entry includes the full content, created_at, scheduled_at (null if not scheduled), draft flag, internal status, and the platforms the post targets with their status and published URLs

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of jobs to return (default: 10)

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnly/destructive/openWorld, so the safety profile is covered. The description adds genuine behavioral value by enumerating the returned fields and clarifying null semantics for scheduled_at, which is important given there is no output schema.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. The long field list is justified because no output schema exists to carry that information.

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

Completeness4/5

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

For a read-only list tool with no output schema, describing the entry shape and the scheduled_at null case is exactly the gap that needed filling. It still omits ordering/pagination semantics for 'recent', which keeps it short of complete.

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

Parameters3/5

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

Only one parameter (limit) and the schema documents it at 100% coverage with its default. The description adds nothing about limit, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb ('List') and resource ('recent post jobs'), and the field enumeration makes the scope concrete. It is reasonably distinguishable from post_status/post_stats, though it never names those siblings to sharpen the boundary.

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

Usage Guidelines2/5

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

No when-to-use guidance and no alternatives named. An agent cannot tell from the text whether to prefer this over post_status, post_stats, or queues_list; 'recent' is left undefined (how recent, ordering, pagination).

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

post_deleteA
DestructiveIdempotent
Inspect

Delete a post from the database. By default does NOT remove from social media platforms. Pass delete_on_platform=true to also remove from all published platforms before DB deletion.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID to delete
delete_on_platformNoIf true, also deletes the post from all published platforms before removing it from the database. Defaults to false.

TDQS

A4.7/5.0
Behavior5/5

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

The description adds crucial behavioral details beyond annotations: it explains the default non-destructive behavior for platforms and the optional destructive action, which is consistent with destructiveHint=true and provides necessary nuance.

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

Conciseness5/5

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

The description is extremely concise—only two sentences—with no wasted words. It front-loads the primary action and follows with the key conditional behavior.

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

Completeness5/5

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

For a tool with only two parameters and no output schema, the description covers all necessary information: the deletion action, the default scope, and the optional extended behavior. It is complete and sufficient.

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

Parameters4/5

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

While schema coverage is 100%, the description adds value by explaining the default behavior of the delete_on_platform parameter and its effect, making the tool usage clearer.

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

Purpose5/5

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

The description clearly states it deletes a post from the database and distinguishes the default behavior (no platform removal) from the optional platform deletion. It is specific and contrasts with sibling tools like post_delete_on_platform.

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

Usage Guidelines4/5

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

The description explains when to use the optional delete_on_platform parameter, providing clear context. However, it does not explicitly compare with the sibling tool post_delete_on_platform, though the distinction is implied.

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

post_delete_on_platformA
Destructive
Inspect

Delete a published post from social media platforms WITHOUT removing it from the database. Async via background job. Optionally narrow scope by post_profile_id (covers entire thread for that profile), profile_id, or network. With no scope, deletes from all published platforms. Supported: Facebook, Threads, X (Twitter), LinkedIn, Pinterest, YouTube. NOT supported: Instagram, TikTok.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork name (e.g. twitter, facebook, threads, linkedin, pinterest, youtube). Deletes all post profiles for this network on the post.
post_idYesPost ID
profile_idNoID of a profile. Deletes all post profiles for this profile on the post.
post_profile_idNoID of a specific post profile. Resolves to underlying profile and deletes across the full thread (parent + children).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, but the description adds 'Async via background job' and clarifies it does not remove from database, which are useful 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.

Conciseness5/5

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

Single paragraph, front-loaded with key information. 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.

Completeness4/5

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

Covers scope, async nature, supported/unsupported platforms. No output schema, but for a deletion tool return values are less critical. Missing details on return or confirmation, but sufficient for typical use.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds meaning for each parameter: explains how post_profile_id resolves to underlying profile and deletes across full thread, and clarifies scope narrowing. This adds value beyond the schema.

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

Purpose5/5

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

The description clearly states the action: 'Delete a published post from social media platforms WITHOUT removing it from the database.' This distinguishes it from siblings like 'post_delete' and lists supported platforms.

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

Usage Guidelines4/5

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

Provides clear context on how to narrow scope via optional parameters (post_profile_id, profile_id, network) and states default behavior ('deletes from all published platforms'). Also lists unsupported platforms, but lacks explicit alternatives to this tool.

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

post_publishB
Destructive
Inspect

Publish a post to specified social media profiles. Supports text content, media attachments, scheduling, drafts, threads (X and Threads only), and platform-specific customization via the 'platforms' parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftNoIf true, creates a draft post that won't publish automatically
mediaNoOptional array of media URLs or local file paths (images or videos). File paths can be absolute (/path/to/file.jpg), relative (./image.png), or use ~ for home directory (~/Pictures/photo.jpg)
threadNoOptional array of thread child posts (supported on X/Twitter and Threads only). The parent post is published first, then each child is published as a reply in order.
contentNoPost content text (caption/description). Required except for Stories: when instagram/facebook format is 'story', omit it or pass an empty string — Stories can't carry body text.
profilesYesArray of profile IDs (hashids) or platform names (e.g., 'linkedin', 'instagram', 'twitter'). When using platform names, posts to the first connected profile for that platform.
queue_idNoOptional queue ID to add the post to. The queue will automatically assign a timeslot. Do not use together with 'schedule'.
scheduleNoOptional ISO 8601 scheduled time (e.g., '2024-12-31T23:59:59Z')
platformsNoPlatform-specific parameters. Keys are platform names, values are parameter objects. Use this to add collaborators, set video titles, privacy settings, etc.
queue_priorityNoOptional priority when adding to a queue (default: medium). Higher priority posts get earlier timeslots.
idempotency_keyNoOptional idempotency key for request deduplication
require_confirmationNoIf true, return summary without publishing (dry run)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the agent knows this is an irreversible public write. The description adds only capability scope, not the behavioral context an agent would want at call time, such as confirmation requirements, failure/partial-publish behavior, or the fact that publishing is public and cannot be undone.

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

Conciseness5/5

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

Two sentences, front-loaded with the core verb and resource, followed by a compact feature enumeration. No filler or restatement of structured data.

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

Completeness3/5

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

For an 11-parameter tool with nested platform objects and no output schema, the description is thin: it omits idempotency/dry-run semantics, mutual exclusions (schedule vs queue_id), and any sense of return value. The schema compensates for much of this, but the description itself does not.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter, including the rich nested 'platforms' object, is already documented. The description only names the 'platforms' parameter and repeats the X/Threads thread limitation, adding essentially no meaning beyond the schema.

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

Purpose4/5

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

States a specific verb+resource ('Publish a post to specified social media profiles') and enumerates the supported capabilities. It does not, however, differentiate itself from sibling post_publish_draft, which is left for the agent to infer 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.

Usage Guidelines2/5

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

The description lists what the tool supports but gives no when-to-use guidance: no indication of when to prefer this over post_publish_draft, post_update, or a queue-based flow, and no mention of prerequisites such as connected profiles or required placements.

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

post_publish_draftAInspect

Publish a draft post. Only posts with draft status can be published using this endpoint

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID of the draft post to publish

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false (write operation) and destructiveHint=false. The description reinforces write behavior with 'publish' but adds no new behavioral context such as permissions, rate limits, or side effects. It is adequate but does not exceed what annotations provide.

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

Conciseness5/5

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

Two concise sentences front-loading the purpose and constraint. Every word earns its place; no unnecessary detail.

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

Completeness4/5

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

Given the tool's simplicity (1 param, no output schema), the description covers the core action and precondition. It does not mention return value or confirmation, but for a simple publish action, this is mostly sufficient. Slight room for improvement to describe expected outcome.

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

Parameters3/5

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

Schema description coverage is 100% with the parameter fully described. The tool description adds no additional meaning beyond the schema, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action 'publish' on 'draft post', and adds the condition that only draft status posts can be published. This distinguishes it from sibling tools like 'post_publish' which likely targets non-draft posts, and 'post_update' which doesn't change status.

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

Usage Guidelines4/5

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

The description explicitly says 'Only posts with draft status can be published using this endpoint', providing clear when-to-use guidance. However, it does not mention alternatives for non-draft posts or explicitly state when not to use this tool, missing a small opportunity to direct users to sibling tools.

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

post_statsA
Read-only
Inspect

Get stats snapshots for one or more posts. Returns all matching snapshots so you can see trends over time. Supports filtering by profiles/networks and timespan.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoOptional ISO 8601 timestamp — only include snapshots recorded at or before this time
fromNoOptional ISO 8601 timestamp — only include snapshots recorded at or after this time
post_idsYesArray of post hashids (max 50)
profilesNoOptional comma-separated list of profile hashids or network names (e.g. 'instagram,twitter' or 'abc123,def456' or mixed)

TDQS

A3.8/5.0
Behavior4/5

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 behavioral context by stating it 'Returns all matching snapshots,' implying no pagination, and mentions trend visualization and filtering support. 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.

Conciseness4/5

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

Three sentences that are clear and front-loaded. The first sentence states the core purpose, the second adds value about returns, and the third notes filtering options. Minor redundancy ('Get stats snapshots' vs 'Returns all matching snapshots'), but overall efficient.

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

Completeness3/5

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

With no output schema, the description should ideally explain the return format or stats fields. It only vaguely mentions 'trends over time'. The description adequately covers the input and basic behavior but lacks detail about what data is returned, leaving some gaps for a complex tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description mentions filtering by profiles/networks and timespan, but does not add new meaning or clarify parameter format beyond the schema.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('stats snapshots for one or more posts'), clearly stating what the tool does. It distinguishes from siblings like 'profiles_stats' by mentioning filtering by profiles/networks and timespan, which is unique to this tool.

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

Usage Guidelines3/5

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

The description implies usage (when you need stats trends over time) but does not explicitly state when to use this tool versus alternatives like 'profiles_stats' or 'history_list'. No exclusions or when-not-to-use guidance is provided.

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

post_statusA
Read-only
Inspect

Get status of a post by post ID. Returns the full content, scheduled_at (null if not scheduled), created_at, draft flag, internal status, per-platform status with published URLs, and media details

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID from post.publish response

TDQS

A3.5/5.0
Behavior4/5

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

With readOnlyHint/destructiveHint=false already covering the safety profile, the description adds genuinely useful behavioral detail: scheduled_at is null when unscheduled, and the response includes per-platform status with published URLs and media details. It stops short of error behavior (e.g., unknown post ID), so not a 5.

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

Conciseness4/5

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

A single front-loaded sentence stating purpose first, then the payload contents. The field list is long but earns its place because there is no output schema; slightly run-on but no wasted words.

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

Completeness4/5

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

Because no output schema exists, the description correctly carries the burden of describing return values, which it does thoroughly. It covers the read-only nature via annotations and the main payload; only error/not-found behavior is left unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% for the single post_id parameter, so the schema fully documents its meaning and origin. The description adds nothing about the parameter beyond what the schema states – baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb+resource ('Get status of a post by post ID') and enumerates the returned fields, so the agent knows exactly what it retrieves. It does not, however, explicitly distinguish itself from the similarly named sibling post_stats, leaving that differentiation to inference.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance and never mentions the alternative tools (post_stats, post_publish, post_update). The only workflow hint comes indirectly from the schema ('Post ID from post.publish response'), not from the description itself.

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

post_updateA
Destructive
Inspect

Update an existing post. Only drafts or scheduled posts (more than 5 min before publish) can be updated. Only send fields you want to change — omitted fields are left unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftNoSet or unset draft status
mediaNoReplace all media (array of media URLs). Full replace — send empty array to remove all. Omit to keep existing.
threadNoReplace all thread children (full replace). Send empty array to remove all. Omit to keep existing.
contentNoUpdated text content
post_idYesPost ID to update
profilesNoReplace all profiles (array of profile IDs or platform names). Full replace — omit to keep existing.
queue_idNoQueue ID to assign the post to
scheduleNoUpdated ISO 8601 scheduled time
platformsNoPlatform-specific parameters (merged with existing). Same structure as post.publish.
queue_priorityNoQueue priority

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already show destructiveHint=true, but description adds valuable context about partial updates and post status constraints. No contradiction.

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

Conciseness5/5

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

Two sentences, no fluff, critical information front-loaded. Every sentence adds value.

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

Completeness4/5

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

Covers core behavior and constraints. No output schema, but parameters are well-documented in schema. Could mention error cases or return format, but not required for a simple update tool.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description adds general partial-update guidance but no param-specific detail beyond schema.

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

Purpose5/5

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

Description clearly states 'Update an existing post' with specific constraints. Distinguishes from siblings like post_delete and post_publish.

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

Usage Guidelines5/5

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

Explicitly states when to use (only drafts or scheduled posts more than 5 min before publish) and provides update strategy ('only send fields you want to change').

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

profile_comments_createA
Destructive
Inspect

Reply to an existing profile comment (Google Business review). Top-level comments are NOT allowed — you can only reply to a review that already exists. parent_id is required. Response is returned immediately with status 'pending'; a background job then publishes to Google and updates status to 'published' or 'failed'.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesReply body.
parent_idYesPostproxy hashid OR external_id of the review being replied to.
profile_idYesProfile hashid (google_business profile).

TDQS

A4.5/5.0
Behavior5/5

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

Discloses async mechanics not visible in annotations: the call returns immediately with status 'pending', then a background job publishes to Google and transitions the status to 'published' or 'failed'. This is exactly the kind of eventual-consistency context an agent needs before retrying or polling, and annotations alone (destructive/openWorld/idempotent) would not convey it.

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

Conciseness5/5

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

Three short sentences, all earning their place: purpose, the constraint, and the response lifecycle. The constraint is front-loaded before the async detail.

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

Completeness5/5

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

With no output schema, the description supplies the missing return-value semantics (pending → published/failed) and the required-input constraint. Nothing an agent needs to invoke and interpret the call correctly is absent.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters are already documented, including parent_id's hashid/external_id forms. The description only reinforces that parent_id is required, adding no syntax or format detail beyond the schema — the expected baseline when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Reply to an existing profile comment'), scopes it to Google Business reviews, and immediately rules out the sibling behavior of creating top-level comments. An agent can distinguish this from comments_create 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.

Usage Guidelines4/5

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

Explicitly states the when-not condition ('Top-level comments are NOT allowed — you can only reply to a review that already exists') and that parent_id is required. It does not name the alternative sibling tool (e.g. comments_create) for the top-level case, leaving that inference to the agent.

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

profile_comments_deleteA
DestructiveIdempotent
Inspect

Delete your reply to a profile comment. Only your own reply is removed — the underlying review is NOT deleted (Google does not allow businesses to delete reviews). Returns {accepted: true} while the delete is dispatched asynchronously.

ParametersJSON Schema
NameRequiredDescriptionDefault
comment_idYesPostproxy hashid OR external_id of YOUR reply to remove.
profile_idYesProfile hashid

TDQS

A4.5/5.0
Behavior4/5

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

The description adds value beyond annotations (which include destructiveHint: true) by explaining the asynchronous nature of the deletion, the return value {accepted: true}, and the constraint that the underlying review cannot be deleted. 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.

Conciseness5/5

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

The description is extremely concise with two sentences. The first sentence states the primary action, and the second adds important constraints and behavior. No unnecessary words.

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

Completeness4/5

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

Given the tool's simplicity (2 parameters, no output schema), the description covers the core behavior, async dispatch, and return value. However, it could mention error scenarios or prerequisites, but overall it is sufficient for an AI agent.

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

Parameters5/5

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

The description enhances the schema by clarifying that comment_id must be 'Postproxy hashid OR external_id of YOUR reply to remove', emphasizing that it must be the user's own reply. This adds critical meaning beyond the schema's basic description.

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

Purpose5/5

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

The description clearly states the action 'Delete your reply to a profile comment', specifying the verb and resource. It distinguishes this tool by noting that it only removes the reply, not the underlying review, differentiating it from sibling tools like comments_delete.

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

Usage Guidelines4/5

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

The description provides clear context: it only deletes your own reply, not the underlying review (since Google does not allow businesses to delete reviews). It also mentions asynchronous dispatch. However, it does not explicitly guide when to use this versus other sibling tools like comments_delete or profile_comments_create.

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

profile_comments_getA
Read-only
Inspect

Get a single profile comment (review or your reply) by Postproxy hashid or the platform's external_id (e.g. 'accounts/.../locations/.../reviews/...').

ParametersJSON Schema
NameRequiredDescriptionDefault
comment_idYesPostproxy hashid OR the platform's external_id (the full resource path is accepted).
profile_idYesProfile hashid

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's job is lighter. It adds the detail about accepting external_id or hashid, but does not disclose error behavior, auth requirements, or other traits. Adequate but not enriched.

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

Conciseness5/5

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

A single, efficient sentence that conveys the action, object, and identifier options without redundancy. No filler or wasted words.

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

Completeness4/5

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

For a simple read tool with two required parameters and no output schema, the description covers the essential: what it retrieves and how to identify the comment. It could optionally mention return format, but the annotations (readOnlyHint) imply it returns data. Slightly above adequate.

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

Parameters3/5

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

Schema description coverage is 100% (both parameters documented). The description repeats the schema's note about comment_id being a hashid or external_id, adding no new meaning. Baseline 3 applies as schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states 'Get a single profile comment', specifying it can be a review or reply. It distinguishes from siblings like 'comments_get' by scoping to profile comments. The mention of identifier types further clarifies the tool's purpose.

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

Usage Guidelines3/5

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

The description implies when to use (when you need a single profile comment by its hashid or external_id), but lacks explicit guidance on when not to use or alternatives. No comparison to sibling tools like 'profile_comments_list' or 'comments_get' is provided.

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

profile_comments_listA
Read-only
Inspect

List profile-scoped comments. Currently surfaces Google Business reviews (reviews live on a location, not a post, so they cannot be reached via comments_list). Each item may include nested replies. Reviews sync from Google twice daily (06:00 and 18:00 UTC).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (zero-indexed). Default 0.
per_pageNoItems per page. Default 20.
profile_idYesProfile hashid (must be a google_business profile today).
placement_idNoOptional. Filter to reviews on a single location — pass the 'accounts/X/locations/Y' path from profiles_placements.

TDQS

A4.4/5.0
Behavior4/5

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 nature is clear. The description adds value by noting that items may include nested replies and that reviews sync from Google twice daily, providing useful 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.

Conciseness5/5

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

The description is extremely concise—two sentences with no repetition or fluff. The first sentence states the core purpose, and the second adds important behavioral context. Every word earns its place.

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

Completeness4/5

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

Given the tool's simplicity and the presence of annotations and full schema descriptions, the description is fairly complete. It mentions nested replies and sync schedule, which are important. However, it could have mentioned default ordering or pagination behavior beyond the schema, but overall it is sufficient.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description does not add new information about the parameters beyond what is in the schema descriptions. It provides context about the profile_id needing to be a google_business profile, but that is already in the schema description. Thus, baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists profile-scoped comments, specifically Google Business reviews. It distinguishes from the sibling tool comments_list by explaining that reviews live on a location and cannot be reached via comments_list, 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.

Usage Guidelines5/5

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

The description explicitly says when to use this tool (for Google Business reviews) and when not to (cannot be reached via comments_list). It also provides context about the sync schedule (twice daily at 06:00 and 18:00 UTC), which helps set expectations about data freshness.

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

profile_groups_initialize_connectionAInspect

Generate a URL to connect a new social media profile to a profile group (initiates the OAuth/connect flow). For bluesky, pass identifier + app_password. For telegram, pass bot_token. For whatsapp, optionally pass onboarding ('api' or 'business_app'); when omitted the connect page asks the user where their number lives. The returned URL should be opened by the user to complete the connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesPlatform to connect (e.g. 'instagram', 'linkedin', 'bluesky', 'telegram')
bot_tokenNoTelegram bot token from @BotFather. Required for telegram.
identifierNoBluesky handle (e.g. yourname.bsky.social). Required for bluesky.
onboardingNoWhatsApp only. 'business_app' keeps the number in the WhatsApp Business app on a phone (coexistence: QR scan, up to 6 months of chats imported, no group chats through the API); 'api' moves it to the Cloud API only (Twilio/360dialog/own Meta setup or a fresh number; not usable in the app afterwards). Omit to let the user choose on the connect page.
app_passwordNoBluesky app password (bsky.app/settings/app-passwords). Required for bluesky.
profile_group_idYesProfile group ID (hashid) to connect a profile to

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the safety profile is covered structurally. The description adds genuine context beyond that: this only initiates a flow, the actual connection completes out-of-band when the user opens the URL, and the whatsapp onboarding omission changes behavior on the connect page.

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

Conciseness4/5

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

Four sentences, front-loaded with the purpose and the returned-URL action, and each platform note earns its place. Slightly dense but no filler.

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

Completeness4/5

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

For a 6-param initiation tool with no output schema and full annotation coverage, the description covers the flow's side effects, per-platform inputs, and how to consume the result. It could say a bit more about failure/expiry of the generated URL, but nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the per-parameter descriptions already state 'Required for telegram/bluesky' and detail the whatsapp enum, so the description largely restates the schema. It does add the omission-behavior nuance for whatsapp onboarding, but the baseline 3 applies when the schema carries the detail.

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

Purpose5/5

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

The description states a specific verb and resource ('Generate a URL to connect a new social media profile to a profile group') and immediately clarifies it initiates the OAuth/connect flow, so an agent can distinguish it from siblings like auth_status or profile_groups_list 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.

Usage Guidelines4/5

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

It gives clear conditional guidance per platform (bluesky → identifier+app_password, telegram → bot_token, whatsapp → optional onboarding) and explains what to do with the result ('should be opened by the user to complete the connection'). It does not name an alternative tool or state exclusions, which keeps it 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.

profile_groups_listA
Read-onlyIdempotent
Inspect

List all profile groups accessible with your API key. Profile groups are organizational containers (e.g. per brand or client) that hold related social media profiles. Use the returned group id to filter profiles_list by profile_group_id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already state readOnlyHint, idempotentHint, and destructiveHint=false. Description adds minimal behavioral context (scope: 'all groups accessible with your API key') but doesn't mention pagination, rate limits, or other traits.

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

Conciseness5/5

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

Two sentences, front-loaded first sentence states action, no wasted words. Every sentence adds value.

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

Completeness5/5

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

For a simple list tool with no parameters and no output schema, the description is fully complete: it explains what the tool does, what profile groups are, and how to use the result.

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

Parameters4/5

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

Zero parameters, so baseline is 4. Description adds meaning by explaining the purpose of the output, but no parameter details needed.

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

Purpose5/5

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

Description clearly states 'List all profile groups accessible with your API key' – a specific verb and resource. It distinguishes from siblings by explaining that the returned group IDs can be used to filter profiles_list, a sibling tool.

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

Usage Guidelines4/5

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

Description provides clear context: explains profile groups are containers and instructs to use the returned id to filter profiles_list. This implies when to use this tool, though it lacks explicit exclusions or alternatives.

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

profiles_listA
Read-only
Inspect

List all available social media profiles for posting. Optionally filter by profile_group_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_group_idNoOptional profile group ID (hashid). If provided, only profiles in this group are returned.

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false, so the tool is known to be safe. The description adds that it lists profiles 'for posting', which gives some behavioral context but doesn't disclose additional traits like pagination or response format. With annotations covering the key behavior, a score of 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.

Conciseness5/5

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

The description is extremely concise: two short sentences with no filler. It is front-loaded with the essential information. Every word serves a purpose.

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

Completeness4/5

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

Given the simplicity of the tool (one optional parameter, no output schema), the description covers the purpose and the sole filter adequately. It might lack details about the return format or default behavior when filter is omitted, but for a list tool with good annotations, it is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, meaning the schema itself documents the single parameter well. The description mentions the optional filter but does not add meaning beyond what the schema provides. Baseline score of 3 is correct.

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

Purpose5/5

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

The description clearly states the action (list), resource (social media profiles), and purpose (for posting). It also mentions optional filtering by profile_group_id. This distinguishes it from sibling tools like profile_groups_list and others that deal with different resources.

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

Usage Guidelines4/5

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

It describes when to use the tool (to list profiles for posting) and the optional filter. However, it does not explicitly state when not to use it or provide alternatives, though the context is clear enough for most use cases.

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

profiles_placementsA
Read-only
Inspect

List available placements for a profile. For Facebook: business pages. For LinkedIn: personal profile and organizations. For Pinterest: boards. For Telegram: channels the bot can post to. For Google Business: locations (returned as full resource paths 'accounts/X/locations/Y' to pass as location_id). For WhatsApp: the phone numbers on the Business Account — the placement id is the phone_number_id every whatsapp_* tool and dm_chat_create take, and metadata carries display_phone_number, quality_rating, messaging_limit_tier, name_status, platform_type. Available for facebook, linkedin, pinterest, telegram, google_business and whatsapp profiles.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds substantive behavioral detail beyond the annotations: platform-specific return semantics, the Google Business resource-path format, and the WhatsApp metadata fields (display_phone_number, quality_rating, messaging_limit_tier, etc.). It does not describe pagination or general return shape, keeping it short of a 5.

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

Conciseness4/5

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

The core purpose is front-loaded in the first clause before the platform enumeration. The platform list is dense but each entry earns its place by defining a distinct meaning; the run-on single-paragraph form is slightly hard to scan but there is no filler.

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

Completeness4/5

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

There is no output schema, so the description carries return-value burden, and it does so for the tricky cases (Google Business resource paths, WhatsApp metadata) plus states which platforms are supported. It omits a general description of the response shape and pagination, so it is strong but not exhaustive for a list tool.

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

Parameters3/5

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

With a single parameter and 100% schema description coverage ('Profile hashid'), the schema already fully documents the input and the description adds no further meaning for profile_id. The description's extra detail is about outputs/ids used downstream, not about this parameter, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('List') and resource ('available placements for a profile') and then disambiguates the abstract term 'placement' per platform, so an agent cannot confuse it with siblings like profiles_list or profile_groups_list. The per-platform enumeration removes all ambiguity about what a 'placement' is.

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

Usage Guidelines4/5

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

Gives strong downstream context (e.g. Google Business 'locations' come back as resource paths to pass as location_id; WhatsApp placement id is the phone_number_id consumed by whatsapp_* and dm_chat_create), which effectively tells the agent when the output is needed. However, there is no explicit exclusion or 'call this before/after X' instruction, so it stops short of full when-to-use routing.

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

profiles_statsA
Read-only
Inspect

Get the follower/engagement timeseries for a profile. Returns daily snapshots (captured every ~23h). placement_id is required for facebook, linkedin, telegram, and google_business profiles (get it from profiles_placements); omit for other networks. Fields in records[].stats are platform-native and not normalized. For google_business the series is per location: impressions, website clicks, call clicks, direction requests and conversations — there is no follower count.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoOptional ISO 8601 timestamp — only include snapshots recorded at or before this time
fromNoOptional ISO 8601 timestamp — only include snapshots recorded at or after this time
profile_idYesProfile hashid
placement_idNoRequired for facebook, linkedin, telegram, and google_business profiles. Get it from profiles_placements. Omit for instagram/threads/youtube/twitter/tiktok/pinterest/bluesky.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/non-destructive, and the description adds substantive behavior: daily snapshots captured every ~23h, platform-native un-normalized stats, and the special google_business per-location series with no follower count. That is real context an agent cannot get from the 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.

Conciseness4/5

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

Four dense sentences, purpose front-loaded, then conditional requirements and return-shape caveats. Every sentence carries information, though the placement_id rule restates the schema nearly verbatim.

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

Completeness4/5

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

With no output schema, the description usefully sketches the return (daily snapshots, records[].stats being platform-native, the google_business metric list). It omits pagination, result limits, and retention window, which an agent might need for large date ranges.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters, and the placement_id conditional is duplicated there. The description adds no syntax or format detail for from/to beyond the ISO 8601 note already present in the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Get the follower/engagement timeseries for a profile'), which implicitly separates it from post_stats and summary_get. It stops short of naming those siblings explicitly, so an agent must infer the boundary rather than being told.

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

Usage Guidelines4/5

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

Gives conditional usage guidance for placement_id: required for facebook, linkedin, telegram and google_business, omitted for the rest, and points to profiles_placements as the source. It offers no guidance on when to choose this tool over post_stats or summary_get.

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

queues_createAInspect

Create a new posting queue with weekly timeslots. Use profiles.list to find the profile_group_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesQueue name
jitterNoRandom offset in minutes (0-60) applied to scheduled times for natural posting patterns. Default: 0
timezoneNoIANA timezone name (e.g. 'America/New_York'). Default: UTC
timeslotsNoInitial weekly timeslots
descriptionNoOptional description
profile_group_idYesProfile group ID to connect the queue to

TDQS

A3.8/5.0
Behavior3/5

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

The description adds context about weekly timeslots and a dependency, but does not disclose other behavioral traits such as return values or error conditions. Annotations are present but do not contradict the description.

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

Conciseness5/5

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

Two sentences with no fluff: first states purpose, second gives a helpful hint. Front-loaded and concise.

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

Completeness4/5

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

The description is reasonably complete for a creation tool with well-documented schema, though it does not explain default behavior for omitted optional fields or return values. No output schema exists, so that is acceptable.

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

Parameters3/5

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

Schema description coverage is 100%, so the description adds no additional meaning beyond what the schema already provides for each parameter.

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

Purpose5/5

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

The description clearly states the verb 'Create' and resource 'posting queue with weekly timeslots', and the name 'queues_create' distinguishes it from sibling tools like queues_delete, queues_get, etc.

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

Usage Guidelines3/5

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

The description provides a prerequisite hint ('Use profiles.list to find the profile_group_id') but does not explicitly state when to use this tool versus alternatives like queues_update. Usage is implied but not fully guided.

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

queues_deleteA
DestructiveIdempotent
Inspect

Delete a posting queue. Posts in the queue will have their queue reference removed but will not be deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesQueue ID to delete

TDQS

A4/5.0
Behavior4/5

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

Beyond annotations (destructiveHint=true, idempotentHint=true), the description adds critical context: posts are not deleted, only their queue reference is removed. This prevents misunderstanding about cascading effects.

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

Conciseness5/5

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

Extremely concise: one sentence with 16 words. Front-loaded with the main action, no wasted or redundant information.

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

Completeness4/5

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

Given low complexity (one required parameter), complete annotations, and no output schema, the description adequately covers the tool's behavior. The note about posts is a valuable addition.

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

Parameters3/5

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

Schema coverage is 100% with a clear description for queue_id. The tool description offers no additional meaning beyond what the schema already provides, meeting the baseline of 3.

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

Purpose5/5

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

Clearly states the verb 'Delete' and the resource 'posting queue'. Distinguishes from sibling queue tools by specifying that posts are not deleted, which uniquely identifies its purpose.

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

Usage Guidelines3/5

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

Does not explicitly provide when or when not to use this tool, nor mentions alternatives. The purpose is implicit but lacks explicit guidance for selecting this over other queue operations.

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

queues_getA
Read-only
Inspect

Get details of a single posting queue including its timeslots and post count

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesQueue ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description confirms the read-only nature ('Get details') and adds that it includes timeslots and post count, but does not disclose any additional behavioral traits beyond what annotations provide.

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

Conciseness5/5

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

The description is a single sentence of 12 words, front-loaded with the action and resource, containing no redundant or extraneous information.

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

Completeness4/5

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

Given the tool's simplicity (one required parameter, no output schema), the description adequately covers the purpose and return content (timeslots and post count). It lacks mention of error handling or response format, but these are not critical for a basic read tool with annotations.

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

Parameters3/5

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

With 100% schema description coverage (queue_id has description 'Queue ID'), the description does not add semantic value beyond the schema. It reiterates the input's role ('single posting queue') but provides no format or constraints.

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

Purpose5/5

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

The description clearly states 'Get details of a single posting queue' with a specific verb and resource. It distinguishes from siblings like 'queues_list' (lists all queues) and 'queues_next_slot' by focusing on a single queue's details.

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

Usage Guidelines3/5

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

The description implies usage when one needs details of a specific queue, but does not provide explicit guidance on when to use this tool versus alternatives like 'queues_list' for all queues or 'queues_next_slot' for next slot. No exclusions or alternative mentions.

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

queues_listA
Read-only
Inspect

List all posting queues. Queues automatically schedule posts into recurring weekly timeslots with priority-based ordering.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_group_idNoOptional profile group ID to filter queues

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false. Description adds behavioral context about queues automatically scheduling posts with priority-based ordering, which goes beyond annotations and helps the agent understand the nature of queues. No contradictions with annotations.

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

Conciseness5/5

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

Two concise sentences with no filler. Every sentence adds value: first sentence states purpose, second sentence provides useful context about queues. Front-loaded with the essential information.

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

Completeness3/5

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

The description provides adequate context about what queues do, but does not describe the return format or any pagination behavior. Since there is no output schema, the agent lacks information about what fields the response will contain. While the tool is simple, some guidance on response structure would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter, which has a clear description in the schema. The tool description does not add any additional meaning beyond what the schema already provides for the parameter. Hence baseline score of 3.

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

Purpose5/5

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

Description clearly states 'List all posting queues' with specific verb and resource. Distinguishes from sibling tools like queues_create, queues_delete, queues_get, queues_update, and queues_next_slot by indicating it lists all queues.

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

Usage Guidelines3/5

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

Description provides clear context that this tool lists all queues with an optional filter, but does not explicitly state when to use this tool versus alternatives (e.g., queues_get for a specific queue). No exclusion criteria or prerequisites mentioned.

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

queues_next_slotA
Read-only
Inspect

Get the next available timeslot for a queue

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_idYesQueue ID

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, which cover safety. The description adds no further behavioral context (e.g., whether it blocks, timeouts, or call format). With annotations present, a score of 3 is appropriate as the description minimally reinforces the read-only nature.

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

Conciseness5/5

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

The description is a single sentence that conveys the essential purpose without any extraneous words. It is perfectly concise.

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

Completeness3/5

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

With no output schema, the description could hint at the return format (e.g., timestamp or object). It is minimally adequate for a simple read operation but leaves ambiguity about the response structure.

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

Parameters3/5

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

The input schema fully describes the only parameter (queue_id with description 'Queue ID'). The description adds no additional meaning beyond what the schema provides, so the baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the verb 'get' and resource 'next available timeslot for a queue'. It distinguishes from sibling queue tools like queues_get (which gets queue details) and queues_list (which lists queues), 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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., queues_get, queues_list). It lacks context about prerequisites, such as needing an existing queue or what to do if no slot is available.

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

queues_updateA
Destructive
Inspect

Update a queue's settings, timeslots, or pause/unpause it. Changes to timezone or timeslots trigger rearrangement of all queued posts.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew queue name
jitterNoRandom offset in minutes (0-60)
enabledNoSet to false to pause the queue, true to unpause
queue_idYesQueue ID to update
timezoneNoIANA timezone name
timeslotsNoTimeslots to add or remove. To add: {day, time}. To remove: {id, _destroy: true}.
descriptionNoNew description

TDQS

A4.2/5.0
Behavior4/5

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

The description adds the key behavioral detail that changing timezone or timeslots triggers rearrangement of all queued posts, which goes beyond the 'destructiveHint' annotation. It also mentions pause/unpause functionality. No contradictions with annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main purpose, and every sentence provides essential information. No wasted words or irrelevant details.

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

Completeness4/5

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

Given the 7 parameters and no output schema, the description covers the main actions and a critical side effect. It could be slightly more complete by noting which updates are safe vs. destructive, but overall it is adequate.

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

Parameters4/5

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

Schema coverage is 100%, so the schema documents all parameters. The description adds value by explaining the effect of timezone/timeslot changes (rearrangement) and referencing pause/unpause, which complements the schema without duplicating it.

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

Purpose5/5

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

The description clearly states the tool updates a queue's settings, timeslots, or pause/unpause state, using specific verbs and identifying the resource. It distinguishes from sibling tools like queues_create, queues_delete, etc., by focusing on modification.

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

Usage Guidelines3/5

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

The description implies when to use the tool (for updates) but does not explicitly state when not to use it or provide alternatives. No usage exclusions or comparisons with other tools are given.

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

summary_getA
Read-onlyIdempotent
Inspect

Answer "what's the status?" in one call. Returns an activity snapshot for a time window: posts published and failed (plus what's scheduled next), engagement totals summed from each post's latest stats snapshot, comments and reviews received, and DM volume — each broken down per network. Also returns what's still waiting on you: comments and reviews with no reply from you, and DM chats whose newest message is inbound (with how many are about to run out of their 24h messaging window). Prefer this over calling history_list / comments_list / dm_chats_list separately. Two quirks worth knowing: engagement is lifetime-to-date for posts published in the window rather than engagement earned during it, and the awaiting_reply counts describe current state so they don't change with the window (they look back 30 days, returned as window.backlog_from). Post counts are posts — a post sent to three networks counts once — while by_platform counts per-network deliveries. engagement is null when insights are off for the account, dms when DMs are.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoOptional ISO 8601 timestamp (or bare date) ending an explicit range. Defaults to now when only from is given.
fromNoOptional ISO 8601 timestamp (or bare date) starting an explicit range. Overrides window, and the *_previous comparison counts come back null.
windowNoTime window to report on. Defaults to 24h.
profile_group_idNoOptional profile group ID (hashid) to report on a single group. Omit to cover every group the key can reach.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare a safe read-only, idempotent profile, and the description adds substantial behavior beyond that: engagement is lifetime-to-date rather than in-window, awaiting_reply counts are current state looking back 30 days (window.backlog_from), post counts are per-post while by_platform is per-delivery, and engagement/dms are null when insights or DMs are off.

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

Conciseness4/5

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

Front-loaded with the purpose and the sibling routing before the caveats, and every sentence carries information. It is a dense unbroken block rather than scannable structure, which slightly hurts readability for its length.

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

Completeness5/5

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

With no output schema, the description carries the full burden and does so: it enumerates every returned section, the per-network breakdown, the null conditions, and the counting semantics. An agent can interpret the response correctly without guessing.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents all four params; baseline is 3. The description adds meaning beyond the schema by tying window semantics to output interpretation (lifetime vs in-window engagement, window.backlog_from) and clarifying null behavior.

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

Purpose5/5

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

States a specific verb and resource ('Returns an activity snapshot for a time window') and enumerates the exact contents: posts published/failed, engagement totals, comments/reviews, DM volume, per network. It is clearly distinguishable from the granular siblings it names.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'Prefer this over calling history_list / comments_list / dm_chats_list separately,' which names the alternatives and the condition that selects this tool. The opening 'Answer "what's the status?" in one call' frames the use case.

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

upload_createAInspect

Create a temporary file upload URL for sandboxed environments. Returns a key, an upload_url, and expires_in (seconds). Flow: (1) call this tool, (2) POST the raw file bytes to the returned upload_url (valid for expires_in seconds), which responds with {"url": "https://..."}, (3) pass that returned url in the media array of post_publish (or post_update). The upload host is tmpfiles.postproxy.dev — that domain must be whitelisted/allowlisted in the sandbox's network egress rules for the upload to succeed. Only use this when running against the remote (hosted) MCP server: if you are running the local (stdio) MCP server, do NOT use this — instead pass local file paths directly in the media array, which uploads them via multipart.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses the return values (key, upload_url, expires_in) and details the upload flow, adding context beyond annotations. While annotations already indicate non-destructive and open-world behavior, the description adds the upload host and validity period. 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.

Conciseness4/5

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

The description is somewhat long (4 sentences) but each sentence serves a purpose: stating the main action, describing the return value and flow, and providing usage guidance. It is well-structured 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.

Completeness4/5

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

Given no parameters and no output schema, the description covers the essential aspects: purpose, flow, and conditional usage. It could mention error handling or idempotency, but it is adequate for the tool's simplicity.

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

Parameters5/5

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

The input schema has no parameters, so schema description coverage is effectively 100%. The description does not need to add parameter meaning, as there are none to document.

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

Purpose5/5

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

The description clearly states it creates a temporary file upload URL for sandboxed environments, with a specific verb and resource. It distinguishes itself from local server usage by explicitly stating when to use and when not to use, differentiating 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.

Usage Guidelines5/5

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 (remote MCP server) and when not to use (local stdio server), and offers an alternative (pass local file paths directly). It also mentions the need to whitelist the upload host, which is crucial for correct invocation.

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

whatsapp_blocked_users_listA
Read-onlyIdempotent
Inspect

List the phone numbers (wa_id) blocked on a WhatsApp phone number, paginated with limit / after (next_cursor in the response).

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoCursor from a previous response's next_cursor
limitNo
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral context by disclosing pagination via limit/after and that the response carries next_cursor, which tells the agent it must loop to see all blocked numbers.

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

Conciseness4/5

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

A single front-loaded sentence with the resource named first and pagination second; nothing is wasted. The nested parenthetical around wa_id and next_cursor slightly crowds the sentence but costs no clarity.

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

Completeness4/5

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

For a simple read-only list tool with no output schema, the description plus annotations supply everything needed: scope, safety profile, and the pagination contract including the cursor handoff. Only auth/permission requirements and empty-result behavior are unstated, which is a minor gap.

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

Parameters3/5

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

Schema description coverage is 75% and 'after' already documents the next_cursor linkage, so the description largely restates structured data. It does tie limit/after together as a pagination pair, but adds no format or range detail beyond the schema; baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (List) plus the exact resource (phone numbers / wa_id blocked on a WhatsApp phone number), which cleanly separates it from the write siblings whatsapp_users_block and whatsapp_users_unblock. An agent can identify this as the read/list operation without opening the schema.

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

Usage Guidelines2/5

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

The description never says when to reach for this tool instead of siblings like whatsapp_blocked_user_status (single-number status check) or whatsapp_users_block. Usage is only implied by the listing nature of the verb; no alternatives or preconditions are named.

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

whatsapp_blocked_user_statusB
Read-onlyIdempotent
Inspect

Check whether one phone number is currently blocked on a WhatsApp phone number.

ParametersJSON Schema
NameRequiredDescriptionDefault
userYesPhone number or wa_id to check
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile of this read query is fully covered. The description adds no further behavioral context such as required permissions, rate limits, or what a positive/negative result means. With annotations carrying the load, this is an acceptable 3.

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

Conciseness5/5

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

A single front-loaded sentence with no redundant clauses or filler. The scope qualifier ('one phone number') is placed immediately, so every word earns its place.

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

Completeness4/5

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

For a simple, fully-annotated, read-only boolean check with 100% schema coverage and no output schema, the description is nearly sufficient. The only minor gap is that it does not clarify the return shape, though a yes/no status query strongly implies the answer and no output schema is defined.

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

Parameters3/5

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

Schema description coverage is 100%; each of the three parameters (user, profile_id, phone_number_id) is documented in the schema itself. The description adds no syntax, format, or identifier guidance 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.

Purpose4/5

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

The description uses a specific verb ('Check') and resource ('whether one phone number is currently blocked'), so intent is unambiguous. It implies a single-number scope ('one phone number') that distinguishes it from whatsapp_blocked_users_list, but it never names that sibling explicitly, so differentiation is implicit rather than stated.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. The description does not mention the related whatsapp_blocked_users_list (for enumerating all blocked users) or whatsapp_users_block/unblock (for changing block state), so an agent gets no routing help among these closely related siblings.

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

whatsapp_business_profile_getA
Read-onlyIdempotent
Inspect

Read the public business profile shown in WhatsApp for a phone number: about, address, description, email, websites, vertical and profile_picture_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds that the data is the 'public' profile and which fields come back, which is useful given no output schema, but it says nothing about permissions or scoping requirements for profile_id/phone_number_id.

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

Conciseness5/5

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

A single front-loaded sentence with a colon-delimited field list; nothing is redundant and the resource is identified before the return payload.

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

Completeness4/5

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

With two required params and no output schema, the enumerated field list usefully substitutes for a return-value spec, and the annotations carry the safety profile. Only missing piece is any hint about where profile_id/phone_number_id originate (the schema partially covers this via 'profiles_placements').

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

Parameters3/5

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

Schema description coverage is 100% for both parameters, so the baseline is 3. The description only loosely echoes the phone-number dimension and adds no format, source, or lookup guidance beyond what the schema already documents for profile_id and phone_number_id.

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

Purpose5/5

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

States a specific verb (read) and resource (public WhatsApp business profile for a phone number), then enumerates the exact fields returned (about, address, description, email, websites, vertical, profile_picture_url). The read-only framing cleanly separates it from the sibling whatsapp_business_profile_update and whatsapp_business_profile_photo_update.

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

Usage Guidelines2/5

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

There is no explicit when-to-use statement, no exclusions, and no routing to alternatives such as whatsapp_business_profile_update or profiles_list. The scope 'for a phone number' hints at the context, but the agent must infer when this tool is the right pick.

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

whatsapp_business_profile_photo_updateA
Idempotent
Inspect

Replace the profile photo of a phone number. Pass either url (a public https image) or data (base64, with content_type). JPEG or PNG, at most 5MB.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPublic https URL of the image
dataNoBase64-encoded image (a data: URI prefix is accepted)
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
content_typeNoimage/jpeg or image/png when passing data
phone_number_idYesThe phone number id from profiles_placements

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the mutation/idempotency/safety profile (readOnly=false, idempotent=true, destructive=false), and the description correctly aligns with them. It adds genuinely useful non-annotation constraints: JPEG or PNG only, 5MB cap, and that content_type pairs with data. It omits any note about permissions or what happens to the prior photo.

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

Conciseness5/5

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

Two sentences, no filler, with the core action and the mutual-exclusion rule front-loaded ahead of the format/size limits.

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

Completeness4/5

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

For a mutation with no output schema, the description covers the input contract and validation limits well. It does not mention the two required identifiers (profile_id, phone_number_id) that scope the operation, which is the only notable gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds a cross-parameter constraint the flat schema does not express: url and data are mutually exclusive alternatives, and content_type is required only when using data. That is meaning beyond the field-level descriptions.

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

Purpose5/5

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

States a specific verb and resource ('Replace the profile photo of a phone number'), which is clearly distinct from the sibling whatsapp_business_profile_update that edits other profile fields. An agent can select this 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.

Usage Guidelines3/5

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

The description gives clear in-tool guidance on the exclusive url-vs-data choice, but never says when to use this tool rather than whatsapp_business_profile_update or when removal/replacement is appropriate. Usage is implied rather than framed against alternatives.

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

whatsapp_business_profile_updateA
Idempotent
Inspect

Update the public business profile of a phone number. Send only the fields to change; at least one is required. about max 139 chars, description max 512, websites at most 2 entries. The profile photo has its own tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
aboutNoShort status line, max 139 characters
emailNo
addressNo
verticalNoMeta business vertical, e.g. RETAIL, PROF_SERVICES, OTHER
websitesNoUp to 2 URLs
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
descriptionNoMax 512 characters
phone_number_idYesThe phone number id from profiles_placements

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare non-destructive, idempotent, open-world behavior, so the bar is lower. The description adds meaningful context beyond that: it is a partial patch requiring at least one field, and it disambiguates the photo update path. It still omits auth/permission requirements and what the mutation returns.

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

Conciseness5/5

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

Four short sentences, front-loaded with the verb and the partial-update rule, and each sentence carries distinct information (constraints, alternative tool). No filler.

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

Completeness4/5

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

No output schema exists, but for a patch-style mutation the description covers the essential calling semantics: partial update, at-least-one rule, field limits, and the sibling photo tool. Auth requirements and required identifiers are left implicit, slightly limiting completeness.

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

Parameters3/5

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

Schema coverage is 75%, so the schema already documents most parameters. The description's limits for about (139), description (512), and websites (max 2) largely restate what the schema descriptions already give, adding little beyond the structured fields.

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

Purpose5/5

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

Specific verb (update) plus resource (public business profile of a phone number) that an agent can distinguish from siblings. It also explicitly carves out the photo case by naming that the profile photo has its own tool, which differentiates it from whatsapp_business_profile_photo_update.

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

Usage Guidelines4/5

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

States the partial-update contract clearly (send only fields to change, at least one required) and routes the photo case to a sibling tool. It does not contrast against whatsapp_business_profile_get or state prerequisites, so it falls short of explicit when/when-not guidance.

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

whatsapp_conversion_event_sendAInspect

Report a conversion (LeadSubmitted, Purchase, AddToCart, InitiateCheckout, ViewContent) for a conversation that started from a Click-to-WhatsApp ad, so Meta can attribute it. Identify the conversation by chat_id or phone; it must carry a captured ctwa_clid (422 otherwise). event_id must be unique per event. email and external_id are SHA-256 hashed before sending. Pass test_code to route the event to Meta's test-events view.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoCustomer email, hashed before sending
phoneNoParticipant phone number; resolves to their most recent chat
valueNo
chat_idNoChat hashid. Alternative to phone.
currencyNoISO 4217, e.g. USD
event_idYesYour unique id for this event (dedupes retries)
test_codeNoMeta test_event_code
dataset_idNoOverride the dataset (e.g. one owned by another business)
event_nameYes
event_timeNoISO 8601 timestamp or unix seconds, defaults to now
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
content_idsNo
external_idNoYour customer id, hashed before sending

TDQS

A4.3/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the 422 failure condition, the event_id uniqueness/dedup requirement, the SHA-256 pre-hashing of email and external_id, and the test_code routing behavior. The dedup note sits in mild tension with idempotentHint=false, but it applies only when a stable event_id is supplied, so it is not a genuine contradiction.

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

Conciseness4/5

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

A single front-loaded paragraph where each clause carries new information (event set, identifying key, error condition, hashing, test routing). Dense but no filler, though the packed style makes it slightly harder to scan than a bulleted form.

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

Completeness4/5

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

For a 13-parameter, no-output-schema tool, the description covers the essential mechanics an agent must know: identity resolution, the ctwa_clid prerequisite, dedup semantics, hashing, and test routing. Remaining gaps (currency/value expectations, content_ids usage) are largely covered by schema descriptions.

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

Parameters4/5

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

Adds meaning past the schema: chat_id and phone are framed as interchangeable identifiers, event_id as a dedup key, email/external_id as pre-hash inputs, and test_code as a routing switch. value, currency, content_ids, and dataset_id are left to the schema, but coverage there is already ~77%.

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

Purpose5/5

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

States a specific verb (Report) and resource (conversion event), enumerates the allowed event names, and scopes it to conversations originating from a Click-to-WhatsApp ad. No sibling tool sends conversion events, and an agent can distinguish it immediately from the wa_* messaging and template tools.

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

Usage Guidelines4/5

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

Gives a clear precondition (the conversation must carry a captured ctwa_clid, 422 otherwise) and explains when to use test_code. It does not name an alternative tool, but no competing sibling exists, so the missing 'vs. X' element is minor.

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

whatsapp_dataset_createA
Idempotent
Inspect

Create a Conversions API dataset on the WhatsApp Business Account so Click-to-WhatsApp ad conversions can be reported. Idempotent: returns the existing dataset with created: false.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), but the description adds real value beyond them by spelling out what idempotency means concretely: it 'returns the existing dataset with created: false.' That return-shape disclosure is useful given there is no output schema.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and target, followed by the idempotency behavior. No filler and every sentence carries information.

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

Completeness4/5

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

For a one-parameter create tool with no output schema, the description covers the action, the target resource, the business reason, and the idempotent return behavior. Only the relationship to the sibling get tool is left implicit.

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

Parameters3/5

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

With a single parameter and 100% schema description coverage, the schema already documents profile_id fully. The description only loosely restates that the target is the WhatsApp Business Account and adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Create a Conversions API dataset on the WhatsApp Business Account') and grounds it in a business purpose (Click-to-WhatsApp ad conversion reporting). It clearly contrasts with the sibling whatsapp_dataset_get, though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the purpose statement (needed so conversions can be reported), but there is no explicit when-to-use/when-not guidance and no mention of the read alternative whatsapp_dataset_get. An agent can infer the intent but is given no routing rule.

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

whatsapp_dataset_getA
Read-onlyIdempotent
Inspect

Read the Conversions API dataset id attached to the WhatsApp Business Account (null when none). Needed for whatsapp_conversion_event_send.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, so safety is covered. The description adds a genuinely useful behavioral fact beyond the annotations: the call returns null when no dataset is attached to the account. It does not cover error modes for an invalid profile_id, which is minor for a read-only getter.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the resource being read, followed by the workflow dependency. Every clause earns its place; no filler or restatement of the name.

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

Completeness5/5

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 helpfully discloses the return value (the dataset id) and its null case. Combined with read-only annotations and a fully documented single parameter, 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.

Parameters3/5

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

Schema description coverage is 100% and there is only one parameter, so the schema already documents profile_id as the profile hashid of a WhatsApp profile. The description's mention of the WhatsApp Business Account restates that relationship rather than adding syntax, format, or sourcing guidance; baseline 3 is appropriate.

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

Purpose4/5

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

The description gives a specific verb (Read) and a precise resource (the Conversions API dataset id attached to the WhatsApp Business Account), which an agent can distinguish from the sibling whatsapp_dataset_create. It stops short of explicitly naming that sibling as the alternative, so differentiation is implied rather than stated.

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

Usage Guidelines4/5

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

It states the purpose in a downstream workflow: the value is 'Needed for whatsapp_conversion_event_send', which tells the agent when to reach for this tool (before sending a conversion event). There are no exclusions or negative triggers, but the dependency context is a clear, actionable usage signal.

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

whatsapp_display_name_getA
Read-onlyIdempotent
Inspect

Read the verified display name of a phone number and its review status (name_status), plus any pending new_name_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine value by disclosing the response content, including the pending new_name_status field, which tells the agent the name may be mid-review. It does not cover auth or error behavior, but does more than restate the annotations.

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

Conciseness5/5

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

A single sentence with the resource front-loaded, no filler, and the two returned status fields packed in without redundancy. Every clause earns its place.

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

Completeness4/5

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

With no output schema, the description carries the burden of explaining returns and largely does (display name, review status, pending status). It could go further by defining possible name_status values, but for a two-parameter read tool with full schema coverage and rich annotations it is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (profile_id, phone_number_id) are documented in the schema itself. The description adds no syntax, format, or sourcing detail beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') plus the exact resource ('verified display name of a phone number') and enumerates the returned fields (name_status, pending new_name_status). It is clearly distinguishable from the sibling whatsapp_display_name_request_change, though it does not name any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: read the current verified name and its review state. There is no explicit when-to-use statement and no routing to the near-identical sibling whatsapp_display_name_request_change or to whatsapp_number_info, leaving the agent to infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_display_name_request_changeAInspect

Submit a new display name for Meta review. The current name stays until Meta approves; the outcome arrives on the placement.name_status_updated webhook.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
display_nameYesThe requested display name
phone_number_idYesThe phone number id from profiles_placements

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare openWorldHint/idempotentHint=false, and the description goes further by disclosing that the current name remains in effect until Meta approves and that the result arrives asynchronously via the placement.name_status_updated webhook. That async, externally-gated behavior is exactly the kind of context annotations cannot convey; only the lack of failure/rejection handling keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the action first, then the consequence. Every clause earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by explaining how the outcome is delivered (webhook event name), which is the key thing an agent needs to know for an asynchronous approval flow. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters are documented in the schema, including the pointer to profiles_placements. The description adds no parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Submit a new display name') with clear scope — Meta review — that separates it from whatsapp_display_name_get (which reads the current name) and whatsapp_business_profile_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose and the review workflow, but the description never states when to prefer this over siblings such as whatsapp_display_name_get for checking status, nor any prerequisite (e.g. needing profile_id/phone_number_id from profiles_placements). Adequate but no explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_createAInspect

Create a WhatsApp group administered by the phone number. Returns the group id and invite_link. Add members with whatsapp_group_participants_add or share the invite link.

ParametersJSON Schema
NameRequiredDescriptionDefault
subjectYesGroup name, max 128 characters
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
descriptionNoMax 2048 characters
phone_number_idYesThe phone number id from profiles_placements
join_approval_modeNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-destructive, non-idempotent, open-world behavior. The description adds value beyond them by disclosing the return payload (group id and invite_link), which is important with no output schema. It still omits permission requirements and the duplicate-group consequence of non-idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler: action first, then return values, then the follow-up path. Every sentence earns its place and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create mutation with no output schema, the description covers the return values and the next step for adding members, and the schema covers the required inputs. Missing only permissions/error behavior details, which keeps it short of a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so subject, description, profile_id, and phone_number_id are already documented in the schema. The description adds no syntax or constraint detail beyond what is structured, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a WhatsApp group') plus the administrative scope ('administered by the phone number'), which lets an agent distinguish it from whatsapp_group_update and whatsapp_groups_list. It does not explicitly name a sibling as the non-alternative, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It routes the agent for the post-creation step ('Add members with whatsapp_group_participants_add or share the invite link'), which is useful workflow guidance, but it never states when to prefer this tool over whatsapp_group_update or what input conditions select it. Usage is implied by the verb rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_deleteB
DestructiveIdempotent
Inspect

Delete a WhatsApp group the phone number administers.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is known from structured data. The description adds nothing beyond that: it does not say what is destroyed (group, message history, member associations), whether the deletion is permanent for all participants, or what authorization the administering number needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the action and scope front-loaded and no filler. It is efficient, though the extreme brevity is partly why other dimensions are thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, irreversible-feeling group operation with no output schema and one undocumented parameter, the description is minimally adequate. Annotations carry the destructive flag, but the agent is not told the blast radius of the deletion or the required admin role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 67% (group_id has no description), so the description would need to compensate. It says nothing about any of the three parameters, and the admin wording only loosely gestures at phone_number_id/profile_id without adding format or sourcing detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a WhatsApp group') and adds a meaningful scope qualifier ('the phone number administers'), which separates it from sibling mutations like whatsapp_group_update or whatsapp_group_participants_remove. It does not, however, explicitly name any sibling tool, so differentiation still requires the agent to compare names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'the phone number administers' implies a precondition (the profile/number must be a group admin), which is a useful usage constraint. Beyond that there is no when-to-use guidance, no exclusions, and no mention of alternatives such as removing participants or leaving the group.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_getA
Read-onlyIdempotent
Inspect

Read a WhatsApp group: subject, description, join_approval_mode, invite_link, participants, participant_count, created_at, is_suspended.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds the returned-field list (useful given no output schema) but says nothing about auth requirements for profile_id/phone_number_id or whether the participant list is truncated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The dense field enumeration is justified because there is no output schema, though the bare list reads as a data dump rather than prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with annotations covering safety and no output schema, the field list meaningfully tells the agent what it receives. Remaining gaps (group_id format, auth context, participant list limits) are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: profile_id and phone_number_id are documented in the schema, but group_id has no description anywhere. The phrase 'Read a WhatsApp group' only weakly implies group_id is the group identifier, adding no real detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('a WhatsApp group') and enumerates the fields returned (subject, participants, created_at, is_suspended), which clearly separates it from whatsapp_groups_list and whatsapp_group_update. It never names a sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: fetch one group's details given group_id. There is no statement of when to prefer this over whatsapp_groups_list, nor any prerequisite or exclusion, leaving routing to the agent's inference from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_join_requests_approveB
Idempotent
Inspect

Approve pending join requests for the given phone numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_numbersYes
phone_number_idYesThe phone number id from profiles_placements

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds the state constraint that only 'pending' requests qualify and that the action is bulk (multiple phone numbers), but says nothing about what approval actually does, notification side effects, or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, which is appropriate for a simple action tool. It is efficient rather than padded, though it is terse enough that some needed context is simply absent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a mutation that changes group membership, with no output schema and half the parameters undocumented. An agent still lacks what happens on success, whether the requester is notified, and whether approval is scoped per-group or global.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: phone_number_id and profile_id are documented in the schema, while group_id and phone_numbers are not. The description implicitly confirms phone_numbers is a list of targets, but says nothing about group_id or how it relates to the request scope, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (approve) and resource (pending join requests) plus the target scope (given phone numbers). It is distinguishable from whatsapp_group_join_requests_reject and _list by the verb, though the description never explicitly names those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites (e.g. that a request must already be pending), and no routing to the reject/list siblings. The 'pending' qualifier is the only implicit usage cue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_join_requests_listA
Read-onlyIdempotent
Inspect

List pending join requests on a WhatsApp group with join_approval_mode approval_required.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the approval-mode precondition; it says nothing about return shape, ordering, or pagination, so it adds modest value beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero filler; the resource and the scoping condition are front-loaded so the agent can decide immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-required-parameter read tool with no output schema, the description covers purpose and applicability but leaves the return payload (what a join request record contains, pagination) unspecified, which is the one thing the absent output schema would otherwise carry.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% (profile_id and phone_number_id are documented, group_id is not), and the description adds no parameter-level meaning beyond implying a WhatsApp group. With middling coverage the description should compensate for the undocumented group_id format but does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List'), a precise resource ('pending join requests on a WhatsApp group'), and a scoping precondition ('join_approval_mode approval_required'). This clearly separates it from the sibling approve/reject and group participant tools without needing to open a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'approval_required' condition tells the agent the context in which this tool is applicable (only groups using join-approval mode will have pending requests). However, it never names alternatives (e.g. whatsapp_group_join_requests_approve/reject) or states exclusions, so it stops short of explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_join_requests_rejectC
Idempotent
Inspect

Reject pending join requests for the given phone numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_numbersYes
phone_number_idYesThe phone number id from profiles_placements

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description's burden is lighter. It adds one useful behavioral qualifier — that only *pending* requests are affected — but says nothing about permissions required, what happens to the rejected user, or whether rejection is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is appropriately sized, though it is arguably under-specified rather than efficient given the tool's mutation semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a state-changing operation with no output schema and only 50% parameter coverage; an agent cannot tell what a successful rejection returns, what happens on failure, or how to identify group_id beyond its raw name. For a mutation tool the description is too thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only half the parameters carry schema descriptions (profile_id, phone_number_id), leaving group_id and phone_numbers undocumented in the schema. The description gestures at phone_numbers ('for the given phone numbers') but gives no format or semantics, and never mentions group_id, so it does not compensate for the 50% coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('Reject pending join requests') that clearly separates it from the join_requests_approve and join_requests_list siblings. The scope ('for the given phone numbers') further narrows what is affected. It does not explicitly name the sibling alternatives, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus whatsapp_group_join_requests_approve or _list, and no prerequisites or context are stated. Usage is only inferable from the verb in the name, which is not the description doing the work.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_participants_addA
Idempotent
Inspect

Add up to 8 phone numbers to a WhatsApp group (a group holds 8 participants).

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_numbersYesInternational-format phone numbers, at most 8
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, non-destructive and open-world behavior, so the safety profile is covered structurally. The description adds one genuinely useful constraint (the 8-participant capacity), but says nothing about what happens when the group is already full, whether existing participants are preserved, or what errors/auth failures look like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the action, target and limit in order, and no filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with no output schema, the description is adequate but thin: it omits permission requirements, capacity-exceeded behavior, and whether additions are atomic. Annotations carry the safety profile, so these gaps are real but not fatal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75% and the schema already documents phone_number_id and profile_id; the description only restates the 'at most 8' constraint that the schema's phone_numbers field also carries. It adds no format or source detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Add) and resource (phone numbers to a WhatsApp group) and quantifies scope with the 8-participant cap. It is immediately distinguishable from the sibling whatsapp_group_participants_remove 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus alternatives (e.g. invite-link creation or join-request approval), and no stated prerequisites such as needing group admin rights or an existing group. The agent must infer all of this from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_participants_removeC
Idempotent
Inspect

Remove phone numbers from a WhatsApp group.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_numbersYes
phone_number_idYesThe phone number id from profiles_placements

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that — it doesn't say what happens to a non-member, whether partial failures roll back, or how the idempotent behavior manifests.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with no filler, and the action is front-loaded. It is arguably too terse for a four-required-parameter mutation, so it is efficient rather than optimally sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive-capable group mutation with no output schema and half its parameters undocumented, the description omits error behavior, permission requirements, and the fate of the removed numbers. Annotations cover only the safety hints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: profile_id and phone_number_id are documented, but group_id and phone_numbers are bare. The description loosely implies a group identifier and a list of numbers but supplies no format, hashid, or E.164 syntax guidance to compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (remove) and resource (phone numbers from a WhatsApp group), which cleanly contrasts with the sibling whatsapp_group_participants_add. It does not, however, explicitly name alternatives or scope limits beyond the operation itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus whatsapp_group_participants_add or whatsapp_users_block, no prerequisites, and no note on required permissions or group-admin status. Usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_groups_listA
Read-onlyIdempotent
Inspect

List the WhatsApp groups a phone number administers (Groups API — Cloud API numbers only; coexistence numbers can't use it). Paginated with limit / after.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoCursor from a previous response's next_cursor
limitNo
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, non-openWorld behavior, so the safety profile is covered. The description adds value beyond that with the pagination model and the Cloud-API-only applicability constraint, though it says nothing about response shape or cursor semantics beyond the param.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loading the core action and scope, then the applicability constraint and pagination. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool whose annotations already carry the safety profile, the description covers scope, an applicability constraint, and pagination. With no output schema, it could say slightly more about what each listed group contains, but it is sufficient to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 75% schema coverage, most params are documented in the schema, but the 'limit' param carries no schema description. The description's 'Paginated with limit / after' supplies that missing meaning, tying limit to pagination and pairing it with the after cursor, which adds real value over the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('WhatsApp groups a phone number administers'), with a scope qualifier distinguishing it from group-scoped siblings like whatsapp_group_get or whatsapp_group_create. It does not explicitly name the closest alternative (profile_groups_list), so an agent must infer the boundary, keeping it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit when-not condition by naming the incompatible case ('coexistence numbers can't use it') and scoping to Cloud API numbers. It lacks an explicit pointer to an alternative tool, but the usage context is clear enough to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_group_updateA
Idempotent
Inspect

Change a WhatsApp group's subject, description and/or join_approval_mode. At least one is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
subjectNoMax 128 characters
group_idYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
descriptionNoMax 2048 characters
phone_number_idYesThe phone number id from profiles_placements
join_approval_modeNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=true). The description adds the requirement that at least one field be supplied, which is genuinely useful behavioral context, but it says nothing about permissions/auth needs or what happens to fields left unset.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the action and its target front-loaded and the constraint immediately following. Nothing is redundant with the structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation with annotations but no output schema, the description covers the core action and the at-least-one rule but omits permission requirements and the result of the update. Adequate but with clear gaps for a mutating tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description restates the three optional editable fields while conveying the 'and/or' optionality and the at-least-one constraint, which the schema does not express. It adds no meaning for the three required identifiers (profile_id, phone_number_id, group_id) and no value semantics for the enum, so this is a baseline-level contribution.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (change a WhatsApp group) and enumerates the exact mutable fields (subject, description, join_approval_mode), which cleanly separates it from whatsapp_group_create, whatsapp_group_delete, and whatsapp_group_get. It stops short of naming any sibling explicitly, so it is clear but not sibling-differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'At least one is required' gives a real precondition for invoking the tool, which is useful. However, there is no guidance on when to prefer this over adjacent tools such as whatsapp_group_participants_add or whatsapp_group_join_requests_approve, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_number_infoA
Read-onlyIdempotent
Inspect

Read the live state of a WhatsApp phone number from Meta: display_phone_number, verified_name, name_status, quality_rating, messaging_limit_tier, throughput, status, platform_type (CLOUD_API vs a coexistence number still in the WhatsApp Business app), plus the Business Account's review and verification status. Also refreshes the placement's stored metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine value beyond them: the read is 'live' from Meta (not cached) and it carries a side effect, 'refreshes the placement's stored metadata,' plus the platform_type CLOUD_API-vs-coexistence distinction. No auth or rate-limit detail, hence not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action. The long field enumeration is dense but earns its place given there is no output schema. Minor bloat from the parenthetical explanation, but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the field list effectively serves as a return-value spec, and the metadata-refresh side effect is disclosed. Complete enough to call correctly; the only gap is the absence of any routing guidance relative to sibling reads.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (profile_id, phone_number_id) are already documented in the schema. The description adds no syntax, format, or resolution guidance beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Read the live state") and resource (a WhatsApp phone number) and enumerates the exact fields returned, which cleanly separates it from siblings like whatsapp_number_register/verify (mutations) and whatsapp_display_name_get (a narrower read). An agent can identify the tool 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'read the live state' suggests use for inspecting a number's current status. There is no explicit when-to-use/when-not or named alternative (e.g., why not whatsapp_display_name_get or whatsapp_business_profile_get for subsets). Adequate but leaves selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_number_registerA
Idempotent
Inspect

Register a phone number with the Cloud API using its 6-digit two-step verification PIN. Postproxy does this automatically on connect with a default PIN; call it when number_info reports a registration_warning or after the PIN changed on the number. Already-registered numbers return already_registered: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
pinNo6-digit two-step verification PIN. Defaults to Postproxy's default PIN.
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, idempotent, non-destructive, openWorld. The description adds real behavioral context beyond that: auto-registration happens on connect with a default PIN, and already-registered numbers return already_registered: true. It stops short of describing error/auth failure behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, then the automatic-behavior caveat and the trigger conditions, then the idempotent return. Every sentence carries information and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description discloses the key return signal (already_registered: true) and covers prerequisites and triggers. It could say more about failure modes (invalid PIN, unverified number), but is largely complete for a 3-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents all three params, including that pin defaults to Postproxy's default PIN. The description's restatement of the 6-digit PIN adds no meaning beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: register a phone number with the Cloud API using a 6-digit two-step verification PIN. This clearly distinguishes it from sibling whatsapp_number_verify (code verification) and whatsapp_number_request_verification_code.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when NOT to bother (Postproxy does it automatically on connect with a default PIN) and gives concrete triggers for calling it: when number_info reports a registration_warning, or after the PIN changed. This is explicit when/when-not guidance tied to a named sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_number_request_verification_codeAInspect

Ask Meta to send a one-time verification code to a not-yet-verified phone number by SMS or voice call. Follow with whatsapp_number_verify.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoDelivery method, defaults to SMS
languageNoLocale for the message, e.g. en_US
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description usefully adds the precondition that the number must not yet be verified and that the call triggers an external message. However, it doesn't address the implications of idempotentHint=false (repeated calls send additional codes) or any rate limiting, which would materially affect invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the action and precondition front-loaded and the follow-up step immediately after. No filler, no repetition of the tool name, and nothing an agent must skip past to act.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent what the call does (dispatches a code) and what to do next, so the workflow is closed. It omits repeated-invocation behavior and any indication of what the response contains (e.g. code length or expiry), leaving a small gap for a non-idempotent outbound tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: method (SMS/VOICE enum), language locale, profile_id, and phone_number_id are all documented in the schema itself. The description's 'by SMS or voice call' merely restates the method enum without adding syntax, defaults, or constraints beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific actor and action ('Ask Meta to send a one-time verification code') plus the target resource (a not-yet-verified phone number) and the delivery channels (SMS or voice call). It also names the follow-up sibling, whatsapp_number_verify, so an agent can separate this from whatsapp_number_register 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States a clear precondition ('not-yet-verified phone number') and an explicit next step ('Follow with whatsapp_number_verify'), which gives real sequencing context. It stops short of naming alternatives or exclusions, e.g. what to do if the number is already verified or how this differs operationally from whatsapp_number_register.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_number_verifyAInspect

Submit the one-time code received after whatsapp_number_request_verification_code to verify ownership of the phone number.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe verification code Meta sent
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-idempotent, open-world behavior, so the safety profile is covered. The description adds that the code is one-time and originated from Meta, but omits what happens on success/failure, whether codes expire, and retry limits — useful context for a verification mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the action, the prerequisite, and the outcome. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still conveys the operating context (prerequisite call, one-time code, ownership verification). It could be more complete about the post-verification state and error handling, but nothing essential to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters documented (code, profile_id, phone_number_id). The description only restates that the code came from the prior request step, adding no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (submit/verify) and resource (phone number ownership) using the one-time code, and explicitly names the sibling tool that produces that code. An agent can distinguish it from whatsapp_number_register and whatsapp_number_info without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear prerequisite: it must follow whatsapp_number_request_verification_code. It does not say what to do after success (e.g., whatsapp_number_register) or when this step should be skipped, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_template_createAInspect

Submit a new WhatsApp message template to Meta for review. Either pass components (custom template: HEADER / BODY / FOOTER / BUTTONS in Meta's shape, with example values for any {{n}} placeholders) or library_template_name to instantiate one of Meta's pre-approved library templates (approved instantly). name must be lowercase letters, digits and underscores; category is UTILITY, MARKETING or AUTHENTICATION. Custom templates come back PENDING — watch the message_template.status_updated webhook or re-list with refresh.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTemplate name: lowercase letters, digits and underscores, starting with a letter
categoryYes
languageYesLanguage code, e.g. en_US
componentsNoMeta template components. Required for a custom template.
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
parameter_formatNoPlaceholder style: {{1}} (default) or {{name}}
library_template_nameNoName of a Meta template-library entry to instantiate (see whatsapp_template_library_get)
message_send_ttl_secondsNoTime-to-live for sends of this template. AUTHENTICATION 30-900, UTILITY 30-43200, MARKETING 43200-2592000, or -1 to keep Meta's default
library_template_body_inputsNoBody inputs the library template asks for
library_template_button_inputsNoButton inputs the library template asks for

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations covering the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description still adds meaningful behavior: custom templates return PENDING, library templates are approved instantly, and a named webhook (message_template.status_updated) plus a re-list-with-refresh path are offered for tracking. It stops short of noting auth/permission requirements 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Roughly four dense sentences, front-loaded with the core action before the two-branch detail and the async outcome. No filler, though the middle sentence packs several constraints (name charset, category enum) that the schema already encodes and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation tool with no output schema, the description covers both invocation branches and what happens after submission (PENDING vs instant approval, webhook vs refresh). It does not state what the response object contains (e.g., template id), but the state-change information an agent needs to proceed is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 90% so the baseline is 3, but the description adds real semantics: it maps 'components' to Meta's HEADER/BODY/FOOTER/BUTTONS shape and stresses that example values are required for any {{n}} placeholders, and it explains that library_template_name/body/button inputs are the alternative path. It does not restate the TTL or parameter_format details, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Submit a new WhatsApp message template to Meta for review.' It clearly separates this tool from siblings like whatsapp_template_update (modify), whatsapp_template_delete, and whatsapp_template_library_get (browse), so an agent can pick the right one 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing between the two creation modes: pass 'components' for a custom template or 'library_template_name' to instantiate a pre-approved one, and points to whatsapp_template_library_get for the library entry name. It does not explicitly say what to do for modifying an existing template (use whatsapp_template_update instead), which is the main remaining gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_template_deleteA
DestructiveIdempotent
Inspect

Delete a WhatsApp template on Meta and in Postproxy. With language, only that language variant is deleted; addressing by name without language deletes every language of that name. Deleted template names can't be reused for 30 days on Meta.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoDelete only this language variant. Omit (with a name) to delete all languages.
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
template_idYesTemplate hashid, Meta template id, or template name (pass language when the name exists in several languages)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable non-obvious behavioral context: deletion propagates to both Meta and Postproxy, the language parameter controls whether one variant or all languages are destroyed, and deleted names are locked from reuse for 30 days on Meta. It does not explicitly state irreversibility or permission requirements, keeping it just below the top score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences with the core action front-loaded. Each sentence adds distinct value—external scope, language-variant behavior, and the name reuse lockout—with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete tool with full schema coverage and rich annotations, the description covers the essential operational semantics and a key external consequence. It does not discuss return behavior or error/permission cases, but no output schema exists and annotations already signal the destructive nature, so it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the schema's language behavior (variant vs. all languages) and name-addressing consequence, but adds no syntax, format, or constraints beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (WhatsApp template), plus the external systems affected (Meta and Postproxy). The action is inherently distinct from sibling update/create/get tools, but the description does not explicitly differentiate itself from those siblings, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides implied usage guidance by explaining the effect of including or omitting the language parameter and warning about the 30-day name reuse restriction. However, it never explicitly says when to choose this tool versus alternatives or states prerequisites, so guidance remains 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.

whatsapp_template_getA
Read-onlyIdempotent
Inspect

Get one WhatsApp message template with its components (header, body, footer, buttons), status, category, parameter_format and variable_count.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoTemplate language code, e.g. en_US
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
template_idYesTemplate hashid, Meta template id, or template name (pass language when the name exists in several languages)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real value by enumerating the returned payload (components, status, category, parameter_format, variable_count), which matters because there is no output schema; it does not, however, mention auth scoping or error cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the verb and resource front-loaded and the return contents following immediately. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully compensates by naming the fields returned. An agent can call this correctly using the schema plus this description; only richer guidance (e.g., error behavior when a template name is ambiguous) is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters are documented in-schema, including the language-name disambiguation hint. The description contributes nothing beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and a precisely scoped resource ('one WhatsApp message template'), and enumerates the returned components (header, body, footer, buttons) plus status/category/parameter_format/variable_count. The singular 'one template' implicitly distinguishes it from whatsapp_templates_list, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the retrieval scope: fetch a single known template versus listing all templates. There is no explicit statement of when to prefer this over whatsapp_templates_list or whatsapp_template_library_get, and no prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_template_library_getA
Read-onlyIdempotent
Inspect

Look up a pre-approved template in Meta's template library by name (e.g. order_confirmation, delivery_update) to see the inputs it needs before creating it with whatsapp_template_create + library_template_name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLibrary template name
languageNoLanguage code
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds useful behavioral context beyond them: this reads Meta's shared library, not account data, and is intended as a pre-create validation step. No rate limits or response shape are described, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, zero waste, front-loaded with the action and resource, with examples and the sibling workflow appended. Nothing redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a fully annotated read-only tool with no output schema, the description conveys what the call returns (the inputs a library template needs) and the workflow it belongs to. It stops just short of describing the return structure, but that gap is minor given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are documented in the schema and baseline is 3. The description enriches the name parameter with example values (order_confirmation, delivery_update), which is helpful but does not explain language or profile_id beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (look up) and a specific resource (a pre-approved template in Meta's template library, by name), with concrete examples. It implicitly distinguishes itself from whatsapp_template_get by scoping to the library rather than the account's own templates, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the workflow: use this 'to see the inputs it needs before creating it with whatsapp_template_create + library_template_name.' That gives clear when-to-use context and routes to the follow-up tool, but offers no exclusions or guidance on when to skip it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_templates_listA
Read-onlyIdempotent
Inspect

List the message templates on a WhatsApp Business Account (the profile) as Postproxy has them synced from Meta. Filter by name, language or status (APPROVED, PENDING, REJECTED, PAUSED, DISABLED). Pass refresh: true to pull Meta's current list first. Only APPROVED templates can be sent; each entry's variable_count is how many values dm_message_send's template.variables must carry.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by template name
statusNoFilter by Meta status, e.g. APPROVED
refreshNoSync from Meta before listing
languageNoFilter by language code, e.g. en_US
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuinely non-obvious behavior: results reflect Postproxy's synced cache rather than live Meta state unless refresh is passed, and only APPROVED templates are sendable. It stops short of describing pagination or result-set bounds for a listing call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the core action and scope, followed by filter dimensions, the refresh switch, and the cross-tool constraint. No sentence is filler and nothing is repeated from the schema verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does carry return-shape burden and partially meets it by naming entry fields (status, variable_count). It is complete enough for correct invocation, though pagination and total-count behavior for a listing endpoint remain unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and would justify a baseline 3, but the description goes further by enumerating the status values (APPROVED, PENDING, REJECTED, PAUSED, DISABLED) that the schema leaves as a free string with no enum, and by clarifying what refresh actually does beyond the schema's terse 'Sync from Meta before listing'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the message templates on a WhatsApp Business Account') and pins the data source ('as Postproxy has them synced from Meta'). An agent can immediately distinguish this from whatsapp_template_get, whatsapp_template_library_get, and whatsapp_template_create without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the filter dimensions (name, language, status) and a clear conditional for the refresh parameter ('Pass refresh: true to pull Meta's current list first'), plus a downstream usage rule tying APPROVED to dm_message_send. It does not, however, say when to prefer this over the sibling whatsapp_template_get or whatsapp_template_library_get, so routing among template tools is only partially resolved.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_template_updateA
Idempotent
Inspect

Update a WhatsApp template's components and/or message_send_ttl_seconds. Editing components sends the template back through Meta review (status returns to PENDING). At least one of components / message_send_ttl_seconds is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoTemplate language code, e.g. en_US
componentsNoFull replacement component list in Meta's shape
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
template_idYesTemplate hashid, Meta template id, or template name (pass language when the name exists in several languages)
message_send_ttl_secondsNoNew TTL in seconds within the category range (-1 not allowed on update)

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds crucial behavioral context beyond annotations: editing components sends the template back through Meta review and changes status to PENDING. This is a significant side effect not captured by the annotations (which only declare idempotentHint and destructiveHint=false). The constraint about at least one parameter being required also adds a precondition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences that are front-loaded with the core purpose and constraints. Every sentence adds value: the first defines the action, the second explains a critical consequence, and the third states a requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description is mostly complete: it states the action, side effect, and prerequisite. However, it could mention permission requirements or what happens to fields not provided (e.g., if only TTL is updated, components remain unchanged). Still, it covers the essentials for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description mentions components and message_send_ttl_seconds but doesn't add detailed semantics like format for components or valid TTL ranges 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb (update) and resource (a WhatsApp template's components and/or message_send_ttl_seconds). It distinguishes the two updateable entities and explicitly names the affected fields, allowing an agent to differentiate it from siblings like whatsapp_template_create or whatsapp_template_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a constraint (at least one of components / message_send_ttl_seconds is required), which gives some guidance on when the tool is applicable. However, it doesn't explicitly state when to choose this tool over siblings like whatsapp_template_create or what scenarios would alternatively require deletion/recreation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_username_deleteB
DestructiveIdempotent
Inspect

Release the WhatsApp username set on a phone number.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The verb 'Release' adds a small nuance beyond 'delete' – that the username is freed – but the description does not say whether the number keeps its display name, whether the username becomes claimable by others, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and resource first and zero filler. Nothing could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive operation with no output schema, the description covers the essential act but omits side effects (what happens to the freed username) and any prerequisite/permission context. Annotations carry the safety burden, but a destructive tool warrants a little more.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both profile_id and phone_number_id are already documented in the schema. The phrase 'set on a phone number' loosely maps to phone_number_id but adds no format or constraint detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Release'), the exact resource (the WhatsApp username), and its scope ('set on a phone number'), which separates it from whatsapp_username_set and whatsapp_username_get. It stops short of explicitly naming those siblings, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of the sibling tools (set/get/suggestions). The agent must infer that this removes an existing username rather than changing or reading one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_username_getA
Read-onlyIdempotent
Inspect

Read the WhatsApp username (wa.me/username handle) set on a phone number, if any, and its status.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds modestly by signaling a possibly-absent value ('if any') and a status field, but does not explain error behavior when no username exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It could be marginally tighter, since 'and its status' is left vague rather than specified, but there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does name the two expected pieces of output (the handle and its status). For a simple, read-only two-parameter lookup whose safety traits are already annotated, this is nearly sufficient; only the absent-username case is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both profile_id and phone_number_id are already documented in the schema. The description adds no syntax, format, or sourcing detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (WhatsApp username / wa.me handle) plus the retrieval scope (set on a phone number, if any, and its status). It is clearly distinct from whatsapp_username_set/delete, but it never names those siblings to reinforce the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the read counterpart to set/delete. There is no explicit when-to-use, no mention of the natural alternative (whatsapp_username_suggestions for discovering candidates), and no prerequisite information beyond the parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_username_setA
Idempotent
Inspect

Claim or change the WhatsApp username of a phone number. Letters, digits, periods and underscores, must contain a letter, no leading / trailing / consecutive periods. Pass transfer_action: force_transfer to move a username already held by another number in the same business.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements
transfer_actionNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=true, openWorld=true), and the description adds value beyond them by disclosing the cross-number side effect of force_transfer and the format validation rules. It stops short of describing error behavior or permissions, but the transfer consequence is the key non-obvious trait and it is surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and resource, followed by the format constraint and then the conditional transfer hint. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param setter with no output schema, the description covers purpose, format rules, and the notable transfer scenario. It leaves error handling (e.g. username already taken) and required permissions unstated, which is a minor gap rather than a blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, but the description compensates well: it spells out the username character rules (letters, digits, periods, underscores, must contain a letter, no leading/trailing/consecutive periods) and explains transfer_action's force_transfer value, which the enum alone does not. profile_id and phone_number_id are already documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair ('claim or change') plus the exact resource ('the WhatsApp username of a phone number'). This cleanly separates it from the sibling whatsapp_username_get, whatsapp_username_delete and whatsapp_username_suggestions, and even captures both create and update cases in one phrase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete conditional: use transfer_action: force_transfer when a username is already held by another number in the same business. That is real when-to-use guidance, though it does not name alternative tools or state when NOT to use this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_username_suggestionsB
Read-onlyIdempotent
Inspect

Get Meta's available username suggestions for a phone number.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the mild implication that results are Meta-provided, unclaimed candidates; it says nothing about how many suggestions come back, whether they expire, or whether re-calling yields the same set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy; every word carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with a full schema and annotations that cover safety, the description is minimally adequate. It omits the workflow context (what to do with the suggestions) and any hint about the shape of the returned suggestions, which matters slightly since there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema and the baseline is 3. The phrase 'for a phone number' loosely gestures at phone_number_id but adds no format or sourcing detail beyond what the schema's own descriptions provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and a specific resource ('Meta's available username suggestions') scoped to a phone number, which cleanly separates it from the sibling username_get/set/delete tools. It does not, however, explicitly name those siblings or state how it differs from them beyond the word 'suggestions'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all. The description never says this is the discovery step that precedes whatsapp_username_set, nor does it mention any prerequisite (e.g. that the number must be verified or that profile_id/phone_number_id must come from profiles_placements).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_users_blockA
Idempotent
Inspect

Block up to 1000 phone numbers on a WhatsApp phone number so they can no longer message it. Returns succeeded and failed lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
usersYesPhone numbers or wa_ids, at most 1000
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new context: the 1000-item batch cap and the partial-success return shape (succeeded/failed lists). It stops short of auth requirements or rate limits, but the annotations carry most of the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core action and its effect front-loaded ahead of the return-value note. Nothing could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-required-param mutation tool with no output schema, the description covers action, batch limit, and partial-failure semantics, and annotations cover idempotency and safety. It lacks only peripheral details such as error conditions or permission requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with every parameter documented in the schema (including the 'at most 1000' cap on users). The description's 'up to 1000 phone numbers' merely restates the schema constraint and adds no syntax or format detail beyond it, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (block) and resource (phone numbers on a WhatsApp phone number) plus the observable effect ('so they can no longer message it'). Combined with the name, it is immediately distinguishable from the sibling whatsapp_users_unblock and the read-only whatsapp_blocked_users_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to use this versus alternatives, nor any prerequisite (e.g. that the phone number must be registered, or that unblock exists for reversal). The effect statement hints at intent but provides no routing guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whatsapp_users_unblockA
Idempotent
Inspect

Unblock up to 1000 previously blocked phone numbers on a WhatsApp phone number. Returns succeeded and failed lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
usersYesPhone numbers or wa_ids, at most 1000
profile_idYesProfile hashid of a whatsapp profile (the WhatsApp Business Account)
phone_number_idYesThe phone number id from profiles_placements

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (destructiveHint=false, idempotentHint=true, openWorldHint=true), lowering the bar, and the description adds genuinely new behavior: partial-failure semantics reported as succeeded and failed lists. The 'up to 1000' cap is largely redundant with the array param description, keeping this short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the operation and its limit are front-loaded before the return description. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully characterizes the response as succeeded/failed lists, and all three required parameters are fully covered by the schema while annotations carry the safety and idempotency profile. Nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so profile_id, phone_number_id and users are all documented in structured fields; baseline is 3. The description only restates the 1000-element cap already present in the users schema description and adds no new syntax (e.g., wa_id vs phone number formatting, behavior on unknown numbers).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (unblock) and resource (previously blocked phone numbers) with scope (up to 1000) and target context (on a WhatsApp phone number). The polarity is unambiguous against the sibling whatsapp_users_block and the blocked-users listing tools, so an agent can select it 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the specific verb: the description never states when to reach for this versus whatsapp_blocked_users_list or whatsapp_blocked_user_status (e.g., to first inspect who is blocked), nor any prerequisites. Adequate for an obvious inverse operation, but no explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 103 tool updates
    • First observedauth_status
    • First observedcomments_create
    • First observedcomments_delete
    • First observedcomments_edit
    • First observedcomments_get
    • First observedcomments_hide
    • First observedcomments_like
    • First observedcomments_list
    • First observedcomments_unhide
    • First observedcomments_unlike
    • First observeddm_chat_archive
    • First observeddm_chat_create
    • First observeddm_chat_get
    • First observeddm_chat_mark_read
    • First observeddm_chat_unarchive
    • First observeddm_chats_list
    • First observeddm_comment_private_reply
    • First observeddm_message_edit
    • First observeddm_message_get
    • First observeddm_message_react
    • First observeddm_message_send
    • First observeddm_message_unreact
    • First observeddm_messages_list
    • First observedgoogle_business_attributes_available
    • First observedgoogle_business_attributes_get
    • First observedgoogle_business_attributes_update
    • First observedgoogle_business_categories_list
    • First observedgoogle_business_food_menus_get
    • First observedgoogle_business_food_menus_update
    • First observedgoogle_business_hours_update
    • First observedgoogle_business_location_get
    • First observedgoogle_business_location_update
    • First observedgoogle_business_media_create
    • First observedgoogle_business_media_delete
    • First observedgoogle_business_media_list
    • First observedgoogle_business_place_action_link_create
    • First observedgoogle_business_place_action_link_delete
    • First observedgoogle_business_place_action_link_update
    • First observedgoogle_business_place_action_links_list
    • First observedgoogle_business_service_list_get
    • First observedgoogle_business_service_list_update
    • First observedhistory_list
    • First observedpost_delete
    • First observedpost_delete_on_platform
    • First observedpost_publish
    • First observedpost_publish_draft
    • First observedpost_stats
    • First observedpost_status
    • First observedpost_update
    • First observedprofile_comments_create
    • First observedprofile_comments_delete
    • First observedprofile_comments_get
    • First observedprofile_comments_list
    • First observedprofile_groups_initialize_connection
    • First observedprofile_groups_list
    • First observedprofiles_list
    • First observedprofiles_placements
    • First observedprofiles_stats
    • First observedqueues_create
    • First observedqueues_delete
    • First observedqueues_get
    • First observedqueues_list
    • First observedqueues_next_slot
    • First observedqueues_update
    • First observedsummary_get
    • First observedupload_create
    • First observedwhatsapp_blocked_user_status
    • First observedwhatsapp_blocked_users_list
    • First observedwhatsapp_business_profile_get
    • First observedwhatsapp_business_profile_photo_update
    • First observedwhatsapp_business_profile_update
    • First observedwhatsapp_conversion_event_send
    • First observedwhatsapp_dataset_create
    • First observedwhatsapp_dataset_get
    • First observedwhatsapp_display_name_get
    • First observedwhatsapp_display_name_request_change
    • First observedwhatsapp_group_create
    • First observedwhatsapp_group_delete
    • First observedwhatsapp_group_get
    • First observedwhatsapp_group_invite_link_create
    • First observedwhatsapp_group_join_requests_approve
    • First observedwhatsapp_group_join_requests_list
    • First observedwhatsapp_group_join_requests_reject
    • First observedwhatsapp_group_participants_add
    • First observedwhatsapp_group_participants_remove
    • First observedwhatsapp_group_update
    • First observedwhatsapp_groups_list
    • First observedwhatsapp_number_info
    • First observedwhatsapp_number_register
    • First observedwhatsapp_number_request_verification_code
    • First observedwhatsapp_number_verify
    • First observedwhatsapp_template_create
    • First observedwhatsapp_template_delete
    • First observedwhatsapp_template_get
    • First observedwhatsapp_template_library_get
    • First observedwhatsapp_template_update
    • First observedwhatsapp_templates_list
    • First observedwhatsapp_username_delete
    • First observedwhatsapp_username_get
    • First observedwhatsapp_username_set
    • First observedwhatsapp_username_suggestions
    • First observedwhatsapp_users_block
    • First observedwhatsapp_users_unblock

Publisher details

Operator
Postproxy
Operator website
https://postproxy.dev
Vendor relationship
First-party
Restrictions
Free plan is available

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    The best free social media publishing and scheduling API. Publish to 11 platforms from a single API call. Schedule posts, upload media, track analytics, and automate your social media workflow.
    51
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables agents to manage social media publishing, media uploads, and content queues through the Postifys API.
    17
    3 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables publishing and scheduling content across 9 social platforms (X, Instagram, TikTok, YouTube, Facebook, LinkedIn, Pinterest, Threads, Bluesky) through a single MCP tool interface, acting as a stateless proxy to the Solnk API.
    11
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.