Skip to main content
Glama
wsapi-chat

WSAPI WhatsApp MCP Server

@wsapichat/mcp-server

npm version License: MIT

A Model Context Protocol (MCP) server for WSAPI - the WhatsApp API Gateway. Enables LLMs to send messages, manage contacts and groups, handle communities and newsletters, post status updates, and more through WhatsApp.

For comprehensive documentation, see the WSAPI MCP Server guide.

Note: This project is not affiliated with, associated with, or endorsed by WhatsApp or Meta.

Installation

Prerequisites

  • Node.js >= 20.19.0

  • WSAPI account with API credentials (wsapi.chat)

Claude Desktop

Add to your Claude Desktop configuration:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "wsapi": {
      "command": "npx",
      "args": ["@wsapichat/mcp-server"],
      "env": {
        "WSAPI_API_KEY": "your_api_key_here",
        "WSAPI_INSTANCE_ID": "your_instance_id_here",
        "WSAPI_ENABLED_CATEGORIES": "messaging,contacts"
      }
    }
  }
}

Claude Code

claude mcp add wsapi -- npx @wsapichat/mcp-server \
  --env WSAPI_API_KEY=your_api_key_here \
  --env WSAPI_INSTANCE_ID=your_instance_id_here \
  --env WSAPI_ENABLED_CATEGORIES=messaging,contacts

Related MCP server: MCP WPPConnect Server

Tool Filtering

The server exposes 80+ tools across 12 categories. To reduce context window usage, you can filter which tools are loaded using environment variables.

By category

Load only messaging and contact tools:

WSAPI_ENABLED_CATEGORIES=messaging,contacts

Available categories: messaging, contacts, groups, chats, session, users, communities, newsletters, status, calls, media

By individual tool

Load only specific tools:

WSAPI_ENABLED_TOOLS=whatsapp_send_text,whatsapp_send_image,whatsapp_get_contacts

Combined

Use categories as a base set and add individual tools from other categories:

WSAPI_ENABLED_CATEGORIES=messaging
WSAPI_ENABLED_TOOLS=whatsapp_get_contacts,whatsapp_get_chats

If neither variable is set, all tools are loaded.

Configuration

Variable

Required

Default

Description

WSAPI_API_KEY

Yes

-

Your WSAPI API key

WSAPI_INSTANCE_ID

Yes

-

Your WSAPI instance ID

WSAPI_BASE_URL

No

https://wsapi.chat

WSAPI base URL

WSAPI_ENABLED_CATEGORIES

No

(all)

Comma-separated tool categories to load

WSAPI_ENABLED_TOOLS

No

(all)

Comma-separated tool names to load

LOG_LEVEL

No

info

Logging level (error, warn, info, debug)

Development

git clone https://github.com/wsapi-chat/wsapi-mcp
cd wsapi-mcp
npm install
cp .env.example .env  # Edit with your credentials
npm run build
npm start

License

MIT - see LICENSE for details.

Unreleased contract update

The source covers 101 WhatsApp operations; Cloud Account/subscription and OSS admin APIs are outside this integration's scope. Changes in this working tree have not been published. See CHANGELOG.md.

Available Tools

101 tools
whatsapp_archive_chatA
Idempotent

Archive or unarchive a chat. Archiving only hides it from the main list on this account; messages are kept and it can be undone. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
archivedYesArchive or unarchive

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructive=false and idempotent=true, so the safety profile is largely covered. The description nonetheless adds real value beyond them: it discloses that archiving is account-scoped, non-lossy (messages retained), and reversible, and that the call returns a success confirmation. That is meaningful behavioral context a caller cannot derive from 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?

Three short sentences, front-loaded with the action, followed by scope and reversibility, then the return note. Nothing is redundant and no sentence can be cut without losing 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?

For a two-parameter, no-output-schema tool, the description covers action, state semantics, reversibility, scope, and the return behavior. Nothing an agent needs to invoke it correctly is missing, and there is no output schema demanding further explanation.

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%: 'chatId' is documented as a Chat JID and 'archived' as the archive/unarchive flag. The description merely restates the boolean toggle and adds no format, default, or edge-case guidance (e.g., what happens if already archived). Baseline 3 is appropriate when the schema does the work.

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 ('archive or unarchive') and resource ('a chat'), and even covers the bidirectional toggle within the title-style opening. It does not, however, explicitly distinguish itself from adjacent siblings like whatsapp_pin_chat, whatsapp_mute_chat, or whatsapp_clear_chat, which an agent could plausibly confuse with it.

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 clause 'Archiving only hides it from the main list on this account; messages are kept and it can be undone' implies when this is appropriate (decluttering without data loss), but there is no explicit when-to-use, when-not-to-use, or named alternative such as pin_chat or delete_chat. Usage is inferred 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_block_contactA
Idempotent

Block a contact by user JID: they can no longer message or call this number, and they are not notified. Reversible with whatsapp_unblock_contact. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact JID to block

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover safety (idempotentHint=true, destructiveHint=false, readOnlyHint=false), and the description adds genuinely new behavioral context: the blocked party is not notified, and the action is reversible via whatsapp_unblock_contact. It does not discuss rate limits or how blocking an already-blocked contact behaves, but it covers the key consequences an agent needs.

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

Conciseness5/5

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

Three short sentences, each earning its place: the action, the consequence, the reversibility, and the return shape. The core action is front-loaded with no filler.

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 single-parameter mutation with a clear annotation profile and no output schema, the description covers action, effect, notification behavior, reversibility, and return value. Nothing an agent needs in order to call it correctly is missing.

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

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 'id' parameter, and the description merely echoes the JID concept ('by user JID') without adding format or validation detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Block a contact by user JID') and immediately describes the effect: they can no longer message or call, and are not notified. This distinguishes it cleanly from the sibling whatsapp_unblock_contact, which it names 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?

The description names the reversing operation (whatsapp_unblock_contact) and states reversibility, giving clear context for when this action can be undone. It does not state explicit when-not conditions or prerequisites (e.g., whether the contact must exist first), so it stops short of a 5.

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

whatsapp_bulk_check_usersA
Read-only

Check many phone numbers at once for WhatsApp accounts. Read-only. Pass numbers with country code, digits only. Returns whether each number is registered, with its user JID.

ParametersJSON Schema
NameRequiredDescriptionDefault
phonesYesList of phone numbers to check

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, openWorldHint), and the description reinforces it with 'Read-only' while adding genuinely useful input-format constraints ('country code, digits only') and return shape ('registered, with its user JID'). It does not cover rate limits or batching limits, but it adds real 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?

Three short sentences, front-loaded with purpose, then format, then return value. Every sentence earns its place with no filler.

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 single-parameter read tool, the description covers purpose, input format, and return value; annotations carry the safety profile. Nothing an agent needs to call it correctly is missing.

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

Parameters5/5

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

Schema coverage is 100% and there is only one parameter, so the baseline is already high. The description goes beyond the schema's generic 'List of phone numbers' by specifying the required format (country code, digits only), which is meaningful guidance an agent needs to invoke correctly.

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 ('Check many phone numbers at once for WhatsApp accounts') and the batch scope immediately distinguishes it from the single-number sibling whatsapp_check_user. An agent knows exactly 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?

The phrase 'many phone numbers at once' clearly implies the batch use case versus the singular check tool, giving a solid selection signal. It stops short of explicitly naming whatsapp_check_user as the alternative or stating exclusions, so it is clear context rather than full routing guidance.

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

whatsapp_check_userA
Read-only

Check whether one phone number has WhatsApp, before sending to it. Read-only. Pass the number with country code, digits only. Returns whether it is registered and its user JID. For many numbers at once, use whatsapp_bulk_check_users.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPhone number (e.g. 1234567890)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety profile is covered; 'Read-only' is redundant but consistent. The description adds real value beyond annotations by disclosing the return semantics (registration status and user JID), which matters since 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?

Three short sentences, zero waste, with the primary action and the alternative routing both front-loaded. Nothing is padded or repeated.

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 single-parameter read tool with no output schema, the description covers purpose, precondition, input format, return values, and the alternative tool. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3, but the description adds a formatting constraint not present in the schema: pass the number with country code, digits only. The schema's example (1234567890) does not convey the country-code requirement, so this is genuine added 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?

States a specific verb and resource ('Check whether one phone number has WhatsApp') and explicitly scopes it to a single number, distinguishing it from the bulk sibling. An agent can tell it apart from whatsapp_bulk_check_users 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 Guidelines5/5

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

Gives the trigger context ('before sending to it') and names the alternative with its selecting condition ('For many numbers at once, use whatsapp_bulk_check_users'). Both when-to-use and when-to-use-something-else are covered.

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

whatsapp_clear_chatA
DestructiveIdempotent

Delete all messages in a chat on this account but keep the chat in the list. It cannot be undone and does not affect other participants. To remove the chat entirely, use whatsapp_delete_chat. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID

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, so the safety profile is largely covered. The description adds useful behavioral context beyond annotations: 'cannot be undone' (explicit irreversibility), 'does not affect other participants' (blast radius), and 'Returns a success confirmation' (output signal). It does not mention auth or rate limits, and the return note is thin given there is no output schema, so it falls 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?

Four compact sentences, with the core action front-loaded, followed by irreversibility/scope, alternative routing, and return behavior. Every sentence adds something and there is no filler.

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 single-parameter destructive chat operation with rich annotations and no output schema, the description supplies purpose, scope, alternative, irreversibility, and return shape. Nothing material an agent needs in order to call it correctly is missing.

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

Parameters3/5

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

There is only one required parameter and schema description coverage is 100%; the schema already documents 'chatId' as a 'Chat JID'. The description adds no additional format, syntax, or validation detail beyond what the schema provides, so the baseline of 3 is appropriate.

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

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 ('Delete all messages in a chat') and immediately clarifies scope ('keep the chat in the list'). It explicitly contrasts itself with the sibling 'whatsapp_delete_chat', so an agent can distinguish the two 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 Guidelines5/5

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

It gives an explicit alternative and the condition that selects it: 'To remove the chat entirely, use whatsapp_delete_chat.' It also notes the non-effect on other participants, which helps an agent decide when this narrow clear operation is appropriate versus full deletion.

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

whatsapp_create_communityA

Create a new WhatsApp community with this number as its admin, optionally adding participants. Participants are added immediately and notified. Returns the new community JID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCommunity name
approvalModeNoJoin approval mode
participantsNoInitial participant JIDs

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare the write/openWorld/non-idempotent profile, so the bar is lower. The description adds genuinely useful side-effect context the annotations cannot convey: participants are added immediately and notified, and the tool returns the new community JID. It stops short of describing approval/permission requirements.

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, each earning its place: creation semantics, the side effect, and the return value. Front-loaded with the core action.

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, naming the returned community JID is a valuable addition, and the immediate-notification side effect is covered. A note on whether approvalMode affects participant admission or any auth/prerequisite constraints would make it 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%, so all three parameters are already documented, making 3 the baseline. The description reinforces that participants are optional and that the caller becomes admin, but adds no new semantics for approvalMode or the JID format.

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 new WhatsApp community') and clarifies that the calling number becomes admin, which separates it from create_group and create_community_group. It does not explicitly contrast with those siblings, 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 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 exclusions or alternatives named, despite a dense sibling set that includes create_group, create_community_group, and link_group_to_community. The 'optionally adding participants' phrase only describes a capability, not a selection condition.

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

whatsapp_create_community_groupA

Create a new group inside a community, optionally with participants, who are added and notified. Requires community admin rights. To attach a group that already exists, use whatsapp_link_group_to_community. Returns the new group JID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID
nameYesGroup name
participantsNoParticipant JIDs

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=false, destructive=false and openWorld=true. The description adds genuinely new behavioral context the annotations cannot: that supplied participants are actually added and notified, that admin rights are required for authorization, and that the JID is returned. It does not restate the safety/idempotency profile, which is fine since annotations carry 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, front-loaded with the action and scope, then the routing alternative, then the return value. 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.

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 helpfully states the return value (new group JID). Combined with the auth requirement and alternative routing, an agent has everything needed to call this mutation 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 coverage is 100%, so the schema already documents id (community JID), name, and participants (JIDs). The description adds the side-effect semantics of participants (added and notified) but no format or constraint detail 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 (create) and resource (group inside a community), and explicitly distinguishes itself from whatsapp_link_group_to_community, which is the nearest sibling. An agent can route between the two 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 Guidelines5/5

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

Gives an explicit when-to-use-this vs. when-to-use-the-alternative clause ('To attach a group that already exists, use whatsapp_link_group_to_community'), plus a prerequisite ('Requires community admin rights'). Nothing material is left to inference.

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

whatsapp_create_contactA
Idempotent

Save a contact on the connected number, or update its name if it already exists. Only affects this account's address book. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPhone number or JID of the contact
fullNameYesFull name of the contact
firstNameNoFirst name (optional)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare a non-destructive, idempotent, open-world write, and the description adds genuine value beyond them: it discloses the upsert semantics (a name update when the contact exists, consistent with idempotentHint) and bounds the blast radius to this account's address book. It does not cover auth requirements or what happens to the optional firstName on update.

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 waste; the core action and its upsert nature are front-loaded, followed by scope and return confirmation.

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 mutation tool with no output schema, the description covers the essential what, scope, and return signal ('success confirmation'), and annotations carry the safety profile. Only minor gaps remain, such as behavior of the optional firstName on an existing contact.

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 every parameter (id, fullName, firstName) is documented in the schema, so the baseline is 3. The description adds no parameter syntax, format, or required/optional detail beyond what the schema already states.

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 (save a contact) plus the upsert behavior (updates the name if it already exists), so the agent knows this is a create-or-update operation. It does not explicitly distinguish itself from the similarly named sibling whatsapp_send_contact, which also involves contacts, so differentiation is left to inference.

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

Usage Guidelines3/5

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

The scope note 'Only affects this account's address book' implies the context of use and reassures the agent this is a local address-book write rather than a message send. However, there is no explicit when-to-use versus when-not-to-use guidance and no named alternative, 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_create_groupA

Create a new group with this number as admin and the given participants (user JIDs). Participants are added immediately and notified. Calling it twice creates two groups. Returns the new group JID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesGroup name
participantsYesParticipant JIDs

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare non-readOnly, non-idempotent, non-destructive, open-world. The description adds real context beyond that: participants are added immediately and notified (third-party side effect), calling twice creates two groups (concrete consequence of non-idempotency), and it returns the new group JID, which matters since 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?

Four short sentences, no filler, with the core action front-loaded and the side-effect/return-value caveats following. 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?

Annotations cover the safety profile and the description supplies the return value plus the notification side effect, so an agent can call this correctly. Minor gaps remain: no handling guidance for invalid JIDs or failure behavior.

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 parameters are already documented. The description only restates 'participants (user JIDs)' and adds that the session number becomes admin, which is implicit behavior rather than parameter meaning — 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 and resource ('Create a new group') and adds scope detail — the calling number becomes admin and participants are the given user JIDs. This clearly separates it from siblings like whatsapp_create_community_group, whatsapp_create_newsletter, and whatsapp_create_contact.

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 routing is given. The description never mentions when to prefer this over whatsapp_create_community_group, whatsapp_join_group_with_link, or the many group-management siblings; 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_create_newsletterA

Create a new WhatsApp channel (newsletter) owned by this number, with a name and optional description and picture. It is public once created. Returns the new channel JID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNewsletter name
pictureNoBase64-encoded profile picture
descriptionNoNewsletter description

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the write/open-world/non-idempotent/non-destructive profile, so the bar is lower. The description adds two genuinely useful facts beyond structured fields: that the channel becomes public immediately on creation, and that it returns the new channel JID.

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-loaded with the core action and followed by the consequence and return value. No filler or redundant restatement.

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, mentioning the returned JID is valuable, and the public-on-creation consequence covers the main non-obvious behavior for a mutation tool. A note on session/permission prerequisites would make it 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%, so the schema already documents name, picture, and description. The description only restates that description and picture are optional, adding no format or syntax detail 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?

States a specific verb (Create) and resource (WhatsApp channel/newsletter), and resolves the terminology ambiguity by equating 'channel' with 'newsletter'. It also specifies ownership scope ('owned by this number'), which distinguishes it from read-side siblings like whatsapp_list_newsletters and whatsapp_get_newsletter.

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 'Create a new WhatsApp channel', but the description never states when to use this versus alternatives, nor any prerequisite such as requiring an active session. 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.

whatsapp_delete_chatA
DestructiveIdempotent

Delete a whole chat and its messages from this account. It cannot be undone, and it only affects this account: the other participants keep their copy. To empty a chat but keep it in the list, use whatsapp_clear_chat. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID

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 adds genuinely non-obvious behavior: the deletion is irreversible and is scoped to this account only, with other participants keeping their copy. It also notes the success-confirmation return, though that detail is minor.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and scope, followed by the irreversibility warning, the sibling disambiguation, and the return value. No filler or repetition.

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 single-parameter destructive tool with no output schema, the description covers what happens (chat and messages removed), scope of impact, reversibility, an alternative tool, and the return shape. Nothing an agent needs before invoking 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?

One parameter (chatId) with 100% schema description coverage, so the schema already carries the semantics; the description adds nothing about the identifier format. Baseline 3 is appropriate when the schema fully documents the only 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?

States a specific verb and resource ('Delete a whole chat and its messages from this account') and scopes it precisely. It is immediately distinguishable from the related but different sibling whatsapp_clear_chat, which it names explicitly.

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?

Provides an explicit alternative and the condition that selects it: 'To empty a chat but keep it in the list, use whatsapp_clear_chat.' An agent does not need to infer when to pick this tool over its closest sibling.

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

whatsapp_delete_messageA
DestructiveIdempotent

Delete a message for everyone in the chat. It cannot be undone; participants see that a message was deleted. Only works on messages this number sent (or, as group admin, on others' messages in the group). To hide a message only on this account, use whatsapp_delete_message_for_me. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
senderIdYesMessage sender JID
messageIdYesID of the message to delete

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses irreversibility ('cannot be undone'), the visible side effect for other participants, and the authorization scope (own messages or admin powers). This is exactly the 'what gets destroyed / auth needs' context the annotations alone do not supply.

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 the action and warning, then the routing alternative, then the scope constraint. Dense and well ordered; only the trailing 'Returns a success confirmation' is low-value filler.

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 destructive tool with no output schema, it covers action, irreversibility, side effects, permissions, and the return signal. Nothing an agent needs to call it safely 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 chatId, senderId, and messageId are already documented in the schema. The description adds no format or syntax detail beyond it, which matches the baseline 3 for fully covered schemas.

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 (delete a message for everyone) and immediately distinguishes itself from the sibling whatsapp_delete_message_for_me. An agent can tell these 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 Guidelines5/5

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

Explicitly names the alternative and the condition that selects it ('To hide a message only on this account, use whatsapp_delete_message_for_me'). It also states the prerequisite for using this tool: own messages, or others' messages when acting as group admin.

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

whatsapp_delete_message_for_meA
DestructiveIdempotent

Delete a message only on this account. Other participants still see it. It cannot be undone. To remove it for everyone, use whatsapp_delete_message. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
isFromMeNoWhether the message was sent by you
senderIdNoMessage sender JID
messageIdYesID of the message to delete
timestampNoMessage timestamp (ISO 8601)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds valuable context beyond those: it specifies the deletion affects only the current account, other participants still see the message, the action cannot be undone, and the tool returns a success confirmation.

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 core scope, then effect, irreversibility, and alternative. Every sentence adds distinct, necessary information with no waste.

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 destructive mutation tool with full schema coverage, complete annotations, and no output schema, the description covers all an agent needs: effect scope, side effects on others, irreversibility, sibling routing, and return confirmation.

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 fully documents all five parameters. The description adds no additional meaning or syntax for any parameter, 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?

The description states a specific verb (Delete), resource (a message), and scope (only on this account), and explicitly distinguishes itself from the sibling tool whatsapp_delete_message. An agent can immediately tell this deletes locally rather than globally.

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?

It explicitly names the alternative tool (whatsapp_delete_message) and the condition for using it: 'To remove it for everyone, use whatsapp_delete_message.' It also clarifies the local-only effect, leaving no ambiguity about when to choose this tool.

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

whatsapp_delete_statusA
DestructiveIdempotent

Delete a status this number posted, by its message ID. Contacts stop seeing it. It cannot be undone. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageIdYesStatus message ID

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true and idempotentHint=true, but the description adds valuable context beyond them: contacts stop seeing the status, the action cannot be undone, and it returns a success confirmation. It does not contradict 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?

Four short sentences, front-loaded with the core action and scope. Every sentence adds useful information about effect, reversibility, and return, with no waste.

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 one-parameter deletion tool with full schema coverage and clear annotations, the description is complete. It states the effect, irreversibility, and return confirmation; an output schema is not needed.

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 single messageId parameter is already documented in the schema. The description's phrase 'by its message ID' does not add format or syntax details beyond what the schema provides, making 3 the appropriate 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 names a specific verb (Delete) and resource (a status this number posted) and scopes it by message ID. It is clearly distinguishable from sibling delete tools like whatsapp_delete_message because it targets statuses rather than chat messages.

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 clearly frames the context: deleting a status that this number posted, by its message ID. However, it does not explicitly name alternatives or state when not to use this versus other deletion tools, leaving that to inference.

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

whatsapp_download_mediaA
Read-only

Download the file attached to a received message, using media.id from the message event. Read-only. Returns the file as binary content, with its MIME type.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMedia ID from a received message event

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 openWorldHint=true, so the explicit 'Read-only' line is redundant but consistent. The description adds useful return behavior: binary content with MIME type, which is not covered by 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 tightly written sentences with no wasted words. The purpose and return format are front-loaded.

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 download tool with no output schema and annotations covering safety, the description supplies the key missing return information (binary content plus MIME type). It omits failure modes such as expired media, but is otherwise 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 description coverage is 100%, so the schema already defines 'id' as the media ID from a received message event. The description repeats this without adding format, sourcing, or validation details 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 and resource: download the file attached to a received message. The phrase 'using media.id from the message event' and 'attached to a received message' clearly separates this from sibling send/get 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 clear context for use: a media file attached to a received message, keyed by media.id from the message event. It does not name exclusions or alternative tools, so it stops short of the top score.

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

whatsapp_edit_messageA
Idempotent

Edit the text of a message this number sent. Everyone in the chat sees it marked as edited. WhatsApp only allows it for about 15 minutes after sending. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesChat JID
textYesNew text content (max 4096 characters)
mentionsNo
messageIdYesID of the message to edit
ephemeralExpirationNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this is a mutating, non-destructive, idempotent operation. The description adds valuable behavioral details beyond annotations: everyone in the chat sees the 'edited' mark, there is a ~15-minute time window, and it returns a success confirmation. It still does not describe what happens if the window has passed or the exact failure response.

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 core action. Each sentence adds distinct information: what it does, visibility, time constraint, and return value. 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 mutation tool with annotations and no output schema, the description covers purpose, side effects, key constraint, and return behavior. It does not explain failure modes (e.g., expired window) or the effect of optional parameters like mentions and ephemeralExpiration, leaving a minor completeness 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 60%, with 'to', 'text', and 'messageId' documented in the schema, while 'mentions' and 'ephemeralExpiration' are undocumented. The description adds no parameter-level meaning beyond referring to 'text', so it does not compensate for the two undocumented optional parameters.

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: 'Edit the text of a message this number sent.' It scopes the operation to messages sent by the authenticated number, which cleanly distinguishes it from sibling tools like whatsapp_send_text and whatsapp_delete_message without needing to name them.

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 provides clear contextual guidance: the message must be one this number sent, and WhatsApp only permits editing for about 15 minutes after sending. It does not explicitly name alternatives (such as deleting and resending), but the conditions for valid use are clear.

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

whatsapp_flush_historyA
Idempotent

Re-publish the history sync messages cached for this instance as events. It does not return messages: they arrive later through the event stream. Returns an acknowledgement.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

With annotations covering the safety profile (non-read-only but non-destructive and idempotent), the description adds genuinely useful behavior: the messages are not returned and instead are emitted asynchronously to the event stream, and the call only yields an acknowledgement. This materially shapes how an agent must consume the result.

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, each carrying distinct information: the action, the asynchronous delivery caveat, and the return shape. The critical caveat is front-loaded ahead of the return 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?

For a zero-parameter, no-output-schema tool, the description is nearly self-sufficient: it explains the side effect, the asynchronous delivery channel, and the acknowledgement return. It could go further by relating to the history-sync lifecycle, 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?

The tool takes zero parameters, so the baseline is 4. The description correctly implies no input is required; nothing is lost by the empty 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 ('Re-publish the history sync messages cached for this instance as events'), which is unambiguous. It distinguishes itself from the send/get/update siblings by nature of the operation, though it never names a sibling to contrast against.

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 or when-not guidance is given. The sentence about messages arriving through the event stream hints at the calling context but never states the condition under which an agent should invoke this versus requesting messages directly.

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

whatsapp_get_blocklistA
Read-only

List the contacts this number has blocked. Read-only. To change it, use whatsapp_block_contact or whatsapp_unblock_contact. Returns the blocked JIDs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, so 'Read-only' is largely redundant, but with no output schema the statement 'Returns the blocked JIDs' usefully discloses the return shape. It does not cover ordering, pagination, or whether the list reflects a specific session, so it stops short of full 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 short sentences, front-loaded with purpose, followed by safety posture and routing, then return value. No filler or restated boilerplate.

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 zero-parameter read tool with no output schema, the description supplies purpose, safety profile, alternative routing, and the return type. Nothing an agent needs in order to call it correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 and there is no parameter meaning for the description to add or omit. Nothing in the description misleads about inputs.

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 contacts this number has blocked'), which unambiguously separates it from the mutation siblings whatsapp_block_contact and whatsapp_unblock_contact. An agent can identify this 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 Guidelines5/5

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

Explicitly marks the tool as read-only and names the two alternative tools to use when the intent is to change the blocklist. That covers both the when-to-use and the when-not-to-use case with named siblings.

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

whatsapp_get_chatA
Read-only

Get the details of one chat by its JID: name, unread state, and settings such as mute, pin, archive and disappearing timer. Read-only. Returns the chat object.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID

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 openWorldHint=true, so 'Read-only' is redundant. The description adds that it returns the chat object and enumerates fields like mute, pin, archive, and disappearing timer, which is useful context, but does not cover error behavior, auth needs, 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.

Conciseness5/5

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

Two tight sentences: the first front-loads purpose and key returned fields, the second adds read-only status and return shape. 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?

For a simple read-only getter with one documented parameter and annotations covering safety, the description gives enough: what it returns and the main fields. It could be slightly more complete by noting error behavior for an invalid JID, but no output schema exists so explaining the return object is helpful.

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 only parameter chatId is documented as 'Chat JID'. The description restates 'by its JID' but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource: get details of one chat by JID. The phrase 'one chat' distinguishes it from the sibling whatsapp_get_chats, which lists multiple chats, and the field list names what is retrieved.

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 by requiring a single JID and being read-only, but does not explicitly say when to choose this over alternatives such as whatsapp_get_chats or when not to use it. No exclusions or prerequisites are stated.

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

whatsapp_get_chat_business_profileA
Read-only

Get the WhatsApp Business profile of a chat: description, category, website, email and address. Read-only. Only business accounts have one. Returns the profile object.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover readOnlyHint and openWorldHint, but the description adds useful context beyond them: the tool only applies to business accounts (a real failure condition) and that it returns a profile object. 'Read-only' mildly restates the annotation, but the eligibility caveat is genuine added value.

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, front-loaded with the core action, then eligibility, then return shape. No filler and nothing redundant beyond the minor 'Read-only' restatement.

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 names the fields returned and the business-account precondition. It could state what happens for a non-business chat (error vs empty), which is the only meaningful gap for a single-param read 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?

One parameter with 100% schema description coverage, so the schema already documents chatId. The description adds no format or syntax detail beyond what the schema provides, making the baseline 3 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 (Get) and resource (WhatsApp Business profile of a chat) and enumerates the returned fields, which cleanly separates it from siblings like whatsapp_get_chat, whatsapp_get_my_profile, and whatsapp_get_user_profile.

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 — 'Only business accounts have one' — which tells the agent when this call is applicable, and it implies the negative case. It stops short of naming an alternative tool for non-business chats, so it is not fully explicit.

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

whatsapp_get_chat_pictureA
Read-only

Get the profile picture of a chat (a contact or a group) by its JID. Read-only. Returns the picture URL and ID; fails if the chat has no picture or it is hidden by privacy settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID

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 and openWorldHint=true, matching 'Read-only'. The description adds genuine behavioral context beyond those: it states the return content (picture URL and ID) and discloses failure modes ('fails if the chat has no picture or it is hidden by privacy settings'), which an agent cannot infer from annotations alone.

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

Conciseness5/5

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

Three short sentences, front-loaded with the primary action, then read-only status, then return/failure behavior. 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.

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 naming the return values (URL and ID) and the failure conditions. Combined with annotations covering the safety profile, 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% for the single chatId parameter. The description's 'by its JID' slightly reinforces the expected identifier format but adds little beyond the schema's own 'Chat JID' description, 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 (Get) and resource (profile picture of a chat), and clarifies the resource is 'a contact or a group'. This clearly distinguishes it from write siblings like whatsapp_set_group_picture and whatsapp_set_community_picture.

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 read-only nature and resource are clear, implying straightforward usage, but the description offers no explicit guidance on when to use this versus alternatives (e.g., whatsapp_get_chat_business_profile or whatsapp_get_user_profile) and no prerequisites. Usage is implied rather than stated.

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

whatsapp_get_chatsA
Read-only

List every chat on the connected number, both direct and group. Read-only. Use this to discover chat JIDs; use whatsapp_get_chat for one chat's details. Returns the chats and their count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so 'Read-only' merely restates structured data. The only added behavioral detail is the return shape ('the chats and their count'), with no mention of pagination, ordering, or volume limits for a listing call that could be large.

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, front-loaded with the scope and immediately followed by the safety profile and the routing rule. 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?

For a no-argument read-only listing tool with no output schema, the description covers scope, safety, the sibling alternative, and the return content. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for an empty schema applies. 'List every chat' correctly implies no filtering arguments are accepted.

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 every chat on the connected number') and scopes it ('both direct and group'). It also explicitly distinguishes itself from the sibling whatsapp_get_chat, so an agent can tell the two apart without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use ('discover chat JIDs') and names the alternative with its selecting condition ('use whatsapp_get_chat for one chat's details'). This is exactly the when/when-not/alternative routing guidance the dimension asks for.

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

whatsapp_get_communityA
Read-only

Get the details of a community by its JID: name, description, settings and announcement group. Read-only. Returns the community object.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID

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, so the 'Read-only' sentence largely restates structured data. The description does add value by naming the fields the community object carries, but it says nothing about failure behavior for invalid JIDs or the openWorldHint implications.

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 clauses, front-loaded with the action and identifier, 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 simple single-parameter read tool with full schema coverage, annotations, and no output schema, this is nearly complete — the description even previews the return fields. Only marginal gaps remain (no guidance on invalid/stale JID behavior or routing versus sibling lookup tools).

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 single parameter is fully documented as 'Community JID'. The description's 'by its JID' adds no syntax, format, or sourcing 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 (Get), resource (community), and the identifying key (JID), and enumerates what the returned object contains (name, description, settings, announcement group). This distinguishes it cleanly from siblings like whatsapp_list_communities and whatsapp_get_community_participants.

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 'by its JID' — the caller must already know the community identifier. There is no explicit statement of when to use this versus whatsapp_list_communities or whatsapp_get_community_sub_groups, nor any prerequisite guidance.

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

whatsapp_get_community_participantsC
Read-only

List the participants of a community, with their admin status. Read-only. Returns the participants.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description only repeats the read-only nature and says it returns participants, adding no behavioral context such as pagination, rate limits, auth needs, or return format.

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?

The description is short and front-loaded with the main purpose, but the sentence 'Read-only' merely repeats the annotation and 'Returns the participants' is redundant with 'List the participants'. Every sentence does not fully earn 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 simple read-only list operation with one documented parameter and safety annotations, the description is minimally adequate. However, with no output schema, it does not explain the return structure or what admin status values look like, leaving a 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 100% and the single parameter 'id' is documented as 'Community JID'. With full schema coverage, the baseline is 3 since the description adds no parameter meaning beyond what the schema already provides.

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 and resource: 'List the participants of a community, with their admin status.' It is clear what the tool does and implies the community scope, but it does not explicitly distinguish itself from the sibling group-participant tools.

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 tool versus alternatives such as whatsapp_get_group_participants or other community-management tools. The description only states what it does, not when or why an agent should select it.

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

whatsapp_get_community_sub_groupsA
Read-only

List the groups linked to a community. Read-only. Returns the groups and their JIDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds return information (groups and their JIDs), but does not mention pagination, ordering, or error behavior for invalid community JIDs.

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, front-loaded sentences with no wasted words. The core action is stated first, followed by safety and return 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 simple read-only listing tool with one fully documented parameter and no output schema, the description covers the essential action and return content. It is nearly complete, though minor details like pagination or ordering are omitted.

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 single parameter is documented as 'Community JID'. The description does not add syntax or format details beyond the schema, so the baseline score of 3 is appropriate.

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

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: list groups linked to a community. It clearly distinguishes this tool from siblings like whatsapp_get_groups or whatsapp_get_community by scoping the result to a community's sub-groups.

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 purpose implies when to use it: when an agent needs the groups belonging to a specific community. However, it does not name alternatives or state when not to use this tool versus related community/group listing tools.

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

whatsapp_get_contactA
Read-only

Get one saved contact by JID: saved name, push name and business name. Read-only. Returns the contact object.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact JID

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 and openWorldHint=true, so 'Read-only' merely restates structured data. The description does add that the returned object contains saved name, push name, and business name, but says nothing about failure modes for an unmatched JID despite openWorldHint implying external lookups.

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 no filler, front-loading the identity and scope of the operation before the return note. Nothing extraneous, though also nothing especially well-structured.

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 read tool with full annotation coverage and no output schema, the description covers identity, scope, and the main return fields. Only the not-found behavior is left unspecified, which is a minor gap at this complexity level.

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 single documented parameter ('Contact JID'), so the schema already carries the semantics. 'By JID' adds no format, validation, or lookup detail beyond the schema description.

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 resource (one saved contact), and enumerates the returned fields (saved name, push name, business name). The word 'one' implicitly distinguishes it from the sibling whatsapp_get_contacts, 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 only implied by 'Get one saved contact by JID' — the single-lookup case. It never states when to prefer this over whatsapp_get_contacts, whatsapp_get_user_profile, or whatsapp_check_user, nor what happens for an unknown JID.

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

whatsapp_get_contactsA
Read-only

List the contacts saved on the connected number. Read-only. To check whether a phone number has WhatsApp, use whatsapp_check_user. Returns the contacts and their count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 openWorldHint=true, so 'Read-only' adds little. However, the description adds return-shape information ('Returns the contacts and their count') that is not available anywhere else, since there is no output schema. It still omits any pagination or volume behavior for potentially large contact lists.

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, front-loaded with what is listed and scoped before the routing hint and the return note. Every sentence earns its place apart from the slightly redundant 'Read-only'.

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 parameterless list tool, the description covers purpose, the relevant alternative, and the return shape, which is all an agent needs given the read-only annotations. No output schema means the return note is the right level of detail.

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 tool takes zero parameters, so the baseline is 4; there is no parameter surface the description needs to compensate for. Nothing in the description misrepresents inputs.

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 contacts saved on the connected number') and scopes it to the connected account, which separates it from account-agnostic siblings. It also explicitly names a sibling it is not (whatsapp_check_user), so an agent can route 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?

Provides an explicit alternative with the condition that selects it: 'To check whether a phone number has WhatsApp, use whatsapp_check_user.' It does not address when to prefer this over whatsapp_get_contact (single) or whatsapp_sync_contacts, 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.

whatsapp_get_groupA
Read-only

Get the details of a group by JID: name, description, settings and participants. Read-only. Returns the group object.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, and the description's 'Read-only' simply restates that. It does add the useful fact that the call returns a group object containing settings and participants, but discloses no auth, rate-limit, 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.

Conciseness4/5

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

Two short sentences, front-loaded with the core action and the returned fields. Minor redundancy in the 'Read-only' sentence, which duplicates the annotation, but there is no padding.

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 read tool with no output schema and annotations covering the safety profile, the description is essentially complete: it says what it fetches and what comes back. A bit more on failure modes or JID format 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.

Parameters3/5

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

Schema coverage is 100% and the single 'id' parameter is already documented as 'Group JID' in the schema. The description's 'by JID' 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 ('Get') and resource ('details of a group') and enumerates the returned fields (name, description, settings, participants), so it is distinguishable from sibling listing tools like whatsapp_get_groups. It does not explicitly name a sibling, 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?

The phrase 'by JID' implies the lookup context, but there is no explicit when-to-use, when-not-to-use, or pointer to alternatives such as whatsapp_get_group_info_from_link or whatsapp_get_groups. 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_get_group_participantsC
Read-only

List a group's participants with their admin status. Read-only. Returns the participants.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID

TDQS

C2.9/5.0
Behavior2/5

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

The description states 'Read-only', which simply restates readOnlyHint=true already present in annotations, and adds nothing about rate limits, permissions, pagination, or failure modes. With annotations covering safety, the description contributes no behavioral context beyond what structured data provides.

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 short, front-loaded sentences. The final sentence 'Returns the participants' largely duplicates the opening clause, so it is slightly redundant rather than wasteful.

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 one-parameter read tool with no output schema, the description is minimally adequate: it indicates the returned entities and their admin-status field. It omits any indication of result ordering or whether the caller is included, but nothing critical to 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?

There is a single parameter and schema description coverage is 100% ('Group JID'), so the schema already carries the semantic burden. The description adds no format or identifier guidance beyond it, making 3 the appropriate baseline.

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 a group's participants') plus the payload detail ('with their admin status'), which cleanly separates it from write-side siblings like whatsapp_update_group_participants. It stops short of naming an alternative, but the purpose itself is unambiguous.

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

Usage Guidelines2/5

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

No when-to-use, when-not-to-use, or alternative tooling is mentioned. The agent must infer that this is the read counterpart to update_group_participants purely 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_get_group_requestsA
Read-only

List the pending requests to join a group that has join approval on. Requires admin rights. Read-only. Returns the requesting user JIDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover readOnlyHint=true and openWorldHint=true, so the description's 'Read-only' is redundant, but it adds real value beyond the annotations: the admin-rights authorization requirement and the return shape (requesting user JIDs). It does not mention pagination, result limits, or behavior on a non-approval group, 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?

Four short sentences with zero filler, front-loaded with the core action and followed by the precondition, safety profile, and return value. Nothing is wasted and nothing important 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?

There is no output schema, and the description compensates by naming the returned data (requesting user JIDs), along with the auth requirement and read-only nature. Missing only edge-case behavior (empty results, pagination, non-approval groups) to be 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 description coverage is 100% ('Group JID' is documented in the schema), so the baseline is 3. The description only restates 'a group' and adds no format, JID syntax, or scoping detail 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?

States a specific verb (List), a specific resource (pending requests to join a group), and the precondition that scopes it (groups with join approval enabled). The verb contrast with the sibling whatsapp_update_group_requests is clear enough that an agent can pick correctly 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?

It gives a prerequisite ('Requires admin rights') which is genuinely useful, but never states when to choose this over the sibling whatsapp_update_group_requests (approve/reject) or what happens when the group has join approval off. Usage is implied by the verb rather than spelled out.

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

whatsapp_get_groupsA
Read-only

List the groups the connected number belongs to. Read-only. Use this to find group JIDs (ending in @g.us). Returns the groups and their count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes safety, and 'Read-only' merely restates it. The description does add useful behavioral detail by disclosing the return content (groups plus count) and JID format, which compensates slightly 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?

Three short sentences, front-loaded with the core action. The one-word 'Read-only' sentence is redundant against the annotation, a minor waste.

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 parameters and no output schema, the description carries the burden of describing returns, which it does adequately (groups and count, JID format). A small gap remains around ordering or pagination for accounts with many groups.

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 tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 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 (List) and resource (groups) with a clear scope: groups the connected number belongs to. This clearly separates it from whatsapp_get_group (single group), whatsapp_get_group_participants, and whatsapp_list_communities.

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 use case -- finding group JIDs ending in @g.us -- which routes the agent here rather than to single-group lookups. It does not state explicit exclusions or name an alternative tool, but the context is clear.

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

whatsapp_get_my_profileA
Read-only

Get the connected number's own profile: name, about text and picture. Read-only. Returns the profile.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the 'Read-only' statement is redundant. The description adds some value by listing the return fields (name, about text, picture), but it does not disclose authentication requirements, rate limits, or any other behavior 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?

Three short sentences with zero waste, front-loading the resource and its returned fields. The information is tightly scoped to what an agent needs for a simple zero-parameter getter.

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 zero-parameter read-only profile getter with annotations covering safety, no output schema, and full schema coverage, the description is complete: it states what is returned and that the operation is read-only. Nothing essential is missing.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline score is 4. The empty input schema is fully covered, and the description appropriately does not discuss parameters.

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: 'Get the connected number's own profile: name, about text and picture.' The word 'own' distinguishes it from sibling tools like whatsapp_get_user_profile and whatsapp_get_chat_business_profile, so an agent can identify the correct tool 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 Guidelines3/5

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

The phrase 'connected number's own profile' implies the usage context, but the description does not explicitly state when to use this tool versus alternatives such as whatsapp_get_user_profile. There are no exclusions or alternative-routing instructions, leaving usage to inference.

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

whatsapp_get_newsletterA
Read-only

Get a channel's details by JID: name, description and follower count. Read-only. Returns the channel object.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNewsletter JID

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, and the description's 'Read-only' merely restates the annotation rather than adding context. It does add a rough shape of the return ('Returns the channel object'), but says nothing about failure behavior for an invalid JID or whether the JID must be a joined/subscribed channel.

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 short sentences, front-loaded with the action and returned fields; only the redundant 'Read-only' sentence adds no value given the annotation.

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 one-parameter read tool with full schema coverage and annotations carrying the safety profile, the description covers what an agent needs to call it correctly; no output schema exists, so a short return hint 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?

Single parameter with 100% schema coverage; the schema already documents 'id' as 'Newsletter JID'. The description's 'by JID' adds no new syntax, format, or constraint information 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 and resource ('Get a channel's details') plus the fields returned (name, description, follower count), and 'by JID' implicitly separates it from whatsapp_get_newsletter_by_invite. However, it uses 'channel' while the sibling tool names use 'newsletter', which could cause a brief hesitation in mapping this tool to the newsletter family.

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 'by JID' qualifier hints at when this is the right lookup (you already have the JID, unlike whatsapp_get_newsletter_by_invite or whatsapp_list_newsletters), but no alternative is named and no explicit when-to-use or when-not-to-use guidance is given.

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

whatsapp_get_newsletter_by_inviteA
Read-only

Look up a channel by its invite code, without following it. Read-only. Returns the channel info and JID.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesNewsletter invite code

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description goes beyond them by confirming the non-subscribing behavior ('without following it') and by disclosing the return payload (channel info and JID) in the absence of an output schema.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and scope, then the side-effect disclaimer, then the return value. Nothing is wasted and no sentence 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?

For a one-parameter read tool with no output schema, the description covers the action, the non-following constraint, and the returned fields — enough to invoke it correctly. It stops short of naming the sibling lookup tool an agent might confuse it with.

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 and a single parameter, the schema already defines 'code' as the newsletter invite code. The description repeats the invite-code concept but adds no format, length, or validation detail 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.

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 resource (channel/newsletter) keyed on an invite code, which separates it from whatsapp_get_newsletter (JID-based) and whatsapp_list_newsletters. The only wrinkle is calling it a 'channel' while the tool name says newsletter, but the intent 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 Guidelines3/5

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

'Without following it' implies the reconnaissance use case (preview before subscribing, per whatsapp_set_newsletter_subscription), which is genuine guidance. However, it never names the alternative lookup tool or states when to prefer this over whatsapp_get_newsletter, so the routing is left implicit.

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

whatsapp_get_pair_codeA
Read-only

Get an 8-character pairing code for a phone number, to link it without scanning a QR (WhatsApp, Linked devices, Link with phone number). Only works while logged out. Returns the code.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPhone number (7-15 digits)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations supply readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely non-derivable behavior: the logged-out-only precondition and the fact that it returns the code. It does not cover expiry or failure modes of the code, keeping it below 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?

A single dense sentence front-loads the verb and the precondition-relevant context, with zero filler. Every clause (format, purpose, alternative, precondition, return) 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 compensates by stating 'Returns the code.' Combined with annotations carrying the safety profile and the explicit logged-out precondition, an agent has enough to call it correctly. Missing details like code validity window or error behavior keep it from 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 100% and there is a single parameter, so the schema already documents 'phone' with its 7-15 digit constraint. The description only restates 'for a phone number' and adds no format or edge-case detail beyond the schema, matching the baseline 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?

States a specific verb (Get) and resource (8-character pairing code for a phone number) with a concrete format detail. The phrase 'to link it without scanning a QR' distinguishes it from the sibling QR-code tools (whatsapp_get_qr_code / whatsapp_get_qr_code_image) 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?

Provides the decisive precondition 'Only works while logged out,' which is exactly the kind of when-to-use signal an agent needs. It implies the QR path as the alternative via 'without scanning a QR' but does not name the sibling tool explicitly, so it falls just short of the 5 bar.

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

whatsapp_get_privacy_settingsA
Read-only

Get the account's privacy settings: who can see last seen, profile picture, about, groups and read receipts. Read-only. Returns the settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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, so the description's "Read-only" restatement carries no additional information. "Returns the settings" adds marginal transparency about the response's nature, but there is no mention of permission requirements, whether values are account-wide, or rate 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 scope front-loaded. Minor redundancy: "Read-only" duplicates the annotation, and "Returns the settings" is near-filler, but the description remains tight overall.

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 parameters and no output schema, the description's enumeration of returned setting categories is exactly the detail an agent needs to decide whether this tool satisfies an information need. Sufficient, though it could note the setting-value domain (e.g. everyone/contacts/nobody).

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 tool takes no parameters, so the baseline is 4. The description helpfully identifies which setting categories are exposed, which is the only semantic content a zero-parameter read tool can offer.

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?

Specific verb+resource ("Get the account's privacy settings") with the covered sub-settings enumerated (last seen, profile picture, about, groups, read receipts), so an agent knows exactly what this retrieves. It does not explicitly name the write counterpart whatsapp_set_privacy_setting, 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 Guidelines3/5

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

The read-only framing implies the appropriate use case (inspecting current privacy configuration) and the sibling naming convention makes the setter the obvious alternative for changes. However, no explicit when-to-use or when-not guidance is given, leaving usage to inference.

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

whatsapp_get_qr_codeA
Read-only

Get the login QR code as a text string, to pair a phone with this instance. Only works while logged out, and each code expires within about a minute. For an image, use whatsapp_get_qr_code_image; to pair by phone number, use whatsapp_get_pair_code. Returns the QR string.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely useful behavior beyond that: the logged-out precondition and the ~1 minute expiry window for each code, which materially affects call timing. It does not describe error behavior when called while logged in, 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?

Four short sentences, all earning their place: purpose, precondition, expiry, and two alternatives. Purpose and precondition are front-loaded ahead of the routing hints.

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 no-parameter tool with no output schema, the description covers what the return is ('the QR string'), when it is valid, and how long it lasts. An agent has everything needed to call it correctly and interpret timing.

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 tool takes zero parameters, so the baseline is 4. The description correctly notes the string return value and adds nothing spurious about nonexistent inputs.

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 ('Get the login QR code as a text string') plus the reason ('to pair a phone with this instance'). It explicitly distinguishes itself from whatsapp_get_qr_code_image and whatsapp_get_pair_code, so an agent can route 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 Guidelines5/5

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

Gives an explicit precondition ('Only works while logged out') and names both alternatives with the condition that selects each: image output vs pairing by phone number. Nothing is left to inference.

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

whatsapp_get_qr_code_imageA
Read-only

Get the login QR code as a PNG image, to scan from WhatsApp on the phone (Linked devices). Only works while logged out, and each code expires within about a minute. Returns the image.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 and openWorldHint=true, so safety is covered. The description adds genuinely useful behavioral context beyond the annotations: the precondition (must be logged out) and the short-lived nature of the credential ('each code expires within about a minute'), which affects how the caller must sequence and consume the result.

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 essential facts (what it returns, how it's used, the precondition, the expiry) are all front-loaded before the closing redundancy about the return 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?

For a no-param, no-output-schema tool the description covers what is returned (a PNG), how to use it (scan from the phone), and the constraint that it only functions while logged out. Minor gap: it doesn't mention how to handle the returned binary or that a fresh call is needed after expiry.

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 tool takes zero parameters and the schema is empty with 100% coverage, so there is nothing for the description to disambiguate; the baseline for a no-param tool 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+resource ('Get the login QR code') and specifies the output medium (PNG image), which distinguishes it from the sibling whatsapp_get_qr_code that presumably returns the code in text form. It does not explicitly name that sibling, so the 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 Guidelines4/5

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

Gives a clear precondition — 'Only works while logged out' — and the intended workflow ('to scan from WhatsApp on the phone (Linked devices)'). It does not, however, route the agent between this tool and the alternatives whatsapp_get_qr_code / whatsapp_get_pair_code when the linking flow fails or a different code format is wanted.

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

whatsapp_get_session_statusA
Read-only

Check whether the WhatsApp session is connected and logged in. Read-only. Call it first when other tools fail, to tell a logged-out session from another error. Returns the connection and login state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the diagnostic role and the fact it returns connection and login state, which is useful context. It does not describe return format beyond that, 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 short sentences, front-loaded with purpose, then behavior, then return value. Every sentence earns its place 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?

Given no output schema exists, the description says what is returned (connection and login state), which is sufficient for a simple diagnostic tool. It could be fuller about return values, but the core is complete for this narrow purpose.

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?

Zero parameters, so baseline is 4; the description also clarifies there is no input needed and tells what state is returned, which exceeds the baseline for a no-arg tool.

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 (check) and resource (WhatsApp session connection and login state). Clear and distinguished from all 100+ siblings, none of which report session health.

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 prescribes when to call: 'Call it first when other tools fail, to tell a logged-out session from another error.' This is a clear diagnostic/alternative-use condition, not just implied context.

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

whatsapp_get_status_privacyA
Read-only

Get who can see this number's status updates. Read-only. Returns the privacy settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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, so the description's 'Read-only' is largely redundant. It adds the return content ('privacy settings'), which is mild added context, but discloses nothing about scope, auth, or format beyond the safety profile.

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

Conciseness5/5

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

Three short, front-loaded sentences with no filler. The purpose is stated first 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 zero-param, read-only tool with annotations covering safety and no output schema, the description tells the agent what it retrieves and that it is safe. Only the exact shape of the returned settings is left 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.

Parameters4/5

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

The tool takes zero parameters and schema coverage is 100%, so there is nothing for the description to compensate for. Baseline of 4 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 resource (who can see this number's status updates), and clarifies the return (privacy settings). It does not, however, distinguish itself from the sibling whatsapp_get_privacy_settings, which an agent could easily confuse it with.

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 exclusions, and no mention of alternatives such as whatsapp_get_privacy_settings or whatsapp_set_privacy_setting. The agent must infer the context entirely.

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

whatsapp_get_user_profileA
Read-only

Get another user's public profile by phone number: name, about text, picture and business status, as far as their privacy settings allow. Read-only. Returns the profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPhone number (e.g. 1234567890)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds valuable context beyond annotations by noting the privacy-settings limitation ('as far as their privacy settings allow') and that it may return partial data. It restates 'Read-only' which is redundant with the annotation, but the privacy caveat 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.

Conciseness3/5

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

The description is a single sentence plus two fragments ('Read-only. Returns the profile.'). The fragments are somewhat redundant with annotations and the opening sentence. The core info is front-loaded and clear, but the fragment structure feels slightly disorganized.

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 tool with one parameter and no output schema, the description covers what is returned and the privacy constraint. It does not explain error cases (e.g., unknown number) or whether it requires the user to be a contact, but it is largely 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 coverage is 100% and the single 'phone' parameter is documented with an example in the schema. The description adds that the lookup is by phone number, aligning with the schema but not extending it. Baseline 3 is appropriate when the schema fully documents the 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?

States a specific verb and resource ('Get another user's public profile') and enumerates the returned fields (name, about text, picture, business status). It is clearly distinct from whatsapp_get_my_profile and whatsapp_get_chat_business_profile because it targets another user via phone number.

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 case (fetching a stranger's public profile by phone number) but does not explicitly state when to use this versus siblings like whatsapp_get_contact or whatsapp_check_user. Usage is inferable but not guided.

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

whatsapp_join_group_with_inviteB

Accept a group invite that was received as a direct message (not a link), using the fields from that invite message. Other participants see this number join. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesInvite code
groupIdYesGroup JID
inviterIdYesInviter JID
expirationNoInvite expiration timestamp

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already cover the safety profile (destructiveHint=false, readOnlyHint=false, idempotentHint=false). The description adds a genuinely new behavioral fact: 'Other participants see this number join.' That is real side-effect disclosure. However it omits error cases (expired code, invalid inviter) and confirmation detail, so a 3 is warranted.

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 tight sentences, front-loaded with the scope distinction and no wasted words. The mention of 'Returns a success confirmation' is slightly redundant but harmless.

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?

Covers purpose, mechanism distinction, and the visible side effect. But with no output schema, the description does little to explain the return beyond 'a success confirmation', and error/expiry behavior for a join operation is not addressed.

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 four parameters are documented in the schema itself. The description adds only that the code/groupId/inviterId come from a received invite message, with no syntax or format detail beyond the schema. Baseline 3 is correct.

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 ('Accept a group invite') and crucially distinguishes the mechanism: 'received as a direct message (not a link)'. This differentiates it from the sibling whatsapp_join_group_with_link, though it doesn't name 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?

The '(not a link)' parenthetical implies when to use this over the link-based sibling, and the description says to use 'the fields from that invite message'. But it never explicitly names whatsapp_join_group_with_link or states exclusions outright, leaving routing partly to inference.

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

whatsapp_leave_communityA
DestructiveIdempotent

Leave a community and all its groups. Other members are notified, and rejoining needs a new invite. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds genuinely useful behavior: other members are notified, rejoining requires a new invite (i.e., the action is effectively irreversible without outside help), and it returns a success confirmation.

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, zero filler, with the core action front-loaded ahead of the consequences.

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, multi-effect operation with no output schema, the description covers the key side effects (notifications, rejoin barrier) and the return shape. It only lacks guidance on when this is the right call relative to whatsapp_leave_group.

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, and schema coverage is 100% with the 'Community JID' description already in the schema (the output also lacks a description). The description adds nothing about the id field, 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 ('Leave a community and all its groups'), and the scope phrase 'and all its groups' implicitly separates it from the sibling whatsapp_leave_group, which acts on a single group.

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 explains consequences but never says when to use this tool versus whatsapp_leave_group or when not to use it. No prerequisites or alternatives are named.

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

whatsapp_leave_groupA
DestructiveIdempotent

Leave a group. Other participants are notified, and rejoining needs a new invite. If this number is the only admin, WhatsApp picks another one. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID

TDQS

A4.1/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 safety is covered structurally. The description adds genuinely new behavioral context: other participants get notified, rejoining requires a fresh invite, and an admin role is auto-reassigned if this number is the sole admin. It stops short of explaining failure modes or what happens if the id is invalid.

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, zero filler, with the core action front-loaded and the side effects and edge case following 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?

With no output schema, the description correctly closes the loop by stating a success confirmation is returned, and it covers the side effects and admin edge case an agent should anticipate for a destructive group operation.

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 single id parameter is fully documented in the schema as 'Group JID' (100% coverage), so the schema carries the semantics. The description adds nothing about the parameter beyond what is already structured; 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 (leave) and resource (group) immediately, which cleanly separates it from the nearby whatsapp_leave_community and the group-management siblings like update_group_participants.

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 name and the action is unambiguous, but the description never states when to use this versus alternatives (e.g. leave_community) or any precondition on the id. The note about needing a new invite to rejoin is a consequence, not 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_list_communitiesA
Read-only

List the communities the connected number belongs to. Read-only. Returns the communities and their JIDs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 and openWorldHint=true, so the safety profile is covered. The description adds useful return context ('returns the communities and their JIDs'), but it does not discuss pagination, authentication, or ordering. Repeating 'Read-only' adds little beyond the annotation.

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

Conciseness5/5

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

The description is three short sentences with no wasted words. The core action is front-loaded, and the read-only qualifier and return summary follow efficiently.

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 zero-parameter read-only list tool with annotation coverage and no output schema, the description is nearly complete: it states what is listed and what is returned. It could mention whether results are paginated or include additional metadata, but the essential information for calling it correctly 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?

The tool has zero parameters, so the schema provides no parameter semantics to explain. The baseline for a no-parameter tool is 4, and the description does not need to compensate for any parameter documentation 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 states a specific verb ('List') and resource ('communities'), scoped to those the connected number belongs to. It is distinguishable from single-community tools like whatsapp_get_community, but it does not explicitly name any sibling alternative or contrast behavior.

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 guidance, no prerequisites, and no mention of alternatives such as whatsapp_get_community for detailed community data. Usage is only implied by the tool name and the phrase 'belongs to'.

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

whatsapp_list_newslettersA
Read-only

List the channels (newsletters) this number follows or owns. Read-only. Returns the channels and their JIDs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds the return shape ('the channels and their JIDs'), which matters because there is no output schema — useful 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 short sentences, zero waste, and the scoping constraint and read-only nature are front-loaded before the return note.

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 zero-parameter read tool with annotations covering safety and the description covering the return payload, nothing essential is missing. Slightly short of 5 only because no guidance on combining it with the per-channel getters is offered.

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 per the rubric the baseline is 4. There is nothing parameter-related the description needs to explain.

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 (channels/newsletters), and explicitly disambiguates the synonym 'channels (newsletters)'. An agent can distinguish it from whatsapp_get_newsletter and whatsapp_list_communities without opening a schema.

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

Usage Guidelines3/5

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

The scope 'this number follows or owns' implies when it applies, but no alternatives are named (e.g., get_newsletter for a single channel) and no prerequisites or exclusions are given. Usage is implied 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_logoutA
DestructiveIdempotent

Log this instance out of WhatsApp and unlink it from the phone. Every other tool stops working until the number is paired again with a QR or pair code. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds meaningful context beyond that: the blast radius on all other tools and the recovery path via QR/pair code. It omits auth/prerequisite requirements, keeping it out of 5 territory.

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, front-loaded with the action, then the consequence, then the return value. No filler or restatement of the name 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?

With no output schema, the description usefully states the return value ('a success confirmation') and discloses the post-logout state and recovery route. For a zero-param destructive terminal action this is nearly complete; only preconditions/permissions are unaddressed.

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 the baseline is 4 per the rubric; there is no parameter surface for the description to explain or omit.

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 ('Log this instance out of WhatsApp and unlink it from the phone') with unambiguous scope. No sibling tool covers logout, so there is nothing to disambiguate against; it falls just short of a 5 only because it names no alternative or contrast case.

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 describes the operational consequence ('Every other tool stops working until the number is paired again') and implicitly points at the re-pairing tools (get_qr_code, get_pair_code), but never explicitly says when to invoke this tool or what must precede it. Usage is implied rather than stated.

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

whatsapp_mark_chat_as_readA
Idempotent

Mark a whole chat as read or unread on this account. To send a read receipt for one message, use whatsapp_mark_message_read. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
readYesMark as read (true) or unread (false)
chatIdYesChat JID

TDQS

A4/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 externally. The description adds a useful return note ('Returns a success confirmation') and the state-change semantics of read/unread, but says nothing about account/auth requirements for 'this account' or any rate limits.

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

Conciseness5/5

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

Three short sentences, each earning its place: the action, the disambiguation from the sibling, and the return value. Front-loaded with the core purpose and 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 two-parameter mutation with full schema coverage and no output schema, the description covers purpose, the sibling boundary, and the success return. Only minor gaps remain (no mention that an unread marking may re-trigger unread counts, or any auth context for 'this account').

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 are documented there (read = true/false, chatId = Chat JID), so the schema does the heavy lifting. The description only reinforces that the boolean toggles chat-level read state; it adds no format or validation 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 concrete verb+resource plus scope: 'Mark a whole chat as read or unread on this account.' The word 'whole chat' plus the explicit contrast with whatsapp_mark_message_read makes the boundary between the two tools 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?

Names the alternative tool (whatsapp_mark_message_read) and the condition that selects it ('for one message'), which is exactly the kind of routing an agent needs among ~90 siblings. It stops short of stating prerequisites or edge cases (e.g. group vs. individual chats), so it is clear context rather than 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_mark_message_readA
Idempotent

Send a read receipt for a message, so the sender sees it as read (blue ticks, if their privacy settings allow). To mark a whole chat, use whatsapp_mark_chat_as_read. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
senderIdYesMessage sender JID
messageIdYesMessage ID
receiptTypeYesReceipt type

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly=false, idempotent=true, destructive=false). The description adds the visible effect ('blue ticks') and a privacy caveat, plus mention of a success confirmation—useful context for a mutation. It does not detail side effects like rate limits or idempotency mechanics, but that is minor given 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 sentences, front-loaded with the primary action and immediately followed by the alternative. Every sentence earns its place 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 four-param mutation with full schema coverage and annotations, the description covers purpose, alternative, effect, and return. No output schema exists, so mentioning the success confirmation suffices. It is largely complete, though idempotency is only in 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 the schema documents all four parameters, including an enum for receiptType. The description adds no parameter syntax or format details beyond what the schema provides, making 3 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?

States a specific verb and resource ('Send a read receipt for a message') and distinguishes from the sibling 'whatsapp_mark_chat_as_read' by name. An agent can tell exactly what this does versus the whole-chat variant.

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 to 'whatsapp_mark_chat_as_read' for marking a whole chat, providing a clear when-to-use alternative. No further exclusions are needed.

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

whatsapp_mute_chatA
Idempotent

Mute a chat's notifications for a duration, or unmute it. Only affects this account; the other side is not told. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
durationYesMute duration

TDQS

A3.8/5.0
Behavior4/5

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

Annotations carry the safety profile (idempotent, non-destructive, open-world). The description adds genuinely useful context beyond them: 'Only affects this account; the other side is not told' discloses the local-only scope, and the return confirmation is noted even though 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.

Conciseness5/5

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

Three short, front-loaded sentences with no filler. Each sentence carries distinct information: action, scope/side-effect, and return behavior.

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 2-parameter tool with full schema coverage and rich annotations, the description covers purpose, side effects and return adequately. The only gap is lack of sibling differentiation, which is minor given the clear 'chat' resource.

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 an enumerated duration, so the schema does the heavy lifting. The description's phrase 'or unmute it' marginally clarifies that the 'off' enum value means unmute, but otherwise adds little 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 (mute/unmute) and resource (a chat's notifications), and the dual nature (mute or unmute) is clear. It does not explicitly differentiate itself from the sibling whatsapp_mute_newsletter, though the 'chat' resource is unambiguous.

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

Usage Guidelines3/5

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

Usage is implied by the duration enum semantics ('off' = unmute) rather than stated. There is no explicit when-to-use guidance, no mention of prerequisites, and no routing to sibling tools like archive_chat or mute_newsletter.

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

whatsapp_mute_newsletterB
Idempotent

Mute or unmute a channel's notifications on this account. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNewsletter JID
muteYesTrue to mute, false to unmute

TDQS

B3.2/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 mutation and idempotency characteristics are covered. The description adds useful return context ('Returns a success confirmation'), which is valuable since no output schema exists, but says nothing about permission requirements or side effects.

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

Conciseness4/5

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

Two short sentences with zero padding; the action is front-loaded and the return note follows. Appropriately sized for a simple toggle tool.

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 2-parameter toggle with no output schema, the description covers purpose and return behavior adequately. It omits disambiguation from whatsapp_mute_chat and what a 'channel' JID refers to, leaving a small gap an agent might need.

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 (id=Newsletter JID, mute=boolean) are fully documented in the schema. The description adds no additional parameter semantics, 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 pair (mute/unmute) and resource (a channel's notifications), and scopes it to 'this account'. The resource term 'channel' rather than 'newsletter' is slightly ambiguous against siblings like whatsapp_mute_chat, but the intended target is still clear from the tool name.

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, no mention of the closely related sibling whatsapp_mute_chat, and no exclusions or prerequisites. 'on this account' is a minor scope note but does not tell the agent when to pick this over alternatives.

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

whatsapp_pin_chatA
Idempotent

Pin a chat to the top of the chat list, or unpin it. Only affects this account. To pin a message inside a chat, use whatsapp_pin_message. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
pinnedYesPin or unpin

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare mutation (readOnlyHint=false), idempotence, and non-destructiveness, so the bar is lower. The description adds useful behavioral context beyond annotations: it scopes the effect to 'this account' and states that it 'Returns a success confirmation,' which tells the agent what to expect from the call. It does not cover permissions or rate limits, but those are minor for this simple operation.

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 waste. The primary action is front-loaded, the scope and alternative follow immediately, and the return behavior closes efficiently.

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 two-parameter toggle with rich annotations and no output schema, the description is complete. It covers the action, the account scope, the key alternative tool, and the response shape, leaving no meaningful gap for an agent to call it correctly.

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

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 fully documents both parameters ('Chat JID' and 'Pin or unpin'). The description adds no syntax, format, or edge-case detail beyond what is already in 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.

Purpose5/5

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

States a specific verb and resource ('pin a chat to the top of the chat list, or unpin it') and explicitly distinguishes itself from the sibling whatsapp_pin_message by naming it and explaining the difference. An agent can tell exactly what this tool does and what it does not.

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?

Provides an explicit alternative for the most likely confusion: 'To pin a message inside a chat, use whatsapp_pin_message.' It also clarifies the scope of the effect ('Only affects this account'), so the agent knows when this tool is appropriate versus its message-level sibling.

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

whatsapp_pin_messageA
Idempotent

Pin or unpin a message in a chat, optionally for a limited time. Everyone in the chat sees the pin. To pin a whole chat in the list, use whatsapp_pin_chat. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
pinnedNoTrue to pin, false to unpin
senderIdYesMessage sender JID
messageIdYesMessage ID
pinExpirationNoPin expiration (e.g. 24h, 7d, 30d)

TDQS

A4.4/5.0
Behavior4/5

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

Adds valuable context beyond annotations: everyone in the chat sees the pin (social/visibility behavior), and supports time-limited pinning. The success confirmation is stated. Annotations cover the safety profile (idempotent, non-destructive, open world), so remaining gaps are minor.

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: action, visibility note, sibling routing, and return value. Front-loaded with the core action; zero waste.

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 5-param mutation tool with full schema coverage and annotations covering safety, the description is nearly complete. It could explain unpin semantics or default pin duration, 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%, so the schema already documents all five parameters (including pinned flag and pinExpiration format). The description only hints at 'optionally for a limited time,' adding little beyond what the schema provides. 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 (pin/unpin), resource (message in a chat), and disambiguates from the near-identically-named sibling whatsapp_pin_chat by naming it directly. An agent can immediately distinguish the two.

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: 'To pin a whole chat in the list, use whatsapp_pin_chat.' This is exactly the alternative-selection guidance needed given the confusingly similar sibling name.

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

whatsapp_post_image_statusA

Post an image status (story) from base64 data or a public URL, with an optional caption, visible to allowed contacts for 24 hours. Not idempotent. Returns the status message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of the image
dataNoBase64-encoded image data
captionNoCaption
mimeTypeNoMIME type

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 (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false), so 'Not idempotent' is largely redundant. However, the description adds genuinely new behavioral context: the 24-hour visibility window to allowed contacts and the fact that the status message ID is returned, which matters since 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?

A single tight sentence, front-loaded with the action and resource, with the source variants, caption, audience, lifetime, idempotency and return value packed in without waste.

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 names the returned status message ID, and it covers visibility, lifetime, and the two input modes. It does not clarify that at least one of url/data must be supplied despite zero required parameters, which leaves 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 100%, so all four parameters are already documented, making 3 the baseline. The description's 'from base64 data or a public URL' adds a small amount of disambiguation between the url and data parameters but nothing about mimeType or caption semantics.

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 ('Post an image status (story)'), names both accepted input sources, and specifies the caption and audience/expiry. It is clearly distinguishable from siblings like whatsapp_post_text_status and whatsapp_post_video_status 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 Guidelines3/5

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

The description implies when to use it (posting an image story) and contrasts the two input sources, but never explicitly routes the agent against alternatives such as post_text_status, post_video_status, or send_image. No when-not guidance is provided, 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_post_text_statusA

Post a text status (story), visible to contacts allowed by the status privacy settings for 24 hours. Not idempotent. Returns the status message ID, which whatsapp_delete_status needs.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesStatus text content

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotentHint=false, so 'Not idempotent' largely restates structured data, but the description adds real value beyond it: the 24-hour ephemeral lifetime, the visibility scope tied to status privacy settings, and the returned status message ID. These are behavioral facts the annotations cannot 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, front-loaded with the action and scope; the cross-reference to whatsapp_delete_status is placed last where it belongs. 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?

Compensates for the absent output schema by naming the return value, and covers lifetime and audience scope. Only minor gaps remain, such as any auth/session requirement for posting.

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 ('text') with 100% schema description coverage, and the description adds no formatting, length, or encoding guidance beyond the schema. Under the high-coverage baseline, the schema carries this dimension.

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 (post a text status/story) with enough scoping detail to separate it from the sibling media variants whatsapp_post_image_status and whatsapp_post_video_status. An agent can route on the name plus the 'text' qualifier 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 (status visible to privacy-permitted contacts, expires in 24 hours) and implies the intended use case, but never explicitly states when to prefer this over the image/video status siblings or any prerequisite such as an active session.

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

whatsapp_post_video_statusA

Post a video status (story) from base64 data or a public URL, with an optional caption, visible to allowed contacts for 24 hours. Not idempotent. Returns the status message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of the video
dataNoBase64-encoded video data
captionNoCaption
mimeTypeNoMIME type

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=false, destructive=false and openWorld=true, and the description reinforces non-idempotency plus adds genuinely new behavior: the 24-hour expiry, audience scope (allowed contacts), and the return value (status message ID). That is useful context beyond the annotations, though it doesn't cover failure modes or size/format limits for large base64 payloads.

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, front-loaded with the action and media type, followed by the source, caption, visibility, idempotency and return-value facts. 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 4-parameter tool with no output schema and 0 required parameters, the description supplies the essentials: source options, caption, visibility, non-idempotency, and the returned ID. It stops short of clarifying the url/data exclusivity or any media constraints, which leaves a small gap for an agent assembling the call.

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 adds the important nuance that url and data are alternative sources for the video and that caption is optional, but does not resolve whether the two source parameters are mutually exclusive or which wins if both are supplied.

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 ('Post a video status (story)') and immediately distinguishes itself from the text/image status siblings by naming the media type. It also clarifies accepted sources (base64 data or public URL) and the optional caption, so an agent knows exactly what this tool does.

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

Usage Guidelines4/5

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

Provides clear context for use: visibility is restricted to allowed contacts and lasts 24 hours, matching the ephemeral-status semantics of the sibling post_text_status/post_image_status tools. It does not explicitly say 'use this instead of post_text_status when the payload is a video,' but the media-type framing makes the routing obvious.

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

whatsapp_reject_callA
Idempotent

Reject an incoming WhatsApp call, using the callId and callerId from the call_offer event. The caller sees the call as declined. Only works while the call is still ringing. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
callIdYesCall ID from the call event
callerIdYesJID of the caller

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this as a non-readOnly, idempotent, non-destructive write. The description adds genuinely supplementary behavior: the caller visibly sees the call declined and the operation fails outside the ringing window. It also notes the success-confirmation return.

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: action first, then parameter origin, then the timing constraint and return. Every sentence earns its place with zero 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 two-parameter mutation tool with no output schema, the description covers the action, parameter origin, timing precondition, and return shape. It gives enough for correct invocation, though it could note the idempotency guarantee already implied by annotations.

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 sourcing value by tying both IDs to the call_offer event, helping the agent locate the correct values rather than treating them as arbitrary strings.

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 ('Reject an incoming WhatsApp call') with scope and no ambiguity. No sibling tool overlaps with call rejection, so an agent can select it unambiguously from the list.

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 for use ('using the callId and callerId from the call_offer event') and a hard precondition ('Only works while the call is still ringing'). It does not name an explicit alternative (e.g., answering), but the usage window is well-defined.

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

whatsapp_request_chat_messagesA

Ask WhatsApp for older messages of a chat, starting before a given message. It does not return messages: they arrive later as history sync events, if the phone provides them. Returns an acknowledgement only.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of messages to request (default 50, max 500)
chatIdYesChat JID
lastMessageIdYesID of the last known message
lastMessageSenderIdYesSender of the last known message

TDQS

A4.5/5.0
Behavior5/5

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

Discloses behavior the annotations cannot convey: the call does NOT return messages, the actual messages arrive asynchronously as history-sync events, and they only arrive 'if the phone provides them'. This is exactly the context an agent needs to avoid mis-handling the acknowledgement as a result 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?

Three short sentences, front-loaded with the action, then the async caveat, then the return shape. Nothing is padded and the most surprising fact (no messages returned) is stated early.

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 carries the return-value burden — and it does so explicitly ('Returns an acknowledgement only'), while also explaining the real delivery channel. An agent has everything needed to call it and interpret the response.

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 count, chatId, lastMessageId and lastMessageSenderId. The description adds only the 'starting before' framing for the anchor, which is marginal value over structured data. 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 ('Ask WhatsApp for older messages of a chat') plus the exact anchor point ('starting before a given message'). No sibling tool performs history backfill, so it is unambiguously distinguishable from the get/send/mutate 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?

The context for use is clear: recover older messages of a known chat when you have a last-known message reference. It does not name any alternative sibling or state exclusions, but no sibling competes for this job, so the gap is minor.

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

whatsapp_send_audioA

Send an audio file as a regular audio attachment, from base64 data or a public URL. For a voice note that plays like a recorded message, use whatsapp_send_voice. Not idempotent. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID
urlNoURL of the audio file
dataNoBase64 encoded audio data
replyToNoMessage ID to reply to
mentionsNo
mimeTypeNoMIME type (auto-detected if omitted)
viewOnceNo
isForwardedNo
replyToSenderIdNo
ephemeralExpirationNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true. The description repeats non-idempotency and adds the useful return value (message ID), but does not disclose additional behavioral context such as permission requirements, rate limits, or what happens on failure. With annotations covering the safety profile, 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.

Conciseness4/5

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

Three short sentences, front-loaded with purpose and the sibling alternative. The final two sentences about idempotency and return value are compact, though 'Not idempotent' is redundant with the annotation; every sentence still earns its place efficiently.

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 10-parameter mutation tool with no output schema, the description covers purpose, alternative tool, idempotency, and return value. However, it leaves most parameters unexplained and omits operational details like authentication or rate limits, so an agent still has gaps when invoking non-trivial options.

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%, so the description must compensate for undocumented parameters. It mentions base64 data and public URL, but those two parameters already have matching descriptions in the schema, and the remaining eight parameters (e.g., replyTo, mentions, mimeType, viewOnce, ephemeralExpiration) are neither explained nor clarified. The description adds little meaning 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 (Send), resource (an audio file), and attachment mode (regular audio attachment). It distinguishes the tool from its sibling whatsapp_send_voice by naming the alternative explicitly, so an agent can tell them apart without opening either schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative tool and the condition for selecting it: for a voice note that plays like a recorded message, use whatsapp_send_voice. It also clarifies the two source options (base64 data or public URL), leaving no ambiguity about when this tool is the right choice.

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

whatsapp_send_contactA

Send a contact card, either from a display name or a full vCard. The recipient can save it to their address book. Not idempotent. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID
vcardNoRaw vCard string
replyToNo
mentionsNo
displayNameNoDisplay name (auto-generates vCard)
isForwardedNo
replyToSenderIdNo
ephemeralExpirationNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare idempotentHint=false, readOnlyHint=false and openWorldHint=true, and 'Not idempotent' merely restates one of them. The description does add genuinely new context: the recipient can save the card to their address book, and it returns the message ID (valuable since 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?

Three short, front-loaded sentences with no filler; the only slightly redundant line is 'Not idempotent,' which the annotations already state.

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 8-parameter mutation tool with low schema coverage and no output schema, the description covers the return value and idempotency but leaves most optional parameters unexplained, so an agent cannot fully understand the call surface.

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 only 38% across 8 parameters, so the description must compensate more than it does. It covers the displayName-vs-vcard choice (implying mutual exclusivity), but replyTo, mentions, isForwarded, replyToSenderId and ephemeralExpiration receive no explanation anywhere.

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 (send) and resource (contact card) and the two input modes (display name or full vCard). This clearly separates it from the other whatsapp_send_* siblings (text, image, audio, location, etc.), though it never references those siblings by name.

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 'either from a display name or a full vCard' implicitly tells the agent the two ways to call it, but there is no explicit when-to-use rule, prerequisite, or exclusion versus alternatives like whatsapp_create_contact or whatsapp_send_text with a link.

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

whatsapp_send_documentA

Send a file as a document, from base64 data or a public URL, with a required filename and optional caption. Use it for PDFs and any file that should not be shown inline as media. Not idempotent. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID
urlNoURL of the document
dataNoBase64 encoded document data
captionNoCaption for the document
replyToNo
filenameYesFilename shown to recipient
mentionsNo
mimeTypeNoMIME type (auto-detected if omitted)
isForwardedNo
replyToSenderIdNo
ephemeralExpirationNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare idempotentHint=false, so 'Not idempotent' largely repeats structured data. It does add useful context by stating it returns the message ID (no output schema exists), but says nothing about permission needs, size/rate limits, or what happens on failure.

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 waste: purpose/inputs first, the differentiator second, behavioral note last. Nothing could be removed without losing information.

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

Completeness4/5

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

For an 11-parameter, no-output-schema mutation tool, the description covers the core call shape and the return value. It would be stronger with a note on the ephemeralExpiration default and how mentions/replyTo behave, but it is largely 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 55%. The description clarifies data-vs-url sourcing, the required filename, and the optional caption, which is useful, but it is silent on mimeType auto-detection, mentions, replyTo, isForwarded, and the ephemeralExpiration enum, leaving half the parameters to the schema alone.

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 a file as a document'), names both supported input sources (base64 data or public URL), and explicitly distinguishes itself from inline-media siblings by noting files that 'should not be shown inline as media'.

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 when-to-use rule ('Use it for PDFs and any file that should not be shown inline as media'), which routes the agent away from whatsapp_send_image/video/audio. No explicit exclusion of other edge cases (e.g. stickers) or prerequisites, but context is solid.

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

whatsapp_send_imageA

Send an image, from base64 data or a public URL, with an optional caption, to a user or group JID. The recipient receives it immediately; set viewOnce for a view-once image. Not idempotent. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID
urlNoURL of the image
dataNoBase64 encoded image data
captionNoCaption for the image
replyToNoMessage ID to reply to
mentionsNoJIDs of mentioned users
mimeTypeNoMIME type (auto-detected if omitted)
viewOnceNoSend as view-once
isForwardedNoMark as forwarded
replyToSenderIdNoSender JID of the replied message
ephemeralExpirationNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=false, openWorld=true, destructive=false, so the safety profile is covered. The description adds real value beyond that: immediate delivery to the recipient and the return value (message ID), which annotations do not express. It only echoes the idempotency hint, so it falls 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 short sentences, front-loaded with the action and source modes, then delivery semantics, then return value. No filler and nothing repeated for padding.

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 an 11-parameter mutation with no output schema, the description is largely complete: it clarifies the base64-URL source alternatives (a constraint the schema does not encode, since only 'to' is required), notes the viewOnce behavior, and states the return value. Minor gaps remain for params like replyToSenderId and ephemeralExpiration, but nothing essential 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 91%, so the schema itself documents nearly every parameter. The description reinforces the url/data alternative and the viewOnce flag but adds no format or syntax detail beyond what the schema already provides; baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Send an image') plus the two source modes (base64 data or public URL), the destination type (user or group JID), and the optional caption. This is enough to distinguish it from siblings like whatsapp_send_video, whatsapp_send_document, and whatsapp_send_sticker 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 Guidelines3/5

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

Usage is implied by the description (source selection, viewOnce flag) but there is no explicit when-to-use vs when-not guidance and no named alternative among the many send_* siblings. An agent can infer the context but must supply its own routing logic.

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

whatsapp_send_locationA

Send a map location by latitude and longitude, with an optional place name and address. Not idempotent. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID
urlNoLocation URL
nameNoLocation name
addressNoLocation address
latitudeYesLatitude
longitudeYesLongitude
ephemeralExpirationNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare idempotentHint=false, so the 'Not idempotent' sentence is largely redundant. The description does add one piece of behavior beyond the structured data — 'Returns the message ID' — which is valuable given there is no output schema, but it omits any note on permissions or delivery behavior for a write operation on an open-world network.

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 declarative sentences, front-loaded with the core action and the required inputs, with no filler. Every sentence contributes something (action, side-effect, return 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?

For a simple message-send tool with well-described parameters and no output schema, the description covers what to send, the non-idempotency, and the return value. It is nearly sufficient, missing only guidance on session/auth prerequisites.

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 86%, so the schema carries the parameter burden and the baseline is 3. The description reinforces latitude/longitude and the optional name/address but adds no syntax or format detail, and never mentions the url or ephemeralExpiration parameters.

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 (Send) and resource (map location) plus the required coordinates, which cleanly separates it from sibling senders like whatsapp_send_text, whatsapp_send_contact, and whatsapp_send_image. 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 Guidelines3/5

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

The intended use (sharing a location) is implied by the name and description, but there is no explicit when-to-use guidance, no mention of prerequisites such as an active session, and no comparison against near alternatives like sending a location as a link (whatsapp_send_link) or as a contact.

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

whatsapp_send_reactionA
Idempotent

React to a message with an emoji, or remove this number's reaction by sending an empty string. Everyone in the chat sees it. Repeating it replaces the reaction. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesChat JID
reactionYesEmoji reaction (empty string to remove)
senderIdNoSender of the original message (for groups)
messageIdYesID of the message to react to

TDQS

A4.2/5.0
Behavior4/5

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

Adds real behavioral context beyond the annotations: visibility ('everyone in the chat sees it'), replace semantics ('repeating it replaces the reaction', consistent with idempotentHint=true), and the return shape. It doesn't mention auth/permission requirements, but the annotation set already covers the safety profile.

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

Conciseness5/5

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

Three short sentences, each earning its place: the core action, the removal mechanism, and the visibility/timing/return facts. Front-loaded with the primary 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?

For a 4-param mutation tool with no output schema, the description covers the two operating modes, visibility, replacement behavior, and return confirmation. Parameter specifics like the group-only senderId are left entirely to the schema, which is acceptable given full coverage.

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 four parameters (including the group-specific senderId) are already documented in the schema. The description restates the empty-string removal convention already present in the schema, adding no new parameter 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?

States a specific verb and resource (react to a message with an emoji) plus the explicit inverse operation (remove reaction via empty string). No sibling tool covers reactions, so the agent can identify it uniquely.

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?

Clearly explains both modes of use: supply an emoji to react, or an empty string to remove. Since no alternative reaction tool exists, the absence of an explicit alternatives clause is minor, but it stops short of a full when/when-not statement.

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

whatsapp_send_stickerA

Send a sticker in WebP format, from base64 data or a public URL. Not idempotent. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID
urlNoURL of the sticker
dataNoBase64 encoded sticker data
replyToNo
mentionsNo
isAnimatedNoWhether the sticker is animated
isForwardedNo
replyToSenderIdNo
ephemeralExpirationNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare non-idempotent, non-read-only, open-world, non-destructive behavior, so the safety profile is covered. The description adds two useful facts: the WebP format requirement and that the message ID is returned (valuable since there is no output schema), but omits size limits, rate limits, or failure modes.

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 compact sentences with no filler; the core action, format constraint, and return value are all front-loaded.

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 9-parameter tool with no output schema and low schema coverage, the description covers the essential send path and mentions the return value. It stops short of documenting the reply/mention/ephemeral parameters, leaving gaps for an agent composing a full request.

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 only 44%, with replyTo, mentions, isForwarded, replyToSenderId, and ephemeralExpiration undocumented. The description compensates partially by explaining that 'url' and 'data' are alternative sticker sources, but several parameters remain opaque in both the schema and the description.

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 and resource ('Send a sticker'), the required media format (WebP), and the two accepted sources (base64 data or public URL). It does not explicitly differentiate from close siblings like whatsapp_send_image or whatsapp_send_document, relying on the name alone to draw the line.

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 tool name and format constraint, and the description clarifies the two input modes (base64 vs URL). However there is no explicit statement of when to prefer this over whatsapp_send_image, nor any prerequisites such as size limits or account requirements.

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

whatsapp_send_textA

Send a text message to a user JID or a group JID (@g.us). The recipient receives it immediately and it cannot be unsent, only deleted with whatsapp_delete_message. Supports mentions, replies and a disappearing timer. Not idempotent: calling it twice sends two messages. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID (user or group)
textYesMessage text content (max 4096 characters)
replyToNoID of the message being replied to
mentionsNoJIDs of mentioned users
isForwardedNoMark as forwarded
replyToSenderIdNoSender JID of the message being replied to
ephemeralExpirationNoDisappearing message timer

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly=false, idempotent=false, destructive=false and openWorld=true, yet the description still adds real value: irreversibility, the concrete alternative for removal, and the fact that duplicate calls produce duplicate messages. It also notes the return value (message ID) despite the absence of an output schema.

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

Conciseness4/5

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

Four tight sentences with no filler, leading with the core action and recipient formats before consequences. The idempotency sentence slightly repeats the annotations, keeping it out of 5 territory.

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 7-parameter mutation tool with full schema coverage, no output schema and useful annotations, the description covers purpose, side effects, reversibility, and return value. Nothing needed to invoke it correctly is missing.

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

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 the group JID format suffix (<id>@g.us) that the schema only gestures at with 'user or group', and it surfaces the mentions/replies/disappearing-timer capabilities that map onto optional parameters.

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 ('Send a text message') plus the accepted recipient forms, and implicitly distinguishes itself from the sibling senders (send_audio, send_image, send_document). 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 clear operating context — the message is delivered immediately, cannot be unsent, and can only be removed via whatsapp_delete_message, with an explicit idempotency warning. It stops short of stating when to prefer it over e.g. send_link or a reaction, so no explicit exclusions/alternatives beyond deletion.

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

whatsapp_send_videoA

Send a video, from base64 data or a public URL, with an optional caption, to a user or group JID. The recipient receives it immediately. Not idempotent. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID
urlNoURL of the video
dataNoBase64 encoded video data
captionNoCaption for the video
replyToNoMessage ID to reply to
mentionsNo
mimeTypeNoMIME type (auto-detected if omitted)
viewOnceNoSend as view-once
isForwardedNo
replyToSenderIdNoSender JID of the replied message
ephemeralExpirationNo

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=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description still adds real value beyond that: delivery is immediate and irreversible-in-practice ('recipient receives it immediately') and the call returns a message ID, which matters since 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?

Four short, front-loaded sentences with no filler; the send action, input forms, delivery semantics and return value are all stated compactly. 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 an 11-parameter mutation tool with annotations but no output schema, the description covers the core action, media sourcing, delivery behavior and return value well. It leaves unaddressed the mutual exclusivity of url vs data and the optional advanced parameters (mentions, viewOnce, ephemeralExpiration), which an agent may need to reason about.

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 73%, so most parameters are documented structurally, and the description adds the key semantic that the media can come from base64 'data' or a public 'url'. However, it says nothing about the remaining parameters (replyTo, mentions, viewOnce, isForwarded, ephemeralExpiration), so it only partially compensates.

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 (send a video) plus the two supported input forms (base64 data or public URL), which is more than the name alone gives. It stops short of naming the closest sibling (whatsapp_post_video_status) to distinguish a direct message from a status post, so an agent must infer the difference from 'to a user or group JID.'

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 recipient/URL framing, but there is no explicit when-to-use or when-not-to-use guidance, and no routing to alternatives among the many sibling send/status tools. Nothing misleading, but nothing that steers selection either.

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

whatsapp_send_voiceA

Send a voice note (push-to-talk), from base64 data or a public URL; OGG/Opus plays best. It appears as a recorded voice message. For a music or audio file, use whatsapp_send_audio. Not idempotent. Returns the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient JID
urlNoURL of the voice file
dataNoBase64 encoded voice data
replyToNo
mentionsNo
mimeTypeNoMIME type (auto-detected if omitted)
viewOnceNo
isForwardedNo
replyToSenderIdNo
ephemeralExpirationNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=true. The description adds value beyond these by explicitly stating 'Not idempotent' and naming the return value ('Returns the message ID'), which the annotation only flags as a hint. It also discloses presentation semantics ('appears as a recorded voice message'). It does not cover auth requirements or rate limits, 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?

Three tight sentences with no waste: what it does, when to use the alternative, and key behavioral traits (non-idempotent, returns message ID). The most actionable information is front-loaded.

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 send tool with no output schema, the description adequately covers purpose, sibling differentiation, input modes, format guidance, and the key behavioral fact (non-idempotent). It falls short of complete because it doesn't touch the 60% of undocumented parameters (reply/forward/mentions/viewOnce/ephemeral) which an agent would need to fully exploit, but it is complete enough to call correctly for the primary use cases.

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 40%, so 6 of 10 parameters (replyTo, mentions, viewOnce, isForwarded, replyToSenderId, ephemeralExpiration) are undocumented in both the schema and the description. The description does explain the two primary mutually exclusive input methods (url vs data) and the format hint (OGG/Opus), which adds value over the schema's bare descriptions, but does not compensate for the coverage gap. 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 and resource ('Send a voice note (push-to-talk)') and explicitly names the sibling it is not (whatsapp_send_audio for music/audio files). An agent can distinguish this from whatsapp_send_audio and whatsapp_send_document 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 Guidelines5/5

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

Explicitly names the alternative (whatsapp_send_audio) and the condition selecting it ('For a music or audio file'). It also states the two input modes (base64 data or public URL) and the format preference (OGG/Opus plays best), giving clear when-to-use guidance.

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

whatsapp_set_chat_ephemeralA
Idempotent

Set the disappearing messages timer for a chat (off, 24 hours, 7 days or 90 days). All participants see the change and new messages follow it. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
expirationYesTimer duration

TDQS

A4.1/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. The description adds useful behavioral context beyond that: all participants see the change, new messages follow it, and the call returns a success confirmation. It does not mention required permissions, but for this simple mutation it is helpful.

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 sentences, front-loaded with the action, then the side effect, then the return value. Every sentence earns its place and there is 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?

For a simple two-parameter mutation with full schema coverage and annotations, the description covers what the tool does, the available timer values, the visible effect on participants and new messages, and the return behavior. No output schema exists, so stating the success confirmation is a useful completion.

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 chatId and expiration. The description expands the expiration enum values into human-readable durations ('24 hours, 7 days or 90 days'), which adds slight meaning, but it leaves chatId semantics to the schema. Baseline 3 applies when the schema does most of the work.

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: 'Set the disappearing messages timer for a chat,' and enumerates the exact timer states. It is clearly distinguishable from sibling tools like whatsapp_set_group_announce or whatsapp_mute_chat because it targets per-chat ephemeral messaging.

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 action name and options, but there is no explicit guidance on when to use this tool versus alternatives or any preconditions. For a simple setter this is minimally adequate, but it stops short of stating when-not or naming related tools.

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

whatsapp_set_chat_presenceA
Idempotent

Show a typing or recording indicator in a chat, or clear it with paused. The other side sees it in real time. Use it just before sending a reply; it does not send anything by itself. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesPresence state
chatIdYesChat JID

TDQS

A4/5.0
Behavior4/5

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

Adds behavior beyond the annotations: the indicator is visible to the other party in real time, it transmits nothing on its own, and the call returns a success confirmation. The idempotent/openWorld safety profile is already carried by annotations, so this is solid supplementary 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?

Three short sentences with zero filler; the core action is front-loaded and the caveats follow. 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 two-parameter, non-destructive tool with no output schema, the description covers action, audience visibility, side-effect boundary, and return shape. Only the relationship to subscribe_chat_presence 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?

Schema description coverage is 100% and the enum values (typing/recording/paused) are documented in the schema. The description reinforces the meaning of 'paused' but adds little syntax or format detail beyond what the schema already provides, 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 ('Show a typing or recording indicator in a chat') and covers the clearing case ('or clear it with paused'). An agent can tell what it does, though it does not explicitly contrast with the nearby sibling whatsapp_subscribe_chat_presence, which concerns receiving presence rather than sending it.

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 invocation context ('Use it just before sending a reply') and a useful scoping caveat ('it does not send anything by itself'). It stops short of naming alternatives or exclusions, so it is clear but not fully routing-aware.

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

whatsapp_set_community_descriptionA
Idempotent

Change a community's description. Requires admin rights; all members see it. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID
descriptionNoNew description

TDQS

A4/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, so the safety/mutability profile is provided. The description adds genuine value beyond that: the admin-rights requirement and the visibility fact ('all members see it'), plus the return confirmation. It does not contradict annotations.

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

Conciseness5/5

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

Three short clauses, each carrying distinct information (action, prerequisite/effect, return), front-loaded with the verbi. No padding.

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?

A simple 2-param mutation with idempotentHint and full schema coverage, so little more is needed. The description covers action, permission, effect, and return confirmation. Only minor gaps remain: clearing/emptying the description and what happens on missing admin rights.

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 'id' documented as 'Community JID' and 'description' as 'New description'. The description adds nothing about either parameter (e.g., length limits, empty-string behavior to clear it), 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 (Change) plus specific resource (a community's description) and even names the target field. Clearly distinguishable from the sibling whatsapp_update_group_description (group vs community) and from whatsapp_set_community_name/picture.

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?

States the permission prerequisite ('Requires admin rights'), which is useful context for whether to attempt the call. However, no explicit when-to-use vs alternatives, no note on what happens if the caller lacks admin rights, and no mention of the sibling community setters.

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

whatsapp_set_community_lockedA
Idempotent

Turn locked mode on or off for a community. When on, only admins can edit the community's info. Requires admin rights. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID
enabledYesEnable or disable

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the mutation/idempotent/non-destructive profile, and the description layers on meaningful extra context: the semantic effect of locked mode, the admin-rights requirement, and the return confirmation. It does not mention reversibility beyond the toggle itself, but adds genuine value 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 short sentences, effect-first, with zero filler. The key semantic ('only admins can edit info') is front-loaded before the prerequisite and return note.

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 2-param boolean toggle with no output schema, the description supplies effect, prerequisite, and result confirmation, and annotations cover the safety profile. Only the sibling-routing gap keeps it from being 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%, so both parameters are already documented ('Community JID', 'Enable or disable'). The description's 'on or off' and 'for a community' merely restate those, adding no format or syntax detail. 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?

Clear verb+resource ('turn locked mode on or off for a community') with the concrete effect explained ('only admins can edit the community's info'). It implicitly separates itself from the group analog via 'for a community', but never names whatsapp_set_group_locked as the sibling to use for groups.

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?

States a real precondition ('Requires admin rights') and the toggle intent is obvious, but gives no when-not guidance and does not route the agent to the near-identical sibling whatsapp_set_group_locked. Usage is implied rather than spelled out.

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

whatsapp_set_community_nameA
Idempotent

Rename a community. Requires admin rights; all members see the change. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID
nameYesNew name

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the safety profile (idempotent, non-destructive, open-world), so the bar is lower, and the description still adds real context: the admin-rights requirement and the fact that all members see the change. It also states the return shape. It stops short of noting any rate limits or propagation delay, so a 4 rather than 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 short clauses, front-loaded with the action, then the precondition, then the side effect and return. No filler and nothing 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?

For a two-parameter mutation with no output schema, the description covers the operation, its permission gate, its visibility impact, and what it returns. That is nearly everything an agent needs; only edge cases like name validation rules are 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% with both parameters documented (Community JID, New name), so the schema already carries the semantics. The description adds no syntax, length, or uniqueness constraints 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 ('Rename a community'), which cleanly separates it from the other community mutators in the sibling list such as set_community_description, set_community_picture, and set_community_locked. 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?

It gives one useful precondition ('Requires admin rights'), which tells the agent when the call will fail, but it names no alternatives and gives no guidance on when renaming is appropriate versus other community updates. Usage is implied by the narrow verb, so this is minimally viable 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_set_community_pictureA
Idempotent

Set a community's profile picture from base64 image data. Requires admin rights; replaces the current picture for all members. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID
dataYesBase64-encoded JPEG image

TDQS

A4.2/5.0
Behavior4/5

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

Adds two behavioral facts beyond the annotations: the call needs admin rights and the change applies to all members by replacing the existing picture. Given idempotentHint=true and destructiveHint=false are already supplied, this is solid added context, though it doesn't quantify propagation delays or failure modes.

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, each earning its place: what it does, the admin prerequisite and blast radius, and the return behavior. Purpose is front-loaded with zero 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 two-parameter mutation with no output schema, the description covers purpose, permission requirement, scope of effect, and return shape ('success confirmation'). Only minor gaps remain, such as image size limits or how a failed permission check surfaces.

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 'id' (Community JID) and 'data' (base64 JPEG) are fully documented in the schema. The description's mention of 'base64 image data' adds no format detail beyond that, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Set a community's profile picture') plus the input medium ('from base64 image data'), clearly distinguishing it from the sibling whatsapp_set_group_picture and the various get/set community settings 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 prerequisite ('Requires admin rights'), which tells the agent when the call is viable. It stops short of naming an alternative or stating when not to use it, 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.

whatsapp_set_group_announceA
Idempotent

Turn announcement mode on or off. When on, only admins can send messages in the group. Requires admin rights. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
enabledYesEnable or disable

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly false, idempotent true, non-destructive), so the description adds the real value: the admin-rights requirement, the group-wide effect on non-admin senders, and the success return. It doesn't describe whether existing non-admin messages are affected or how failure is surfaced, which would be the remaining gap.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the consequence, then the precondition and return. Nothing is redundant and nothing requires the reader to hunt.

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 two-parameter toggle this is complete: action, effect, auth requirement, and return behavior are all covered, and the annotations carry the safety profile. No output schema exists, yet the description tells the agent what to expect back.

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 only two parameters (id, enabled), both documented in the schema itself. The description adds nothing about parameter format or values (e.g., accepted JID forms), so this is the baseline 3 for schema-driven tools.

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 ('Turn announcement mode on or off') and immediately explains the concrete effect ('only admins can send messages'). That effect distinguishes it from neighbors like whatsapp_set_group_locked or whatsapp_set_group_member_add_mode, though the description never names those siblings explicitly.

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

Usage Guidelines3/5

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

'Requires admin rights' gives one prerequisite, which is genuinely useful context. However, it gives no guidance on when to choose announcement mode versus the other group-restriction siblings (locked, join approval, member add mode), leaving the 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_set_group_join_approvalA
Idempotent

Turn join approval on or off. When on, people joining by link need an admin to approve them (see whatsapp_get_group_requests). Requires admin rights. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
enabledYesEnable or disable

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnly=false, idempotent=true, destructive=false), and the description adds meaningful context beyond them: admin-rights prerequisite, the exact behavioral consequence of enabling, and that a success confirmation is returned.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the effect, then the prerequisite and return. Every sentence earns its place, including the return-value note given there is no output schema.

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 two-parameter toggle with no output schema, the description covers action, effect, prerequisite permission, related follow-up tool, and return shape — nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3), and the description genuinely enriches the otherwise terse 'Enable or disable' by explaining what 'on' actually does to link-joiners, which is the semantics an agent needs to set the boolean correctly.

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 (turn group join approval on/off) and immediately explains the observable effect, which cleanly separates it from siblings like whatsapp_set_group_member_add_mode and whatsapp_set_group_locked.

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: it requires admin rights and points to whatsapp_get_group_requests for the resulting approval queue. It does not, however, explicitly say when to prefer this over the adjacent add-mode/locked settings tools, so the agent must 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_set_group_lockedA
Idempotent

Turn locked mode on or off. When on, only admins can edit the group's name, description and picture. Requires admin rights. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
enabledYesEnable or disable

TDQS

A4/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 (readOnlyHint false, idempotentHint true, destructiveHint false), so the bar is lower. The description still adds real value: it defines what locked mode actually restricts (only admins may edit name, description, picture), states the admin-rights requirement, and notes the return ('success confirmation').

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 front-loaded sentences: what it does, what the state means, prerequisite and return. Every sentence carries distinct information 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?

With no output schema, the description supplies a return indication ('success confirmation') and covers the permission precondition and behavioral effect, which is sufficient for a simple 2-parameter toggle. An explicit tie-break against the near-identical group-settings siblings would make it 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 (id, enabled) are documented there, so baseline is 3. The description implies the enabled boolean's on/off semantics but adds no format or identifier 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 ('Turn locked mode on or off') tied to a specific group setting, and explains the resulting effect on name/description/picture editing. The resource is clear and distinct, though it does not explicitly contrast itself with the adjacent group-setting siblings (set_group_announce, set_group_join_approval).

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?

'Requires admin rights' gives a concrete precondition for invocation, and the description frames the two states (on/off) so the agent knows the calling context. No explicit exclusions or named alternatives are provided, so it falls short of a 5.

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

whatsapp_set_group_member_add_modeA
Idempotent

Choose whether only admins or all members can add participants to a group. Requires admin rights. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
onlyAdminAddYesOnly admins can add members

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare non-destructive, idempotent, non-readOnly behavior, and the description adds real context beyond them: the admin-rights authorization requirement and the fact that a success confirmation is returned. It does not, however, say what the current mode is or whether the change is immediately visible to members.

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, each earning its place: what the setting controls, the authorization prerequisite, and the return behavior. The operative setting is front-loaded 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 simple two-parameter boolean mutation with no output schema, the description covers purpose, precondition, and result shape, and the annotations handle the safety profile. Only minor gaps remain (failure mode without admin rights, immediate effect on members).

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% (id = Group JID, onlyAdminAdd = only admins can add members), so the schema already carries the parameter semantics. The description restates the boolean's two options but adds no format, JID syntax, or edge-case detail beyond the schema, making 3 the appropriate baseline.

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-equivalent (choose/set) and a precise resource: who may add participants to a group, with the two possible values spelled out. It is clearly distinct from adjacent group-setting siblings like set_group_announce or set_group_locked, though it never names an alternative 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?

It gives one concrete prerequisite ('Requires admin rights'), which is more than most siblings offer, but says nothing about when to prefer this over other group-configuration calls or what happens on failure without admin rights. Usage is implied rather than guided.

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

whatsapp_set_group_pictureA
Idempotent

Set a group's picture from base64 image data, replacing the current one for all participants. May require admin rights. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
dataYesBase64-encoded JPEG image

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare the mutation/idempotency profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description still adds value by disclosing the replacement effect across all participants, the possible admin-rights requirement, and the success-confirmation return, none of which appear in the annotations.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and its scope before prerequisites. 'Returns a success confirmation' is mildly filler but earns some place given no output schema exists.

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 two-parameter mutation tool with full schema coverage and no output schema, the description covers action, input form, blast radius, prerequisite, and return type. Only the absence of alternative-tool routing keeps it from being 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 description coverage is 100% and both parameters (id, data) are documented in the schema, so the baseline is 3. The description's 'base64 image data' restates rather than extends the schema's 'Base64-encoded JPEG image'.

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 ('Set a group's picture'), names the input form (base64 image data) and the effect scope ('replacing the current one for all participants'). An agent can distinguish it from whatsapp_set_community_picture or whatsapp_post_image_status without opening a schema.

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

Usage Guidelines3/5

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

Provides one useful precondition ('May require admin rights') but gives no explicit when-to-use vs alternatives guidance, e.g. how it differs from setting a community picture or posting a status image. Usage context is implied by the name 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_set_newsletter_subscriptionA
Idempotent

Follow or unfollow a channel by JID. Following adds its updates to this account; the channel owner only sees the follower count. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNewsletter JID
subscribedYesTrue to subscribe, false to unsubscribe

TDQS

A3.8/5.0
Behavior4/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 safety and repeatability are covered. The description adds genuine context beyond that: what following actually does to the account ('adds its updates to this account'), the privacy consequence ('the channel owner only sees the follower count'), and the return shape ('a success confirmation').

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, front-loaded with the operation, then the behavioral consequence, then the return value. No filler and nothing an agent must skip past to find the action.

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 two-parameter, idempotent, non-destructive operation with no output schema, the description covers the action, the effect, the visibility implication, and the return value. It omits auth/session prerequisites, but nothing else needed to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% — both the JID and the boolean subscribed flag are already documented in the schema. The description reinforces that action happens 'by JID' and that subscribing adds updates to the account, but adds no format, validation, or edge-case detail beyond the schema. Baseline 3 is correct.

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 pair (follow/unfollow) and resource (channel/newsletter by JID), which is enough to separate it from siblings like whatsapp_mute_newsletter or whatsapp_get_newsletter. The only weakness is terminology drift: the tool and schema say newsletter, the description says 'channel', which an agent must map back to the sibling naming.

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 'Follow or unfollow a channel by JID' — the agent can infer this is the subscribe/unsubscribe action. However, no explicit when-to-use guidance or alternatives are named, e.g. it never says to use whatsapp_mute_newsletter instead when the user only wants to silence a channel without following it.

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

whatsapp_set_presenceA
Idempotent

Set this account as available or unavailable. Available makes it show online to contacts; for a typing indicator in one chat, use whatsapp_set_chat_presence. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
presenceYesPresence state

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, idempotent, open-world, non-destructive behavior, so the bar is lower. The description adds real semantic context beyond them: what 'available' actually does (shows online to contacts) and that it returns a success confirmation. It omits any auth/rate-limit notes, so it stops 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 the core action, then the routing rule, then the return note. 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 single-parameter presence toggle with annotations covering the safety profile, the description is nearly complete and even notes the return confirmation. It doesn't address persistence or when the state reverts, a minor gap for an open-world mutation.

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 single enum ('available'/'unavailable') is already documented there, so the baseline is 3. The description partly compensates by explaining the effect of the 'available' value, but adds no format or edge-case 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+resource ('Set this account as available or unavailable') and names the sibling it is not ('for a typing indicator in one chat, use whatsapp_set_chat_presence'). An agent can distinguish it from whatsapp_set_chat_presence 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 Guidelines5/5

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

Explicitly routes the agent: use this for account-level presence, use whatsapp_set_chat_presence for a per-chat typing indicator. That is a clear when-to-use plus a named alternative.

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

whatsapp_set_privacy_settingA
Idempotent

Change one privacy setting of the account, for example who can see the profile picture. Applies immediately to all contacts. Returns the updated settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesPrivacy level
settingYesPrivacy setting to update

TDQS

A4/5.0
Behavior4/5

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

Adds value beyond annotations by stating the change 'applies immediately to all contacts' and that it 'returns the updated settings' – behavioral facts not in the annotations or schema. Annotations already declare non-readOnly, idempotent, non-destructive, so the bar is lower; the added immediacy/scope note earns credit, though rate-limit or failure behavior is still absent.

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, each earning its place: purpose, scope of effect, and return value. Front-loaded with the verb and resource. 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?

For a 2-param idempotent mutation tool with full schema coverage and annotations, the description covers purpose, effect scope, and return value. Small gap: no guidance on how this interacts with the sibling read tool or on partial failure if a setting/value combination is invalid.

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 enums on both parameters, so the schema carries the semantics. The description's example ('who can see the profile picture') loosely maps to the profile setting but adds no syntax or mapping 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?

Specific verb (change) + resource (privacy setting of the account) with a concrete example ('who can see the profile picture'). An agent can immediately distinguish this from siblings like whatsapp_get_privacy_settings or whatsapp_set_group_locked.

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 (changing an individual privacy setting) but provides no explicit when-to-use guidance, no mention of the sibling get_privacy_settings tool for reading current values, and no note about prerequisites or ordering when changing multiple settings.

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

whatsapp_star_messageA
Idempotent

Star or unstar a message on this account. Only this account sees it. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID
starredNoTrue to star, false to unstar
senderIdYesMessage sender JID
messageIdYesMessage ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations cover safety (readOnlyHint=false, idempotentHint=true, destructiveHint=false), but the description adds two pieces of context they don't: the effect is account-private ('Only this account sees it') rather than visible to other participants, and the call returns a success confirmation even though no output schema exists. It does not describe error behavior, which keeps it out of the top band.

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, no filler, and the core action is front-loaded before the visibility caveat and return-value note. Nothing to trim.

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 four-parameter mutation with no output schema, the description covers action, effect scope, and response shape. The remaining gap is that it never clarifies how message identity (messageId/chatId/senderId) must be assembled, which matters for a star toggle on a specific message.

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 four parameters documented, so the schema carries the semantics. The description adds only the star/unstar direction implied by the 'starred' boolean, which the schema already states explicitly. 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 pair and resource ('Star or unstar a message'), and the boolean parameter makes the two directions clear. However, it does not distinguish itself from the similarly-scoped sibling whatsapp_pin_message, so an agent gets no help choosing between the two.

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, no prerequisites (e.g. required messageId/chatId/senderId context), and no mention of alternatives such as pinning or marking read. The description simply restates the operation.

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

whatsapp_subscribe_chat_presenceA
Idempotent

Subscribe to a contact's presence (online, typing) so it arrives as presence events. It does not return presence: the updates come later through the event stream. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat JID

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare a non-destructive, idempotent, open-world write, so safety is already covered. The description adds genuinely useful non-obvious behavior: the call does not return presence data, updates are delivered later via the event stream, and the immediate return is only a success confirmation. That closes the biggest agent confusion for a subscribe-style tool.

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, front-loaded with the action, then the crucial negative ('It does not return presence') and the return behavior. No filler and nothing buried.

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, so the description carries the return-value burden and does so ('Returns a success confirmation') while explaining the async delivery path. For a single-parameter subscription tool, nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

There is only one parameter (chatId) and the schema documents it at 100% coverage as the 'Chat JID'. The description mentions subscribing to 'a contact's presence' but adds no format or naming details beyond what the schema already provides, so this sits at the baseline for a fully documented parameter.

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 ('Subscribe to a contact's presence') and enumerates the presence types (online, typing), so an agent can distinguish it from the mutation-oriented sibling whatsapp_set_chat_presence. It stops short of naming the sibling explicitly, so a 4 rather than a 5.

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

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 learns updates arrive asynchronously and that this tool does not return presence, which implies 'call this, then listen to the event stream.' There is no explicit when-to-use/when-not guidance relative to alternatives such as whatsapp_set_chat_presence.

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

whatsapp_sync_contactsA
Idempotent

Re-sync the address book from the WhatsApp servers. Use it when whatsapp_get_contacts looks outdated. It runs in the background. Returns an acknowledgement, not the contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, destructiveHint=false and openWorldHint=true. The description adds two things annotations cannot convey: that execution is asynchronous ('runs in the background') and that the return value is an acknowledgement, not contact data. It stops short of noting auth/prerequisite state, so 4 rather than 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 short sentences, each earning its place: what it does, when to use it, and what it returns. The action statement is front-loaded and there is no filler.

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 input parameters, no output schema, and annotations covering the safety profile, the definition still closes the two gaps an agent would otherwise hit: async execution and a non-contact acknowledgement return. Nothing needed to call it correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to document and the baseline of 4 applies. The description correctly implies no filtering or scope arguments are accepted.

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 ('Re-sync the address book from the WhatsApp servers') and immediately scopes it against the sibling it most resembles, whatsapp_get_contacts. An agent can pick between the two 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 Guidelines5/5

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

Names the trigger condition explicitly ('Use it when whatsapp_get_contacts looks outdated') and effectively names the alternative tool. Nothing about when to reach for this instead of the read-only sibling is left to inference.

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

whatsapp_unblock_contactA
Idempotent

Unblock a previously blocked contact, so they can message and call this number again. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact JID to unblock

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, idempotent, non-destructive, open-world. The description goes beyond them by describing the observable outcome (contact can message and call again) and the response shape ('Returns a success confirmation'), which is valuable 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.

Conciseness5/5

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

Two short sentences, front-loaded with the action and its effect, with no redundant or filler 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 one-parameter mutation with full annotation coverage, the description is nearly complete; it even covers the return value in lieu of an output schema. Only the failure case (e.g., unblocking a non-blocked contact) and any auth/session prerequisites are 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 coverage is 100% and the single 'id' parameter is documented as 'Contact JID to unblock', so the schema carries the meaning. The description adds no format or sourcing guidance for the JID 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?

The description states a specific verb+resource (unblock a contact) and spells out the concrete effect: the contact can message and call again. It is unambiguously the inverse of the sibling whatsapp_block_contact, though it never names or contrasts 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 'previously blocked contact', but there is no explicit when-to-use/when-not guidance and no reference to the counterpart whatsapp_block_contact or to any prerequisite (e.g., that the contact must actually be blocked).

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

whatsapp_update_community_participantsA
DestructiveIdempotent

Add, remove, promote to admin or demote participants of a community, by user JID. Requires admin rights. Removed participants lose access and everyone affected is notified. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCommunity JID
actionYesAction
participantsYesParticipant JIDs

TDQS

A4.5/5.0
Behavior5/5

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

With annotations already declaring destructiveHint=true and idempotentHint=true, the description adds valuable operational context: admin-rights requirement, that removed participants lose access, that affected users are notified, and that the call returns a success confirmation. It does not contradict any annotation.

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

Conciseness5/5

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

Four short sentences, front-loaded with the core operation, followed by prerequisite, side effects, and return behavior. Every sentence carries distinct information and no sentence is 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 destructive, admin-gated community participant mutation with rich annotations and a fully described input schema, the description covers the permission requirement, consequences for removed users, notification behavior, and return confirmation. No output schema exists, so omitting return-field details is appropriate.

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 the community JID, action enum, and participant JID list. The description restates the action set and that participants are identified by JID, which is marginally useful but does not add syntax or format 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?

The description states a specific verb set (add, remove, promote, demote) and a precise resource (community participants) and identifies the identifier type (user JID). The resource name itself distinguishes it from the sibling whatsapp_update_group_participants, which operates on groups rather than communities.

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 precondition (requires admin rights) and implies the operation's scope via 'of a community'. It does not explicitly state when not to use it or name the group-participant alternative, but the resource contrast with the sibling name is sufficient for an agent to route correctly.

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

whatsapp_update_group_descriptionA
Idempotent

Change a group's description. All participants see it; it may require admin rights if the group is locked. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
descriptionNoNew group description

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 (not read-only, idempotent, non-destructive, open-world). The description adds genuinely useful context beyond that: the change is visible to all participants, it may require admin rights on locked groups, and it returns a success confirmation. This is solid added value for a mutation tool.

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

Conciseness5/5

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

Three compact clauses, front-loaded with the action and immediately followed by the two facts an agent most needs (visibility and permission risk). 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 simple two-parameter mutation with annotations present and no output schema, the description covers purpose, visibility side effect, permission prerequisite, and return confirmation. Only minor gaps remain, such as any length limits or whether the previous description is recoverable.

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 'id' (Group JID) and 'description' (New group description) are already fully documented. The description adds no syntax, format, or constraint detail beyond the schema, so the baseline of 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Change a group's description'), which is unambiguous and clearly distinct from siblings like whatsapp_update_group_name or whatsapp_set_group_picture. It does not explicitly name a sibling to contrast against, but the resource is precise enough that no agent would confuse them.

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 the key gating condition: it may require admin rights if the group is locked. That tells the agent when the call is likely to fail. It stops short of naming alternatives or stating an explicit when-not-to-use, but no direct alternative exists for this operation.

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

whatsapp_update_group_nameA
Idempotent

Rename a group. All participants see the change; it may require admin rights if the group is locked. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
nameYesNew group name

TDQS

A4/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, yet the description adds real value: the rename is visible to all participants, may require admin rights, and returns a success confirmation. This exceeds what the structured fields convey, though it does not detail failures or partial-success 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?

Three short sentences, zero filler, with the core action front-loaded before the side effects and permission caveat. 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 simple two-parameter mutation with full schema coverage and no output schema, the description covers the effect, the permission caveat, and the return behavior, which is nearly everything an agent needs. It stops short of describing failure modes or rate limits, but nothing critical 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% ('Group JID', 'New group name'), so the schema fully documents both parameters. The description adds no format, naming constraints, or length limits 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 ('Rename a group'), which cleanly separates it from sibling mutations like whatsapp_update_group_description, whatsapp_set_group_picture, or whatsapp_set_group_locked. 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 Guidelines3/5

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

The description gives a conditional prerequisite ('may require admin rights if the group is locked'), which is useful context for deciding whether the call will succeed. However, it names no alternatives or when-not conditions, so usage is only implied rather than fully specified.

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

whatsapp_update_group_participantsA
DestructiveIdempotent

Add, remove, promote to admin or demote participants of a group, by user JID. Requires admin rights. Removed participants lose access and everyone affected is notified. Some adds can fail silently because of the invitee's privacy settings, so check with whatsapp_get_group_participants. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
actionYesAction to perform
participantsYesParticipant JIDs

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint, idempotentHint and openWorldHint, yet the description adds substantive context: admin rights needed, removed users lose access, affected parties are notified, silent add failures from privacy settings, and a success confirmation return. This goes well beyond the structured hints.

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

Conciseness5/5

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

Four tightly packed sentences, front-loaded with the operation and scope, then permissions, side effects, edge cases, and return value. No filler.

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, the description covers permissions, side effects on removed members, notification behavior, failure modes, and the return shape. Nothing an agent needs to call it safely 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 the schema already documents id, action (with enum) and participants. The description only adds 'by user JID' for addressing, which is marginal over 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 set of verbs (add, remove, promote, demote) on a specific resource (group participants) and identifies the addressing scheme (user JID). This cleanly distinguishes it from siblings like whatsapp_update_community_participants or whatsapp_get_group_participants.

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 prerequisite (requires admin rights) and an explicit verification workflow — consult whatsapp_get_group_participants because adds may fail silently. It does not name when to avoid this tool or spell out alternatives (e.g. leave_group), but the operational guidance is clear.

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

whatsapp_update_group_requestsA
Idempotent

Approve or reject pending join requests for a group, by user JID. Approved users become participants immediately. Requires admin rights. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGroup JID
actionYesAction to perform
participantsYesParticipant JIDs

TDQS

A4.5/5.0
Behavior5/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. The description adds key behavioral context beyond annotations: admin rights requirement, immediate participant effect, and a success confirmation return.

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 are front-loaded with purpose followed by effect, prerequisite, and return. Each sentence adds value without repetition or filler.

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, the description covers the action, effect, permission requirement, and return confirmation. The schema handles parameters and annotations cover safety, so nothing critical 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 the parameters id, action, and participants are fully documented in the schema. The description adds 'by user JID' and 'approve or reject' but does not extend parameter meaning 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 states a specific verb (approve/reject), resource (pending join requests for a group), and scope (by user JID), distinguishing it from read-oriented siblings like whatsapp_get_group_requests and policy-oriented siblings like whatsapp_set_group_join_approval.

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 clearly indicates the context (pending join requests) and prerequisite (admin rights), but does not explicitly name alternatives or when not to use this tool, such as directing the agent to list requests first.

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

whatsapp_update_my_profileA
Idempotent

Change the connected number's own display name, about text or picture. Contacts see the change. Only the fields you pass are updated. Returns a success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name
statusNoStatus text
pictureNoBase64-encoded JPEG profile picture

TDQS

A4.2/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 and open-world, so the safety profile is covered. The description adds real value beyond them: contacts see the change (external visibility), partial-update behavior, and that a success confirmation is returned.

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

Conciseness5/5

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

Four short sentences, each doing distinct work (purpose, visibility effect, partial-update rule, return value), with the purpose front-loaded and 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 mutation with annotations and no output schema, the description covers what changes, who sees it, partial-update semantics, and the response. It omits error/failure behavior and any size or format constraint on the picture, which are minor residual 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?

Schema coverage is 100%, so the baseline is 3, but the description adds the crucial semantic that only supplied fields are updated — important because all three parameters are optional. It also names the three fields in user terms, though it calls the 'status' parameter 'about text', a minor terminology drift from 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 (change) and precise resource scope (the connected number's own display name, about text or picture), which cleanly separates it from siblings like whatsapp_get_my_profile and whatsapp_update_group_name. 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 Guidelines3/5

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

Usage is implied rather than stated: it describes partial-update semantics (only passed fields change) and contact visibility, but never names an alternative tool or says when to call this versus whatsapp_get_my_profile. Adequate context, no explicit routing.

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. 107 tool updatesv2.0.0
    • Changedwhatsapp_archive_chat2 fields changed
      • changedInput schema / properties / archived / description
        Previous value: -"Whether to archive or unarchive"New value: +"Archive or unarchive"
      • changedInput schema / properties / chatId / description
        Previous value: -"Chat ID"New value: +"Chat JID"
    • Addedwhatsapp_block_contact
    • Addedwhatsapp_bulk_check_users
    • Addedwhatsapp_check_user
    • Addedwhatsapp_clear_chat
    • Addedwhatsapp_create_community
    • Addedwhatsapp_create_community_group
    • Changedwhatsapp_create_contact4 fields changed
      • changedInput schema / properties / firstName / description
        Previous value: -"First name of the contact (max 255 characters)"New value: +"First name (optional)"
      • changedInput schema / properties / fullName / description
        Previous value: -"Full name of the contact (max 255 characters)"New value: +"Full name of the contact"
      • changedInput schema / properties / id / description
        Previous value: -"Contact ID (phone number with @s.whatsapp.net)"New value: +"Phone number or JID of the contact"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fullName",
        -  "firstName"
        -]New value: +[
        +  "id",
        +  "fullName"
        +]
    • Changedwhatsapp_create_group2 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Group name (max 255 characters)"New value: +"Group name"
      • changedInput schema / properties / participants / description
        Previous value: -"List of participant phone numbers"New value: +"Participant JIDs"
    • Addedwhatsapp_create_newsletter
    • Addedwhatsapp_delete_chat
    • Changedwhatsapp_delete_message2 fields changed
      • changedInput schema / properties / chatId / description
        Previous value: -"Chat ID where the message is located"New value: +"Chat JID"
      • changedInput schema / properties / senderId / description
        Previous value: -"ID of the message sender"New value: +"Message sender JID"
    • Addedwhatsapp_delete_message_for_me
    • Addedwhatsapp_delete_status
    • Addedwhatsapp_download_media
    • Changedwhatsapp_edit_message4 fields changed
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / mentions
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / text / description
        Previous value: -"New text content for the message (max 4096 characters)"New value: +"New text content (max 4096 characters)"
      • changedInput schema / properties / to / description
        Previous value: -"Chat ID where the message is located"New value: +"Chat JID"
    • Addedwhatsapp_flush_history
    • Removedwhatsapp_get_account_info
    • Addedwhatsapp_get_blocklist
    • Changedwhatsapp_get_chat1 field changed
      • changedInput schema / properties / chatId / description
        Previous value: -"Chat ID"New value: +"Chat JID"
    • Addedwhatsapp_get_chat_business_profile
    • Addedwhatsapp_get_chat_picture
    • Addedwhatsapp_get_community
    • Addedwhatsapp_get_community_invite_link
    • Addedwhatsapp_get_community_participants
    • Addedwhatsapp_get_community_sub_groups
    • Changedwhatsapp_get_contact3 fields changed
      • removedInput schema / properties / contactId
        Removed value: -{
        -  "description": "Contact ID (phone number with @s.whatsapp.net)",
        -  "type": "string"
        -}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Contact JID",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "contactId"
        -]New value: +[
        +  "id"
        +]
    • Removedwhatsapp_get_contact_business
    • Removedwhatsapp_get_contact_picture
    • Changedwhatsapp_get_group3 fields changed
      • removedInput schema / properties / groupId
        Removed value: -{
        -  "description": "Group ID (with @g.us)",
        -  "type": "string"
        -}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Group JID",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "groupId"
        -]New value: +[
        +  "id"
        +]
    • Addedwhatsapp_get_group_info_from_link
    • Addedwhatsapp_get_group_invite_link
    • Addedwhatsapp_get_group_participants
    • Addedwhatsapp_get_group_requests
    • Removedwhatsapp_get_instance_settings
    • Addedwhatsapp_get_my_profile
    • Addedwhatsapp_get_newsletter
    • Addedwhatsapp_get_newsletter_by_invite
    • Changedwhatsapp_get_pair_code1 field changed
      • changedInput schema / properties / phone / description
        Previous value: -"Phone number (10-15 digits)"New value: +"Phone number (7-15 digits)"
    • Addedwhatsapp_get_privacy_settings
    • Addedwhatsapp_get_status_privacy
    • Addedwhatsapp_get_user_profile
    • Addedwhatsapp_join_group_with_invite
    • Addedwhatsapp_join_group_with_link
    • Addedwhatsapp_leave_community
    • Addedwhatsapp_leave_group
    • Addedwhatsapp_link_group_to_community
    • Addedwhatsapp_list_communities
    • Addedwhatsapp_list_newsletters
    • Addedwhatsapp_mark_chat_as_read
    • Changedwhatsapp_mark_message_read4 fields changed
      • changedInput schema / properties / chatId / description
        Previous value: -"Chat ID where the message is located"New value: +"Chat JID"
      • changedInput schema / properties / messageId / description
        Previous value: -"ID of the message to mark as read"New value: +"Message ID"
      • changedInput schema / properties / receiptType / description
        Previous value: -"Type of receipt to send"New value: +"Receipt type"
      • changedInput schema / properties / senderId / description
        Previous value: -"ID of the message sender"New value: +"Message sender JID"
    • Addedwhatsapp_mute_chat
    • Addedwhatsapp_mute_newsletter
    • Changedwhatsapp_pin_chat2 fields changed
      • changedInput schema / properties / chatId / description
        Previous value: -"Chat ID"New value: +"Chat JID"
      • changedInput schema / properties / pinned / description
        Previous value: -"Whether to pin or unpin"New value: +"Pin or unpin"
    • Addedwhatsapp_pin_message
    • Addedwhatsapp_post_image_status
    • Addedwhatsapp_post_text_status
    • Addedwhatsapp_post_video_status
    • Addedwhatsapp_reject_call
    • Addedwhatsapp_request_chat_messages
    • Addedwhatsapp_reset_community_invite_link
    • Addedwhatsapp_reset_group_invite_link
    • Removedwhatsapp_restart_instance
    • Changedwhatsapp_send_audio18 fields changed
      • removedInput schema / properties / audioBase64
        Removed value: -{
        -  "description": "Base64 encoded audio data (alternative to audioURL)",
        -  "optional": true,
        -  "type": "string"
        -}
      • removedInput schema / properties / audioURL
        Removed value: -{
        -  "description": "URL of the audio file to send (alternative to audioBase64)",
        -  "optional": true,
        -  "type": "string"
        -}
      • addedInput schema / properties / data
        Added value: +{
        +  "description": "Base64 encoded audio data",
        +  "type": "string"
        +}
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / isForwarded / description
        Removed value: -"Whether the message should be marked as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • removedInput schema / properties / mentions / description
        Removed value: -"List of phone numbers to mention"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • changedInput schema / properties / mimeType / description
        Previous value: -"MIME type of the audio file"New value: +"MIME type (auto-detected if omitted)"
      • removedInput schema / properties / mimeType / enum
        Removed value: -[
        -  "audio/mpeg",
        -  "audio/mp3",
        -  "audio/ogg",
        -  "audio/wav"
        -]
      • changedInput schema / properties / replyTo / description
        Previous value: -"ID of the message being replied to"New value: +"Message ID to reply to"
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "URL of the audio file",
        +  "type": "string"
        +}
      • removedInput schema / properties / viewOnce / description
        Removed value: -"Whether the audio should be sent as view-once"
      • removedInput schema / properties / viewOnce / optional
        Removed value: -true
      • changedInput schema / required
        Previous value: -[
        -  "to",
        -  "mimeType"
        -]New value: +[
        +  "to"
        +]
    • Changedwhatsapp_send_contact13 fields changed
      • changedInput schema / properties / displayName / description
        Previous value: -"Display name for the contact (alternative to vCard)"New value: +"Display name (auto-generates vCard)"
      • removedInput schema / properties / displayName / optional
        Removed value: -true
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / isForwarded / description
        Removed value: -"Whether the message should be marked as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • removedInput schema / properties / mentions / description
        Removed value: -"List of phone numbers to mention"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • removedInput schema / properties / replyTo / description
        Removed value: -"ID of the message being replied to"
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • removedInput schema / properties / vCard
        Removed value: -{
        -  "description": "Raw vCard string (alternative to displayName)",
        -  "optional": true,
        -  "type": "string"
        -}
      • addedInput schema / properties / vcard
        Added value: +{
        +  "description": "Raw vCard string",
        +  "type": "string"
        +}
    • Changedwhatsapp_send_document19 fields changed
      • changedInput schema / properties / caption / description
        Previous value: -"Caption for the document (max 1024 characters)"New value: +"Caption for the document"
      • removedInput schema / properties / caption / optional
        Removed value: -true
      • addedInput schema / properties / data
        Added value: +{
        +  "description": "Base64 encoded document data",
        +  "type": "string"
        +}
      • removedInput schema / properties / documentBase64
        Removed value: -{
        -  "description": "Base64 encoded document data (alternative to documentURL)",
        -  "optional": true,
        -  "type": "string"
        -}
      • removedInput schema / properties / documentURL
        Removed value: -{
        -  "description": "URL of the document to send (alternative to documentBase64)",
        -  "optional": true,
        -  "type": "string"
        -}
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / fileName
        Removed value: -{
        -  "description": "Name of the document file (max 255 characters)",
        -  "type": "string"
        -}
      • addedInput schema / properties / filename
        Added value: +{
        +  "description": "Filename shown to recipient",
        +  "type": "string"
        +}
      • removedInput schema / properties / isForwarded / description
        Removed value: -"Whether the message should be marked as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • removedInput schema / properties / mentions / description
        Removed value: -"List of phone numbers to mention in the caption"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • addedInput schema / properties / mimeType
        Added value: +{
        +  "description": "MIME type (auto-detected if omitted)",
        +  "type": "string"
        +}
      • removedInput schema / properties / replyTo / description
        Removed value: -"ID of the message being replied to"
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "URL of the document",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "to",
        -  "fileName"
        -]New value: +[
        +  "to",
        +  "filename"
        +]
    • Changedwhatsapp_send_image20 fields changed
      • changedInput schema / properties / caption / description
        Previous value: -"Caption for the image (max 1024 characters)"New value: +"Caption for the image"
      • removedInput schema / properties / caption / optional
        Removed value: -true
      • addedInput schema / properties / data
        Added value: +{
        +  "description": "Base64 encoded image data",
        +  "type": "string"
        +}
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / imageBase64
        Removed value: -{
        -  "description": "Base64 encoded image data (alternative to imageURL)",
        -  "optional": true,
        -  "type": "string"
        -}
      • removedInput schema / properties / imageURL
        Removed value: -{
        -  "description": "URL of the image to send (alternative to imageBase64)",
        -  "optional": true,
        -  "type": "string"
        -}
      • changedInput schema / properties / isForwarded / description
        Previous value: -"Whether the message should be marked as forwarded"New value: +"Mark as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • changedInput schema / properties / mentions / description
        Previous value: -"List of phone numbers to mention in the caption"New value: +"JIDs of mentioned users"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • changedInput schema / properties / mimeType / description
        Previous value: -"MIME type of the image"New value: +"MIME type (auto-detected if omitted)"
      • removedInput schema / properties / mimeType / enum
        Removed value: -[
        -  "image/jpeg",
        -  "image/png",
        -  "image/webp",
        -  "image/gif"
        -]
      • changedInput schema / properties / replyTo / description
        Previous value: -"ID of the message being replied to"New value: +"Message ID to reply to"
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "description": "Sender JID of the replied message",
        +  "type": "string"
        +}
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "URL of the image",
        +  "type": "string"
        +}
      • changedInput schema / properties / viewOnce / description
        Previous value: -"Whether the image should be sent as view-once"New value: +"Send as view-once"
      • removedInput schema / properties / viewOnce / optional
        Removed value: -true
      • changedInput schema / required
        Previous value: -[
        -  "to",
        -  "mimeType"
        -]New value: +[
        +  "to"
        +]
    • Changedwhatsapp_send_link17 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Description for the link preview (max 1000 characters)"New value: +"Link preview description"
      • removedInput schema / properties / description / optional
        Removed value: -true
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / isForwarded / description
        Removed value: -"Whether the message should be marked as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • changedInput schema / properties / jpegThumbnail / description
        Previous value: -"Base64 encoded JPEG thumbnail for the link preview"New value: +"Base64 JPEG thumbnail"
      • removedInput schema / properties / jpegThumbnail / optional
        Removed value: -true
      • removedInput schema / properties / mentions / description
        Removed value: -"List of phone numbers to mention in the message"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • removedInput schema / properties / replyTo / description
        Removed value: -"ID of the message being replied to"
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / text / description
        Previous value: -"Message text content (max 4096 characters)"New value: +"Message text (max 4096 characters)"
      • changedInput schema / properties / title / description
        Previous value: -"Title for the link preview (max 500 characters)"New value: +"Link preview title"
      • removedInput schema / properties / title / optional
        Removed value: -true
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • changedInput schema / properties / url / description
        Previous value: -"URL to include in the message"New value: +"URL to include"
    • Changedwhatsapp_send_location10 fields changed
      • changedInput schema / properties / address / description
        Previous value: -"Address of the location (max 1000 characters)"New value: +"Location address"
      • removedInput schema / properties / address / optional
        Removed value: -true
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude coordinate"New value: +"Latitude"
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude coordinate"New value: +"Longitude"
      • changedInput schema / properties / name / description
        Previous value: -"Name of the location (max 1000 characters)"New value: +"Location name"
      • removedInput schema / properties / name / optional
        Removed value: -true
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • changedInput schema / properties / url / description
        Previous value: -"URL related to the location (e.g., Google Maps link)"New value: +"Location URL"
      • removedInput schema / properties / url / optional
        Removed value: -true
    • Changedwhatsapp_send_reaction4 fields changed
      • changedInput schema / properties / reaction / description
        Previous value: -"Emoji reaction to send (max 10 characters)"New value: +"Emoji reaction (empty string to remove)"
      • changedInput schema / properties / senderId / description
        Previous value: -"ID of the original message sender"New value: +"Sender of the original message (for groups)"
      • changedInput schema / properties / to / description
        Previous value: -"Chat ID where the message is located"New value: +"Chat JID"
      • changedInput schema / required
        Previous value: -[
        -  "messageId",
        -  "to",
        -  "senderId",
        -  "reaction"
        -]New value: +[
        +  "messageId",
        +  "to",
        +  "reaction"
        +]
    • Changedwhatsapp_send_sticker16 fields changed
      • addedInput schema / properties / data
        Added value: +{
        +  "description": "Base64 encoded sticker data",
        +  "type": "string"
        +}
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / isAnimated / optional
        Removed value: -true
      • removedInput schema / properties / isForwarded / description
        Removed value: -"Whether the message should be marked as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • removedInput schema / properties / mentions / description
        Removed value: -"List of phone numbers to mention"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • removedInput schema / properties / mimeType
        Removed value: -{
        -  "description": "MIME type of the sticker (must be image/webp)",
        -  "enum": [
        -    "image/webp"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / replyTo / description
        Removed value: -"ID of the message being replied to"
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / stickerBase64
        Removed value: -{
        -  "description": "Base64 encoded sticker data (alternative to stickerURL)",
        -  "optional": true,
        -  "type": "string"
        -}
      • removedInput schema / properties / stickerURL
        Removed value: -{
        -  "description": "URL of the sticker to send (alternative to stickerBase64)",
        -  "optional": true,
        -  "type": "string"
        -}
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "URL of the sticker",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "to",
        -  "mimeType"
        -]New value: +[
        +  "to"
        +]
    • Changedwhatsapp_send_text8 fields changed
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "description": "Disappearing message timer",
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / isForwarded / description
        Previous value: -"Whether the message should be marked as forwarded"New value: +"Mark as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • changedInput schema / properties / mentions / description
        Previous value: -"List of phone numbers to mention in the message"New value: +"JIDs of mentioned users"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "description": "Sender JID of the message being replied to",
        +  "type": "string"
        +}
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID (user or group)"
    • Changedwhatsapp_send_video20 fields changed
      • changedInput schema / properties / caption / description
        Previous value: -"Caption for the video (max 1024 characters)"New value: +"Caption for the video"
      • removedInput schema / properties / caption / optional
        Removed value: -true
      • addedInput schema / properties / data
        Added value: +{
        +  "description": "Base64 encoded video data",
        +  "type": "string"
        +}
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / isForwarded / description
        Removed value: -"Whether the message should be marked as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • removedInput schema / properties / mentions / description
        Removed value: -"List of phone numbers to mention in the caption"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • changedInput schema / properties / mimeType / description
        Previous value: -"MIME type of the video"New value: +"MIME type (auto-detected if omitted)"
      • removedInput schema / properties / mimeType / enum
        Removed value: -[
        -  "video/mp4",
        -  "video/3gp",
        -  "video/mov",
        -  "video/avi"
        -]
      • changedInput schema / properties / replyTo / description
        Previous value: -"ID of the message being replied to"New value: +"Message ID to reply to"
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "description": "Sender JID of the replied message",
        +  "type": "string"
        +}
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "URL of the video",
        +  "type": "string"
        +}
      • removedInput schema / properties / videoBase64
        Removed value: -{
        -  "description": "Base64 encoded video data (alternative to videoURL)",
        -  "optional": true,
        -  "type": "string"
        -}
      • removedInput schema / properties / videoURL
        Removed value: -{
        -  "description": "URL of the video to send (alternative to videoBase64)",
        -  "optional": true,
        -  "type": "string"
        -}
      • changedInput schema / properties / viewOnce / description
        Previous value: -"Whether the video should be sent as view-once"New value: +"Send as view-once"
      • removedInput schema / properties / viewOnce / optional
        Removed value: -true
      • changedInput schema / required
        Previous value: -[
        -  "to",
        -  "mimeType"
        -]New value: +[
        +  "to"
        +]
    • Changedwhatsapp_send_voice16 fields changed
      • addedInput schema / properties / data
        Added value: +{
        +  "description": "Base64 encoded voice data",
        +  "type": "string"
        +}
      • addedInput schema / properties / ephemeralExpiration
        Added value: +{
        +  "enum": [
        +    "off",
        +    "24h",
        +    "7d",
        +    "90d"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / isForwarded / description
        Removed value: -"Whether the message should be marked as forwarded"
      • removedInput schema / properties / isForwarded / optional
        Removed value: -true
      • removedInput schema / properties / mentions / description
        Removed value: -"List of phone numbers to mention"
      • removedInput schema / properties / mentions / optional
        Removed value: -true
      • addedInput schema / properties / mimeType
        Added value: +{
        +  "description": "MIME type (auto-detected if omitted)",
        +  "type": "string"
        +}
      • removedInput schema / properties / replyTo / description
        Removed value: -"ID of the message being replied to"
      • removedInput schema / properties / replyTo / optional
        Removed value: -true
      • addedInput schema / properties / replyToSenderId
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / to / description
        Previous value: -"Recipient phone number (with @s.whatsapp.net) or group ID (with @g.us)"New value: +"Recipient JID"
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "URL of the voice file",
        +  "type": "string"
        +}
      • removedInput schema / properties / viewOnce / description
        Removed value: -"Whether the voice message should be sent as view-once"
      • removedInput schema / properties / viewOnce / optional
        Removed value: -true
      • removedInput schema / properties / voiceBase64
        Removed value: -{
        -  "description": "Base64 encoded voice data (alternative to voiceURL)",
        -  "optional": true,
        -  "type": "string"
        -}
      • removedInput schema / properties / voiceURL
        Removed value: -{
        -  "description": "URL of the voice file to send (alternative to voiceBase64)",
        -  "optional": true,
        -  "type": "string"
        -}
    • Removedwhatsapp_set_account_name
    • Removedwhatsapp_set_account_picture
    • Removedwhatsapp_set_account_presence
    • Removedwhatsapp_set_account_status
    • Addedwhatsapp_set_chat_ephemeral
    • Changedwhatsapp_set_chat_presence1 field changed
      • changedInput schema / properties / chatId / description
        Previous value: -"Chat ID"New value: +"Chat JID"
    • Addedwhatsapp_set_community_description
    • Addedwhatsapp_set_community_locked
    • Addedwhatsapp_set_community_name
    • Addedwhatsapp_set_community_picture
    • Addedwhatsapp_set_group_announce
    • Addedwhatsapp_set_group_join_approval
    • Addedwhatsapp_set_group_locked
    • Addedwhatsapp_set_group_member_add_mode
    • Addedwhatsapp_set_group_picture
    • Addedwhatsapp_set_newsletter_subscription
    • Addedwhatsapp_set_presence
    • Addedwhatsapp_set_privacy_setting
    • Changedwhatsapp_star_message4 fields changed
      • changedInput schema / properties / chatId / description
        Previous value: -"Chat ID where the message is located"New value: +"Chat JID"
      • changedInput schema / properties / messageId / description
        Previous value: -"ID of the message to star"New value: +"Message ID"
      • changedInput schema / properties / senderId / description
        Previous value: -"ID of the message sender"New value: +"Message sender JID"
      • addedInput schema / properties / starred
        Added value: +{
        +  "description": "True to star, false to unstar",
        +  "type": "boolean"
        +}
    • Addedwhatsapp_subscribe_chat_presence
    • Removedwhatsapp_subscribe_contact_presence
    • Addedwhatsapp_sync_contacts
    • Addedwhatsapp_unblock_contact
    • Addedwhatsapp_unlink_community_group
    • Removedwhatsapp_update_api_key
    • Addedwhatsapp_update_community_participants
    • Removedwhatsapp_update_contact
    • Addedwhatsapp_update_group_description
    • Changedwhatsapp_update_group_name3 fields changed
      • removedInput schema / properties / groupId
        Removed value: -{
        -  "description": "Group ID (with @g.us)",
        -  "type": "string"
        -}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Group JID",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "groupId",
        -  "name"
        -]New value: +[
        +  "id",
        +  "name"
        +]
    • Addedwhatsapp_update_group_participants
    • Addedwhatsapp_update_group_requests
    • Removedwhatsapp_update_instance_settings
    • Addedwhatsapp_update_my_profile
  2. 45 tool updates
    • First observedwhatsapp_archive_chat
    • First observedwhatsapp_create_contact
    • First observedwhatsapp_create_group
    • First observedwhatsapp_delete_message
    • First observedwhatsapp_edit_message
    • First observedwhatsapp_get_account_info
    • First observedwhatsapp_get_chat
    • First observedwhatsapp_get_chats
    • First observedwhatsapp_get_contact
    • First observedwhatsapp_get_contact_business
    • First observedwhatsapp_get_contact_picture
    • First observedwhatsapp_get_contacts
    • First observedwhatsapp_get_group
    • First observedwhatsapp_get_groups
    • First observedwhatsapp_get_instance_settings
    • First observedwhatsapp_get_pair_code
    • First observedwhatsapp_get_qr_code
    • First observedwhatsapp_get_qr_code_image
    • First observedwhatsapp_get_session_status
    • First observedwhatsapp_logout
    • First observedwhatsapp_mark_message_read
    • First observedwhatsapp_pin_chat
    • First observedwhatsapp_restart_instance
    • First observedwhatsapp_send_audio
    • First observedwhatsapp_send_contact
    • First observedwhatsapp_send_document
    • First observedwhatsapp_send_image
    • First observedwhatsapp_send_link
    • First observedwhatsapp_send_location
    • First observedwhatsapp_send_reaction
    • First observedwhatsapp_send_sticker
    • First observedwhatsapp_send_text
    • First observedwhatsapp_send_video
    • First observedwhatsapp_send_voice
    • First observedwhatsapp_set_account_name
    • First observedwhatsapp_set_account_picture
    • First observedwhatsapp_set_account_presence
    • First observedwhatsapp_set_account_status
    • First observedwhatsapp_set_chat_presence
    • First observedwhatsapp_star_message
    • First observedwhatsapp_subscribe_contact_presence
    • First observedwhatsapp_update_api_key
    • First observedwhatsapp_update_contact
    • First observedwhatsapp_update_group_name
    • First observedwhatsapp_update_instance_settings

TDQS

A3.6/5.0

Scored across 101 tools

Disambiguation4/5

Tools have distinct purposes and descriptions explicitly cross-reference to differentiate similar ones (e.g., send_audio vs send_voice, delete_message vs delete_message_for_me). However, the sheer number of tools may still cause some confusion in selection.

Naming Consistency5/5

All tools follow a consistent whatsapp_ prefix with snake_case verb_noun pattern, with logical verb choices (get vs list). No mixed conventions.

Tool Count1/5

101 tools is extreme for this domain, far exceeding the recommended 3-15 range. Many tools are highly granular and could be consolidated.

Completeness4/5

The surface covers messaging, chats, groups, communities, newsletters, status, calls, contacts, and session management comprehensively. Missing features like polls or live location sharing prevent a perfect score.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to interact with WhatsApp through the WAHA (WhatsApp HTTP API) platform. Supports chat management, message operations including sending/receiving messages, and marking chats as read.
    52
    63 npm
    10
    ISC
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables WhatsApp automation through MCP protocol, allowing users to manage sessions, send messages, handle groups/communities, and access contacts through natural language interactions with AI agents.
    7 npm
    -
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables interaction with WhatsApp through the Uazapi API, allowing users to send text and media messages, manage contacts, and list conversations through natural language.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage WhatsApp communications by sending messages, managing groups, and analyzing conversation patterns via the WaliChat API. It supports tasks like message scheduling, contact management, and automated business workflows through natural language commands.
    18 npm
    1
    MIT