Skip to main content
Glama
razvangirgiz

wazap-mcp

by razvangirgiz

Draft a WhatsApp message

send_message

Drafts WhatsApp messages, media, polls, locations, or forwards and returns a draft ID and preview to confirm 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

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
send_atNoSend later: "2026-10-12T09:00" in time_zone, or with an offset; 1 minute to 365 days ahead
latitudeNo
reply_toNo
file_pathNoMedia: absolute path on the machine running wazap
longitudeNo
time_zoneNoIANA zone for send_at, e.g. "Europe/Bucharest"; the server's by default
account_idNo
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. Changed1 schema field changedv1.6.0
    • removedInput schema / properties / account_id / description
      Removed value: -"Account id"
  2. Changed2 schema fields changedv1.4.0
    • addedInput schema / properties / send_at
      Added value: +{
      +  "description": "Send later: \"2026-10-12T09:00\" in time_zone, or with an offset; 1 minute to 365 days ahead",
      +  "maxLength": 40,
      +  "minLength": 10,
      +  "type": "string"
      +}
    • addedInput schema / properties / time_zone
      Added value: +{
      +  "description": "IANA zone for send_at, e.g. \"Europe/Bucharest\"; the server's by default",
      +  "maxLength": 64,
      +  "minLength": 1,
      +  "type": "string"
      +}
  3. 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"
      +}
  4. 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"
  5. 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"
      +}
  6. First observedv0.9.3

TDQS

A4.4/5.0
Behavior4/5

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

Adds substantial context beyond the annotations: no message leaves the system, the call returns draft_id plus a preview covering recipient, number and exact text, and the preview must be shown before confirm_send. It does not cover rate limits or per-media-type side effects, so it stops short of 5, but the highest-risk behavior (accidental send) is fully disclosed.

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

Conciseness5/5

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

Two dense sentences, front-loaded with the non-sending guarantee before the workflow. Every clause carries instruction the agent needs — the trigger condition, the return payload, and the confirmation gate — with no restatement of the title or schema.

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 16-parameter drafting tool with no output schema, the description supplies the missing return-value summary (draft_id and preview) and the confirmation protocol, which is the critical gap. It is slightly thin on the scheduled-send and mention paths, though those are covered by schema descriptions.

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

Parameters3/5

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

Schema coverage is 75% and the schema already documents per-parameter meaning including the empty-text convention for forwards, so the baseline of 3 applies. The description only names the two required inputs in passing and adds nothing about send_at scheduling, time_zone, mention_ids or account_id.

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

Purpose5/5

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

Opens with a specific verb and enumerated resource types ("Drafts text, media, polls, locations, forwards") and immediately bounds scope with "sends nothing." That clause alone separates it from the sibling confirm_send and edit_message 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 trigger ("Call it as soon as you have recipient and text") and an explicit routing rule to the alternative ("confirm_send only on a yes to this text and recipient"). It even resolves an ambiguous case — a send in the same request counts as the yes — leaving nothing to inference.

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