Skip to main content
Glama
razvangirgiz

wazap-mcp

by razvangirgiz

Draft a WhatsApp message

send_message

Prepares a WhatsApp message draft (text, media, poll, location, or forward) and returns a preview with draft ID, recipient, and exact text for confirmation before sending.

Instructions

Drafts text, media, polls, locations, forwards; sends nothing. Call it as soon as you have recipient and text: it returns draft_id and preview (recipient, number, exact text). Show that preview; confirm_send only on a yes to this text and recipient — a send in the same request is that yes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
asNoMedia: a plain document, a voice note, a looping GIF
urlNoMedia: public http(s) URL
textYesThe message, or the caption, poll question or place name; "" for a forward, a voice note or audio
addressNoLocation: shown under the name
chat_idYesChat id, or a phone number
forwardNoForward this message; text ""
optionsNoPoll answers
latitudeNo
reply_toNo
file_pathNoMedia: absolute path on the machine running wazap
longitudeNo
account_idNoAccount id
mention_idsNoChat ids to @-mention; write @<number> in text for each
multi_selectNoPoll: several answers allowed

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changedv1.0.3
    • changedInput schema / properties / account_id / description
      Previous value: -"Registry account id (default, work, …). Omit to resolve from chat_id or message_id, or the default account."New value: +"Account id"
    • addedInput schema / properties / address
      Added value: +{
      +  "description": "Location: shown under the name",
      +  "maxLength": 500,
      +  "type": "string"
      +}
    • addedInput schema / properties / as
      Added value: +{
      +  "description": "Media: a plain document, a voice note, a looping GIF",
      +  "enum": [
      +    "document",
      +    "voice",
      +    "gif"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / chat_id / description
      Previous value: -"Chat id as returned by another tool (\"<digits>@s.whatsapp.net\" or \"<id>@g.us\"), or a phone number in international format"New value: +"Chat id, or a phone number"
    • addedInput schema / properties / file_path
      Added value: +{
      +  "description": "Media: absolute path on the machine running wazap",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / forward
      Added value: +{
      +  "$ref": "#/properties/reply_to",
      +  "description": "Forward this message; text \"\""
      +}
    • addedInput schema / properties / latitude
      Added value: +{
      +  "maximum": 90,
      +  "minimum": -90,
      +  "type": "number"
      +}
    • addedInput schema / properties / longitude
      Added value: +{
      +  "maximum": 180,
      +  "minimum": -180,
      +  "type": "number"
      +}
    • changedInput schema / properties / mention_ids / description
      Previous value: -"Chat ids to @-mention; write @<number> in the text for each, or wazap adds it at the end"New value: +"Chat ids to @-mention; write @<number> in text for each"
    • addedInput schema / properties / multi_select
      Added value: +{
      +  "description": "Poll: several answers allowed",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / options
      Added value: +{
      +  "description": "Poll answers",
      +  "items": {
      +    "maxLength": 100,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 12,
      +  "minItems": 2,
      +  "type": "array"
      +}
    • removedInput schema / properties / reply_to / description
      Removed value: -"Quote-reply to this message"
    • changedInput schema / properties / text / description
      Previous value: -"The message text"New value: +"The message, or the caption, poll question or place name; \"\" for a forward, a voice note or audio"
    • removedInput schema / properties / text / minLength
      Removed value: -1
    • addedInput schema / properties / url
      Added value: +{
      +  "description": "Media: public http(s) URL",
      +  "format": "uri",
      +  "type": "string"
      +}
  2. Changed1 schema field changedv0.21.0
    • changedInput schema / properties / mention_ids / description
      Previous value: -"Chat ids to @-mention; include their names in the text yourself"New value: +"Chat ids to @-mention; write @<number> in the text for each, or wazap adds it at the end"
  3. Changed1 schema field changedv0.15.0
    • addedInput schema / properties / account_id
      Added value: +{
      +  "description": "Registry account id (default, work, …). Omit to resolve from chat_id or message_id, or the default account.",
      +  "minLength": 1,
      +  "type": "string"
      +}
  4. First observedv0.9.3

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only signal not read-only, not idempotent, and not destructive. The description adds critical behavior beyond that: no message is sent, a draft_id and preview are returned, and the preview must be shown to the user. It doesn't cover permissions or error cases, but the primary side effect and workflow are clearly disclosed.

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 information-dense sentences with no filler. The first sentence front-loads the core identity ('Drafts... sends nothing') and the second packs the entire invocation workflow. Slightly dense, but every clause earns its place.

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

Completeness4/5

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

There is no output schema, but the description compensates by stating the return values (draft_id and preview) and the confirmation protocol. All 14 parameters are schema-documented, and the description covers the essential call conditions and the handoff to confirm_send. Minor gaps like media URL/path constraints are already handled by the schema.

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

Parameters3/5

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

Schema coverage is 79%, with most parameters already well-described in the schema (text, url, as, options, address, etc.). The description maps content types to parameter groups ('media' → as/url/file_path, 'polls' → options/multi_select) but adds no per-parameter detail beyond what the schema 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 'Drafts' and resource 'WhatsApp message', then enumerates the exact content types (text, media, polls, locations, forwards). The explicit phrase 'sends nothing' sharply distinguishes this from the sibling confirm_send, so an agent can tell them apart immediately.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance: 'Call it as soon as you have recipient and text'. It also names the alternative tool (confirm_send) and specifies the condition for using it: only after the user confirms the exact text and recipient. The same-request send nuance is also spelled out.

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