io.github.razvangirgiz/wazap
NPM · WAZAP-MCP
WhatsApp for your agent: chats, messages, media, contacts and groups behind MCP tools.
Available components
Last scanned (20 hours ago)
Scores higher than 82% of npm servers
Category Communication
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 82 of 297 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to razvangirgiz/wazap). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 12 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability72
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3928 tokens (~170/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
- Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage89
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 61% of tool parameters carry a description.Partial
- Structured output schemas are declared (70% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 24 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +1
- Security disclosure: unverified → fail ▼ functional
- 3 Nov 26 −5
- Security disclosure: fail → unverified ▼ functional
- Stability: pass → 0.67 functional
- 1 Nov 26 0
- Security disclosure: unverified → fail ▼ functional
- 31 Oct 26 0
- Security disclosure: fail → unverified ▼ functional
- 24 Oct 26 −5
- CVE-2023-54404 affects this package: high ▼ security
- Known CVEs: pass → fail ▼ security
- 23 Oct 26 +19
- Known CVEs: unverified → pass ▲ security
- Stability: fail → pass ▲ security
- Dependency health: unverified → 0.87 ▲ functional
- 22 Oct 26 −1
- Stability: fail → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Known CVEs: unverified → pass ▲ security
- Tool coverage: 78% → 61% ▼ functional
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Dependency health: unverified → 0.86 ▲ functional
- Package version: 1.4.7 → 1.6.0 functional
- Package version: 1.4.7 → 1.5.2 functional
- Package version: 1.4.7 → 1.5.1 functional
- Package version: 1.4.7 → 1.5.0 functional
- 21 Oct 26 −11
- Stability: fail → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Known CVEs: pass → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Dependency health: 0.86 → unverified ▼ functional
- Package version: 1.4.2 → 1.4.7 functional
- Package version: 1.4.2 → 1.4.6 functional
- Package version: 1.4.2 → 1.4.4 functional
- Package version: 1.4.2 → 1.4.3 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Analysed npm/wazap-mcp@1.6.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | razvangirgiz/wazap |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/razvangirgiz/wazap/.github/workflows/publish.yml@refs/tags/v1.6.0 |
| Rekor log index | 3386333520 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:d3ea1fcc8f00d7cb10f49bc1c0bd6d8b60a621e1cf4dd77096bb2b63fbd2f1ab910fb8a31190df6c0094f3d1fd3d30b5027d6489c0a938e058fed6655 |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 297 packages
| Packages resolved | 297 |
|---|---|
| Stale | 82 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
catch_up Catch up on what the user missed ~172
What the user missed, all accounts, within budget_tokens: waiting (every open ask of 14 days, whatever the window), mentions, calls, people, groups, stories. account_id narrows it to one account; get_status names them. The mark moves first; a lost answer is since: "previous". more.cursor: the rest.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| budget_tokens | integer | – | Answer length in tokens |
| cursor | string | – | more.cursor |
| hours | number | – | The last N hours instead; never moves the mark |
| include | array | – | Only these sections; the mark then stays |
| since | string | – | "last" (default); "previous" repeats that catch-up; or an ISO date or time from the last 14 days |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string|null | yes | – |
| accounts | array | yes | – |
| addressed | array | yes | – |
| approx_tokens | number | yes | – |
| direct | array | yes | – |
| footer | – | yes | On the last page: what the entries leave out |
| groups | array | yes | – |
| missed_calls | array | yes | – |
| more | – | yes | Set when entries are left: call catch_up again with more.cursor |
| notes | array | – | Caveats to act on or tell the user |
| stories | array | yes | – |
| waiting | array | yes | – |
| window | object | yes | – |
No examples provided.
confirm_send Send a drafted WhatsApp message ~105
Send a draft the user approved — this text, this recipient: the only call that sends, once per draft. A yes about something else: show the preview again and ask. Expired, missing or stale: draft again, show the new preview, ask again. SEND_OUTCOME_UNKNOWN: read_messages, never redo it unasked.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| draft_id | string | yes | From send_message; one with send_at is scheduled, not sent |
No output schema declared.
No examples provided.
delete_message Delete a WhatsApp message ~91
Delete a message; confirm with the user first. for_everyone: true retracts it for everyone within 2 days: the account's own message, or anyone's in a group where it is admin. for_everyone: false removes any message from the linked account's devices only.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| for_everyone | boolean | yes | – |
| message_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| for_everyone | boolean | yes | – |
| message_id | string | yes | – |
No examples provided.
edit_message Edit a WhatsApp message you sent ~60
Replace the text of a message the linked account sent. WhatsApp allows it for 15 minutes after sending; later, send a correction instead.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| message_id | string | yes | – |
| text | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| chat_id | string | yes | – |
| message_id | string | yes | – |
| text | string | yes | – |
| timestamp | string | yes | – |
No examples provided.
find_contact Find who the user means ~209
Who a name, nickname, relationship ("mama"), filed detail ("AP-123"), group, number or id means, before drafting. resolved: contact.chat_id, with number, note, tags, details and, when writing, context. ambiguous or not_found: ask the user; never guess. Several accounts: see fix. tag: its people.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| include_context | boolean | – | Recent messages and the user's style, when resolved in a write session |
| kind | string | – | – |
| limit | integer | – | Ambiguous: at most 5 per account; a tag list: up to 50 |
| name | string | – | What the user calls them ("Ana", "mamei", "fotbal"), or a number or id |
| qualifier | string | – | Tells two apart: "contabilitate", a group, the last 4 digits |
| tag | string | – | List everyone filed under this tag instead |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string|null | – | The account that answered; null when several accounts were searched and none answered alone |
| accounts_searched | array | – | – |
| accounts_unavailable | array | – | – |
| can_draft | boolean | – | Resolved in a session that cannot send |
| candidates | array | – | Only when ambiguous; best first |
| closest | array | – | Only when not_found |
| contact | object | – | Only when resolved |
| contacts | array | – | Only when listed: everyone filed under the tag |
| context | object | – | Only when resolved, in a session that can write: what a draft to them is written after |
| fix | string | – | What to do next, when not resolved |
| next | string | – | Resolved: how a message to them starts |
| notes | array | – | Caveats to act on or tell the user |
| omitted | array | – | Only when listed and cut by limit: how many more on each account |
| query | object | yes | – |
| status | string | yes | – |
No examples provided.
get_group_info Get WhatsApp group info ~85
A group's name, description, owner and participants (up to 500), whether the account is admin, its settings (info_locked, member_add_mode, join_approval, disappearing_seconds), its community, and the invite link for an admin. Call it before manage_group.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| group_id | string | yes | <id>@g.us |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| announcement_only | boolean | yes | – |
| chat_id | string | yes | – |
| community | object | – | – |
| created_at | string|null | yes | – |
| description | string|null | yes | – |
| disappearing_seconds | number | yes | – |
| i_am_admin | boolean | yes | – |
| info_locked | boolean | yes | – |
| invite_link | string | – | – |
| join_approval | boolean | yes | – |
| member_add_mode | string | yes | – |
| name | string | yes | – |
| owner | string|null | yes | – |
| participant_count | number | yes | – |
| participants | array | yes | – |
No examples provided.
get_media Get the media of a WhatsApp message ~138
What a message's media holds: a voice note or audio as its transcript (kept once made; an API provider bills it), or with save_to its file; a photo attached as an image; any file saved at path on the machine running wazap; a copy kept on arrival answers first. MEDIA_UNAVAILABLE: gone, none kept.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| language | string | – | What is spoken, e.g. "ro" |
| message_id | string | yes | – |
| save_to | string | – | Absolute directory; default <data-dir>/media. A recording: its file, and no new transcript |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| caption | string|null | yes | – |
| filename | string | – | The name it was saved under |
| image_attached | boolean | – | The photo, or a small preview of it, is attached |
| message_id | string | yes | – |
| mime | string | – | – |
| original_filename | string|null | yes | – |
| path | string | – | – |
| sender | – | yes | – |
| size | number | – | – |
| source | string | – | kept: the copy wazap kept when it arrived; whatsapp: downloaded now |
| transcript | object | – | – |
| transcript_unavailable | object | – | – |
| type | string|null | yes | – |
No examples provided.
get_message Get one WhatsApp message in full ~83
One message in full, its words never cut: the message it quotes, each reaction with who left it, poll votes and event answers by person, its media, and on the user's own messages who it reached and who read it. Without account_id the id is looked for on every account.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| message_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| chat_id | string | yes | – |
| message_id | string | yes | – |
| text | string | yes | – |
| timestamp | string | yes | – |
No examples provided.
get_status Get the WhatsApp connection status ~93
Whether the account works: status (connected, not_linked, linking with its pairing code…), sync, how fresh the history is, webhook delivery, versions. accounts lists every account, with default. Call it on NOT_CONNECTED, NOT_LINKED or SYNC_IN_PROGRESS.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| include_picture | boolean | – | Add picture_url, the account's own profile photo (the link expires) |
No output schema declared.
No examples provided.
learn Learn how to use the WhatsApp tools ~59
The guide to these tools: ids, account_id with several accounts, the workflows, the message shape and what to do about each error code. Read it once, before the other tools; it never touches WhatsApp.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
No output schema declared.
No examples provided.
link_account Link a WhatsApp account ~93
Pair wazap with the user's WhatsApp when get_status says not_linked, logged_out, session_corrupt or auth_failure. Show the user the code it returns: WhatsApp → Settings → Linked devices → Link a device → Link with phone number instead. Then poll get_status every 10 s until connected.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| phone | string | yes | e.g. +15550100 |
No output schema declared.
No examples provided.
list_chats List WhatsApp chats ~131
Conversations, most recently active first: chat_id, name, type, unread count, last message, and whether archived, pinned, muted or left. Use it to find a chat_id.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| cursor | string | – | Opaque next_cursor from the preceding page; keep the same filter |
| filter | string | – | "all" leaves out archived |
| include_pictures | boolean | – | Add picture_url, each chat's profile photo (links expire) |
| limit | integer | – | – |
| tag | string | – | Only chats with people filed under this tag |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| chats | array | yes | – |
| count | number | yes | – |
| filter | string | yes | – |
| next_cursor | string|null | – | – |
| sync | string | yes | – |
| tag | string | – | – |
No examples provided.
list_contacts List the phone's address book ~117
The phone's address book on one account, a page at a time: saved name, phone (E.164), chat_id, contact_id, and when the last direct message was and its direction. No message words; #private people left out. address_book_synced false: not arrived yet.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| cursor | string | – | next from the previous page |
| limit | integer | – | – |
| order | string | – | recent: latest direct chat first, then the rest in address book order |
No output schema declared.
No examples provided.
manage_chat Manage a WhatsApp chat ~152
Preview archive, pin, mute, pin_message, star_message, clear, delete, block and undo. After approval repeat chat_id/action with confirmation_id, without options. Expires in 15m; one attempt. mark_read runs directly.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| action | string | yes | – |
| chat_id | string | yes | Chat id, or a phone number |
| confirmation_id | string | – | From preview; omit message/duration options |
| message_id | string | – | pin_message, star_message and their undo; in chat_id |
| mute_hours | integer | – | mute: 8 by default |
| pin_hours | number | – | pin_message: 168 by default |
No output schema declared.
No examples provided.
manage_group Manage a WhatsApp group ~263
Create a group, join one from an invite (preview first, then confirm: true), or administer one: members, name, description, photo, invite link, join requests, settings, leave. Most actions need admin. Every change shows to all members at once: say what will change, wait for a yes.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| action | string | yes | – |
| confirm | boolean | – | join: true joins, after the user said yes to the preview |
| file_path | string | – | set_picture: local JPEG, PNG or WebP |
| group_id | string | – | "<id>@g.us"; every action but create and join |
| invite | string | – | join: a chat.whatsapp.com link or its code |
| message_id | string | – | join: an invite message instead |
| participant_ids | array | – | create, add, remove, promote, demote, approve or reject |
| url | string | – | set_picture: public image URL |
| value | string | – | The name (create, set_subject) or description; "on"/"off"; set_add_mode "admins"/"all"; set_disappearing "off"/"24h"/"7d"/"90d" |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| action | string | yes | – |
| applied | string | – | – |
| description | string|null | – | – |
| group_id | string|null | yes | – |
| invite_link | string | – | – |
| join_approval | boolean|null | – | – |
| join_requests | array | – | – |
| name | string|null | – | – |
| next | string | – | join preview: the step after the user's yes |
| participant_count | number|null | – | – |
| participants | array | – | – |
| profile_pic_url | string|null | – | – |
| status | string | – | join: preview joins nothing |
No examples provided.
react_to_message React to a WhatsApp message ~49
React to a message with one emoji, or pass "" to take your reaction off.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| emoji | string | yes | – |
| message_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| emoji | string | yes | – |
| message_id | string | yes | – |
No examples provided.
read_messages Read messages from a WhatsApp chat ~212
Read one chat, oldest to newest: the latest messages, or older ones with before (wazap asks the phone when the local history runs out). Long texts are cut unless full_text. chat_id "status" reads the stories people posted, newest first, from the last hours (at most a day); they show nowhere else.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| before | string | – | The oldest message_id you have |
| chat_id | string | yes | Chat id from another tool, a phone number, or "status" for stories |
| full_text | boolean | – | Each message's text whole; a list cuts long ones otherwise |
| hours | integer | – | "status" only: how far back, 24 by default |
| include_previews | boolean | – | Attach a small image of each photo, up to 12 |
| limit | integer | – | – |
| types | array | – | Only these types; limit counts them, so ["call"] gives that many calls |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| chat_id | string | yes | – |
| count | number | yes | – |
| hours | number | – | – |
| messages | array | yes | – |
| notes | array | – | Caveats to act on or tell the user |
| older | object | – | before ran past the local history: the phone was asked, and sent this many |
| omitted | number | – | Older stories left out by limit |
| preview_count | number | yes | – |
| sync | string | yes | – |
| types | array | – | – |
| unconfirmed_sends | array | – | Sends WhatsApp has not echoed yet: outcome unknown, not failed |
No examples provided.
remember Remember something about a person ~186
Keep what the user says about someone, locally, never on WhatsApp: a note, tags, details find_contact matches ({"relatie": "mama"}), or handled: true for an ask dealt with elsewhere. #private keeps their words out of what you did not ask about them by name; #no-catchup keeps them out of catch_up.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| add_tags | array | – | e.g. ["client"] |
| chat_id | – | yes | Several: tags and fields only |
| fields | object | – | e.g. {"nickname": "Mișu", "role": "contabil"}; "" deletes a key |
| handled | boolean | – | Off catch_up's waiting until they write again |
| note | string | – | "" removes it |
| remove_fields | array | – | – |
| remove_tags | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| chat_id | string | – | – |
| fields | object | – | – |
| handled | object | – | The ask taken off the waiting list; null when nothing was open |
| is_business | boolean | – | – |
| is_my_contact | boolean | – | – |
| name | string | – | – |
| note | string | – | – |
| number | string|null | – | – |
| people | array | – | Several chat_ids: each one's card |
| tags | array | – | – |
No examples provided.
reminder Set, list or cancel a reminder about a chat ~245
The user's reminders about a chat, kept locally and posted to their webhook when due: create (chat_id, note, after_hours or due_at); condition "no_reply" fires only if nobody wrote there since ("if Ana has not answered in 2 days"). list, cancel. Nothing goes to WhatsApp.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| action | string | – | – |
| after_hours | number | – | create: due this many hours from now |
| chat_id | string | – | create: the chat it is about |
| condition | string | – | no_reply: skipped if someone wrote in the chat after it was set |
| due_at | string | – | create: due then, "2026-10-14T09:00" in time_zone, or with an offset |
| include_closed | boolean | – | list: the week's fired, skipped and cancelled ones too |
| limit | integer | – | – |
| note | string | – | create: what to remind the user of |
| reminder_id | string | – | cancel: from create or list |
| time_zone | string | – | IANA zone for due_at; the server's by default |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| action | string | yes | – |
| cancelled | boolean | – | – |
| count | number | yes | – |
| notes | array | – | Caveats to act on or tell the user |
| reminders | array | yes | – |
No examples provided.
scheduled_messages List or cancel scheduled WhatsApp messages ~127
The account's scheduled messages: list (waiting ones soonest first, then the week's sent, missed, failed and cancelled ones) or cancel one by schedule_id before it goes. To schedule one, send_message with send_at, then confirm_send. Tell the user about every missed or failed one.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| action | string | – | – |
| include_closed | boolean | – | list: the week's sent, missed, failed and cancelled ones too |
| limit | integer | – | – |
| schedule_id | string | – | cancel: from the list or confirm_send |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| action | string | yes | – |
| cancelled | boolean | – | – |
| count | number | yes | – |
| scheduled | array | yes | – |
No examples provided.
search Search WhatsApp messages ~221
Find by meaning and words, with nearby source contexts. Use the question and known context, never guessed filters. Auto: exact codes/quoted literals; words: substrings. Check corrections; assessment flags ambiguity. Cite the supporting message.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| before | string | – | Older lexical matches; auto uses words with a cursor |
| chat_id | string | – | Chat id, or a phone number |
| from | string | – | "me", a number, an id, or a name only one person has |
| full_text | boolean | – | Each message's text whole; a list cuts long ones otherwise |
| include_context | boolean | – | Nearby sources for the best five hits |
| limit | integer | – | – |
| match | string | – | auto: questions by meaning, codes/quotes by words |
| query | string | yes | – |
| since | string | – | ISO date or time |
| tag | string | – | Only chats with people filed under this tag |
| until | string | – | ISO date or time |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| assessment | object | yes | – |
| changed_during_read | boolean | – | – |
| contexts | array | – | – |
| count | number | yes | – |
| coverage | – | – | null: it could not be counted |
| freshness | – | yes | – |
| from_resolved | string | – | – |
| index | – | – | – |
| messages | array | yes | – |
| mode | string | yes | keyword_fallback: meaning search could not run, see recall_unavailable |
| next_before | string|null | – | – |
| notes | array | – | Caveats to act on or tell the user |
| private_omitted | number | – | Matches from people tagged #private, left out: chat_id or from shows them |
| query | string | yes | – |
| recall_unavailable | object | – | – |
| scan_capped | boolean | – | Older matches may be missing: narrow the search |
| searched_back_to | string | – | Older messages were not searched: narrow the search |
| sync | string | yes | – |
No examples provided.
send_message Draft a WhatsApp message ~339
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.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| address | string | – | Location: shown under the name |
| as | string | – | Media: a plain document, a voice note, a looping GIF |
| chat_id | string | yes | Chat id, or a phone number |
| file_path | string | – | Media: absolute path on the machine running wazap |
| forward | – | – | Forward this message; text "" |
| latitude | number | – | – |
| longitude | number | – | – |
| mention_ids | array | – | Chat ids to @-mention; write @<number> in text for each |
| multi_select | boolean | – | Poll: several answers allowed |
| options | array | – | Poll answers |
| reply_to | string | – | – |
| send_at | string | – | Send later: "2026-10-12T09:00" in time_zone, or with an offset; 1 minute to 365 days ahead |
| text | string | yes | The message, or the caption, poll question or place name; "" for a forward, a voice note or audio |
| time_zone | string | – | IANA zone for send_at, e.g. "Europe/Bucharest"; the server's by default |
| url | string | – | Media: public http(s) URL |
No output schema declared.
No examples provided.
wait_for_messages Wait for new WhatsApp messages ~118
Wait for messages from other people, up to timeout_seconds, and return them with a cursor: pass it to the next call so nothing that lands between calls is missed. addressed_to_me wakes only for direct messages, mentions and replies to the user. For agents that stay on the line.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | – |
| addressed_to_me | boolean | – | – |
| chat_id | string | – | Chat id, or a phone number |
| cursor | string | – | From the previous call |
| timeout_seconds | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| count | number | yes | – |
| cursor | string | yes | Pass to the next call |
| cursor_reset | boolean | yes | The cursor was from another run; the wait started now |
| messages | array | yes | – |
| timed_out | boolean | yes | – |
No examples provided.
How do I install the io.github.razvangirgiz/wazap MCP server?
io.github.razvangirgiz/wazap runs locally as an npm package, launched with npx -y wazap-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · wazap-mcp
claude mcp add razvangirgiz-wazap -- npx -y wazap-mcp
What is the io.github.razvangirgiz/wazap MCP server?
io.github.razvangirgiz/wazap is an MCP server listed in the public MCP registry as io.github.razvangirgiz/wazap. WhatsApp for your agent: chats, messages, media, contacts and groups behind MCP tools. This page covers its npm package (wazap-mcp).
Is the io.github.razvangirgiz/wazap MCP server safe to use?
io.github.razvangirgiz/wazap scores 84 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 4 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.razvangirgiz/wazap MCP server expose?
io.github.razvangirgiz/wazap exposes 23 tools: learn, get_status, link_account, list_chats, read_messages, and 18 more. Their descriptions and schemas cost roughly 3,348 tokens of context every time the server is loaded.
Is the io.github.razvangirgiz/wazap MCP server still maintained?
io.github.razvangirgiz/wazap is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.razvangirgiz/wazap MCP server under?
io.github.razvangirgiz/wazap declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.