{"name":"io.github.mcp-dir/whatsapp-mcp","slug":"mcp-dir-whatsapp-mcp","title":"WhatsApp","description":"Connect a personal/Business WhatsApp account via QR pairing (multi-device, like WhatsApp Web). Send ","url":"https://mcp.market/server/mcp-dir-whatsapp-mcp","rating":null,"grade":"B","score":79,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":15,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-08-30T19:50:30.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-02T02:45:32.502Z","last_ok_at":"2026-11-02T02:45:32.502Z","latency_ms":32},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/mcp-dir/whatsapp-mcp","website":null,"version":"0.1.0","remotes":[{"type":"streamable-http","url":"https://api.mcp.ai/p_whatsapp"}],"packages":[],"tools":[{"name":"authenticate","description":"MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header `Authorization: Bearer <token>` for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: \"<jwt>\" } after the user pastes, or with no args to get the link.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"marketplace","description":"The official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like \"find an MCP that does X\", \"consulta um CPF\", \"is there a tool for Y\". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/<slug> link that opens without login.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"action":{"default":"search","type":"string","enum":["search","describe","install","uninstall","subscribe","cancel","resume","report_bug","request_mcp","list_tools","invoke","search_prompts","get_prompt","publish_prompt"]},"query":{"default":"","type":"string"},"mcp_id":{"default":"","type":"string"},"limit":{"default":10,"type":"number"},"tier_slug":{"default":"","type":"string"},"immediate":{"default":false,"type":"boolean"},"cancel_reason":{"type":"string","enum":["too_expensive","missing_features","switched_service","unused","customer_service","too_complex","low_quality","other"]},"cancel_comment":{"default":"","type":"string"},"message":{"default":"","type":"string"},"report_context":{"default":"","type":"string"},"conversation":{"default":"[]","type":"string"},"request_name":{"default":"","type":"string"},"request_details":{"default":"","type":"string"},"tool_id":{"default":"","type":"string"},"arguments":{"default":"{}","type":"string"},"prompt_slug":{"default":"","type":"string"},"prompt_vars":{"default":"{}","type":"string"},"prompt_category":{"default":"","type":"string"},"prompt_tool":{"default":"","type":"string"},"prompt_title":{"default":"","type":"string"},"prompt_description":{"default":"","type":"string"},"prompt_body":{"default":"","type":"string"},"prompt_targets":{"default":[],"type":"array","items":{"type":"string","enum":["claude","chatgpt","cursor","lovable"]}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"message":{"type":"string"},"context":{"default":"","type":"string"},"conversation":{"default":"[]","type":"string"}},"required":["message"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"show_version","description":"Show the current MCP platform and adapter versions.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"toolkit_info","description":"Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_chat_archive","description":"Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid.\n\n[Flattened action: archive]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"duration_secs":{"type":"number"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_chat_mute","description":"Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid.\n\n[Flattened action: mute]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"duration_secs":{"type":"number"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_chat_pin","description":"Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid.\n\n[Flattened action: pin]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"duration_secs":{"type":"number"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_chat_unarchive","description":"Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid.\n\n[Flattened action: unarchive]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"duration_secs":{"type":"number"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_chat_unmute","description":"Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid.\n\n[Flattened action: unmute]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"duration_secs":{"type":"number"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_chat_unpin","description":"Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid.\n\n[Flattened action: unpin]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"duration_secs":{"type":"number"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"default":50,"type":"number"},"archived":{"type":"boolean"},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_config_get","description":"Show this install's editable-after-connect settings per connected number — currently the proxy (proxy_url): whether it's set and a masked preview (the raw value is never returned). Owner/admin or the connection owner.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_config_set","description":"Change an editable-after-connect setting on a connected number WITHOUT re-pairing. Today the only field is `proxy_url` — the SOCKS5/HTTPS proxy WhatsApp connects through (recommended to avoid IP bans). Owner/admin or the connection owner.\n- `account`: which number (id/wa_jid, phone, or label; omit if only one is connected).\n- `values`: e.g. { \"proxy_url\": \"socks5://user:pass@host:port\" }. An empty string CLEARS the field (e.g. { \"proxy_url\": \"\" } connects with no proxy); omit the key to keep the current value.\nThe new value applies on the next (re)connection; the live session cache is invalidated so the next tool call uses it.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"},"values":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["values"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_contacts_get","description":"Read WhatsApp contacts.\nActions:\n- list: search across contacts (query optional — substring on name/phone). Default limit 50.\n- get: full contact info by JID.\n\n[Flattened action: get]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"limit":{"default":50,"type":"number"},"jid":{"type":"string"},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_contacts_list","description":"Read WhatsApp contacts.\nActions:\n- list: search across contacts (query optional — substring on name/phone). Default limit 50.\n- get: full contact info by JID.\n\n[Flattened action: list]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"limit":{"default":50,"type":"number"},"jid":{"type":"string"},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_manage_create","description":"Group lifecycle/admin (the connected account must be a group admin for most actions).\nActions:\n- create:      { name, participants[] }\n- leave:       { group_jid }\n- update:      { group_jid, name?, description? }\n- invite_link: { group_jid, link_action: 'get'|'revoke' }\n- join:        { invite }  (invite code or full invite link)\n- requests:    { group_jid, req_action: 'list'|'approve'|'reject', users? }\n\n[Flattened action: create]","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"participants":{"type":"array","items":{"type":"string"}},"link_action":{"type":"string","enum":["get","revoke"]},"invite":{"type":"string"},"req_action":{"type":"string","enum":["list","approve","reject"]},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_manage_invite_link","description":"Group lifecycle/admin (the connected account must be a group admin for most actions).\nActions:\n- create:      { name, participants[] }\n- leave:       { group_jid }\n- update:      { group_jid, name?, description? }\n- invite_link: { group_jid, link_action: 'get'|'revoke' }\n- join:        { invite }  (invite code or full invite link)\n- requests:    { group_jid, req_action: 'list'|'approve'|'reject', users? }\n\n[Flattened action: invite_link]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"participants":{"type":"array","items":{"type":"string"}},"link_action":{"type":"string","enum":["get","revoke"]},"invite":{"type":"string"},"req_action":{"type":"string","enum":["list","approve","reject"]},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_manage_join","description":"Group lifecycle/admin (the connected account must be a group admin for most actions).\nActions:\n- create:      { name, participants[] }\n- leave:       { group_jid }\n- update:      { group_jid, name?, description? }\n- invite_link: { group_jid, link_action: 'get'|'revoke' }\n- join:        { invite }  (invite code or full invite link)\n- requests:    { group_jid, req_action: 'list'|'approve'|'reject', users? }\n\n[Flattened action: join]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"participants":{"type":"array","items":{"type":"string"}},"link_action":{"type":"string","enum":["get","revoke"]},"invite":{"type":"string"},"req_action":{"type":"string","enum":["list","approve","reject"]},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_manage_leave","description":"Group lifecycle/admin (the connected account must be a group admin for most actions).\nActions:\n- create:      { name, participants[] }\n- leave:       { group_jid }\n- update:      { group_jid, name?, description? }\n- invite_link: { group_jid, link_action: 'get'|'revoke' }\n- join:        { invite }  (invite code or full invite link)\n- requests:    { group_jid, req_action: 'list'|'approve'|'reject', users? }\n\n[Flattened action: leave]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"participants":{"type":"array","items":{"type":"string"}},"link_action":{"type":"string","enum":["get","revoke"]},"invite":{"type":"string"},"req_action":{"type":"string","enum":["list","approve","reject"]},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_manage_requests","description":"Group lifecycle/admin (the connected account must be a group admin for most actions).\nActions:\n- create:      { name, participants[] }\n- leave:       { group_jid }\n- update:      { group_jid, name?, description? }\n- invite_link: { group_jid, link_action: 'get'|'revoke' }\n- join:        { invite }  (invite code or full invite link)\n- requests:    { group_jid, req_action: 'list'|'approve'|'reject', users? }\n\n[Flattened action: requests]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"participants":{"type":"array","items":{"type":"string"}},"link_action":{"type":"string","enum":["get","revoke"]},"invite":{"type":"string"},"req_action":{"type":"string","enum":["list","approve","reject"]},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_manage_update","description":"Group lifecycle/admin (the connected account must be a group admin for most actions).\nActions:\n- create:      { name, participants[] }\n- leave:       { group_jid }\n- update:      { group_jid, name?, description? }\n- invite_link: { group_jid, link_action: 'get'|'revoke' }\n- join:        { invite }  (invite code or full invite link)\n- requests:    { group_jid, req_action: 'list'|'approve'|'reject', users? }\n\n[Flattened action: update]","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"participants":{"type":"array","items":{"type":"string"}},"link_action":{"type":"string","enum":["get","revoke"]},"invite":{"type":"string"},"req_action":{"type":"string","enum":["list","approve","reject"]},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_members","description":"List the members of a WhatsApp group (live). Returns each participant's JID, phone, and admin/super-admin flag. Requires group_jid (…@g.us, from whatsapp_groups).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"account":{"type":"string"}},"required":["group_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_participants_add","description":"Manage participants of a WhatsApp group (the connected account must be a group admin). action: 'remove' kicks members, 'promote' makes them admin, 'demote' removes admin, 'add' invites. Pass 1–50 phone numbers (+E164) or JIDs in `users`.\n\n[Flattened action: add]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"required":["group_jid","users"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_participants_demote","description":"Manage participants of a WhatsApp group (the connected account must be a group admin). action: 'remove' kicks members, 'promote' makes them admin, 'demote' removes admin, 'add' invites. Pass 1–50 phone numbers (+E164) or JIDs in `users`.\n\n[Flattened action: demote]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"required":["group_jid","users"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_participants_promote","description":"Manage participants of a WhatsApp group (the connected account must be a group admin). action: 'remove' kicks members, 'promote' makes them admin, 'demote' removes admin, 'add' invites. Pass 1–50 phone numbers (+E164) or JIDs in `users`.\n\n[Flattened action: promote]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"required":["group_jid","users"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_group_participants_remove","description":"Manage participants of a WhatsApp group (the connected account must be a group admin). action: 'remove' kicks members, 'promote' makes them admin, 'demote' removes admin, 'add' invites. Pass 1–50 phone numbers (+E164) or JIDs in `users`.\n\n[Flattened action: remove]","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"group_jid":{"type":"string"},"users":{"type":"array","items":{"type":"string"}},"account":{"type":"string"}},"required":["group_jid","users"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_history_backfill","description":"Request OLDER messages for a chat from your phone (on-demand history sync), extending what whatsapp_messages can read. Returns { status, messages_added }:\n- \"done\"/\"partial\": it pulled messages_added new messages — read them via whatsapp_messages (paginate with `before`). \"partial\" means WhatsApp stopped early; wait and retry for more.\n- \"cooldown\": you requested this chat <60s ago (retry_after_s tells you when). WhatsApp THROTTLES back-to-back requests — DO NOT retry in a loop; wait, then try once.\n- \"timeout\": the phone didn't deliver in time (offline or throttled) — already-synced history is still readable; retry later.\nBEST-EFFORT (gated by WhatsApp): one call usually pulls a batch (~50–70 msgs); pulling much deeper repeatedly often won't work. Connects live, may take up to ~1 minute. The initial sync already loaded deep history for most chats — check whatsapp_history_coverage first; only backfill when a chat's oldest_ts isn't far enough back.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"count":{"default":50,"type":"number"},"requests":{"type":"number"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_history_coverage","description":"Show how far back the LOCAL message archive reaches per chat (oldest_ts, newest_ts, message_count, status). Use it to find pagination boundaries for whatsapp_messages and to decide whether to pull more with whatsapp_history_backfill. Optional query (filter by name/JID), kind, limit, or a single chat_jid.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"kind":{"type":"string","enum":["dm","group","broadcast","newsletter","unknown"]},"limit":{"default":100,"type":"number"},"chat_jid":{"type":"string"},"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_message_delete","description":"Manage a message you can act on.\nActions:\n- delete:  { chat_jid, message_id, for_everyone? (default true) } — delete for everyone (your msg) or just for you\n- forward: { chat_jid, message_id, to } — forward a stored message to another chat\n- edit:    { chat_jid, message_id, text } — edit one of your recent text messages\n\n[Flattened action: delete]\n\nBulk support: accepts message_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"message_id":{"type":"string"},"for_everyone":{"type":"boolean"},"to":{"type":"string"},"text":{"type":"string"},"account":{"type":"string"},"message_ids":{"type":"array","items":{"type":"string"}}},"required":["chat_jid","message_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_message_edit","description":"Manage a message you can act on.\nActions:\n- delete:  { chat_jid, message_id, for_everyone? (default true) } — delete for everyone (your msg) or just for you\n- forward: { chat_jid, message_id, to } — forward a stored message to another chat\n- edit:    { chat_jid, message_id, text } — edit one of your recent text messages\n\n[Flattened action: edit]\n\nBulk support: accepts message_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"message_id":{"type":"string"},"for_everyone":{"type":"boolean"},"to":{"type":"string"},"text":{"type":"string"},"account":{"type":"string"},"message_ids":{"type":"array","items":{"type":"string"}}},"required":["chat_jid","message_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_message_forward","description":"Manage a message you can act on.\nActions:\n- delete:  { chat_jid, message_id, for_everyone? (default true) } — delete for everyone (your msg) or just for you\n- forward: { chat_jid, message_id, to } — forward a stored message to another chat\n- edit:    { chat_jid, message_id, text } — edit one of your recent text messages\n\n[Flattened action: forward]\n\nBulk support: accepts message_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"message_id":{"type":"string"},"for_everyone":{"type":"boolean"},"to":{"type":"string"},"text":{"type":"string"},"account":{"type":"string"},"message_ids":{"type":"array","items":{"type":"string"}}},"required":["chat_jid","message_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_messages","description":"List messages in a chat from LOCAL history. Requires chat_jid (from whatsapp_chats). Paginate backwards by passing the oldest message's timestamp as `before` (ISO 8601); `after` pages forward; `order` sorts. NOTE: only messages already synced locally are returned — to see how far back the archive goes use whatsapp_history_coverage, and to pull OLDER messages from your phone use whatsapp_history_backfill.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"before":{"type":"string"},"after":{"type":"string"},"since":{"type":"string"},"order":{"default":"asc","type":"string","enum":["asc","desc"]},"limit":{"default":100,"type":"number"},"account":{"type":"string"}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_messages_write","description":"Mark messages as read in a chat. Requires chat_jid. Optional message_id (marks up to this message; omit to mark all unread).\n\nBulk support: accepts message_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"message_id":{"type":"string"},"account":{"type":"string"},"message_ids":{"type":"array","items":{"type":"string"}}},"required":["chat_jid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_poll_create","description":"Send a poll or vote on one.\nActions:\n- create: { to, name, options[] (2–12), selectable_count? }\n- vote:   { chat_jid, message_id, options[] (the option texts to select) }\n\n[Flattened action: create]\n\nBulk support: accepts message_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"to":{"type":"string"},"name":{"type":"string"},"chat_jid":{"type":"string"},"message_id":{"type":"string"},"options":{"type":"array","items":{"type":"string"}},"selectable_count":{"type":"number"},"account":{"type":"string"},"message_ids":{"type":"array","items":{"type":"string"}}},"required":["options"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_poll_vote","description":"Send a poll or vote on one.\nActions:\n- create: { to, name, options[] (2–12), selectable_count? }\n- vote:   { chat_jid, message_id, options[] (the option texts to select) }\n\n[Flattened action: vote]\n\nBulk support: accepts message_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"to":{"type":"string"},"name":{"type":"string"},"chat_jid":{"type":"string"},"message_id":{"type":"string"},"options":{"type":"array","items":{"type":"string"}},"selectable_count":{"type":"number"},"account":{"type":"string"},"message_ids":{"type":"array","items":{"type":"string"}}},"required":["options"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_react","description":"React to a message with an emoji (or remove your reaction by passing an empty emoji). Requires chat_jid + message_id.\n\nBulk support: accepts message_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chat_jid":{"type":"string"},"message_id":{"type":"string"},"emoji":{"type":"string"},"account":{"type":"string"},"message_ids":{"type":"array","items":{"type":"string"}}},"required":["chat_jid","message_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"chat_jid":{"type":"string"},"limit":{"default":50,"type":"number"},"account":{"type":"string"}},"required":["query"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_send_media","description":"Send a WhatsApp message (text or media).\nActions:\n- text:  { to, text, reply_to? }\n- media: { to, type ('image'|'video'|'audio'|'document'|'sticker'),\n           media_url | media_base64, caption?, filename?, mimetype? }\n\n`to` accepts either a JID ('5511999999999@s.whatsapp.net', '<id>@g.us') or\na plain phone (digits, country code included). For groups always use the\n'<id>@g.us' JID — get it from whatsapp_groups.\n\n[Flattened action: media]","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"to":{"type":"string"},"text":{"type":"string"},"reply_to":{"type":"string"},"type":{"type":"string","enum":["image","video","audio","document","sticker"]},"media_url":{"type":"string"},"media_base64":{"type":"string"},"caption":{"type":"string"},"filename":{"type":"string"},"mimetype":{"type":"string"},"account":{"type":"string"}},"required":["to"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_send_text","description":"Send a WhatsApp message (text or media).\nActions:\n- text:  { to, text, reply_to? }\n- media: { to, type ('image'|'video'|'audio'|'document'|'sticker'),\n           media_url | media_base64, caption?, filename?, mimetype? }\n\n`to` accepts either a JID ('5511999999999@s.whatsapp.net', '<id>@g.us') or\na plain phone (digits, country code included). For groups always use the\n'<id>@g.us' JID — get it from whatsapp_groups.\n\n[Flattened action: text]","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"to":{"type":"string"},"text":{"type":"string"},"reply_to":{"type":"string"},"type":{"type":"string","enum":["image","video","audio","document","sticker"]},"media_url":{"type":"string"},"media_base64":{"type":"string"},"caption":{"type":"string"},"filename":{"type":"string"},"mimetype":{"type":"string"},"account":{"type":"string"}},"required":["to"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_sync","description":"Refresh this account's local data from WhatsApp — pulls recent messages and refreshes the groups/contacts lists into the local store. Call it BEFORE reading (chats/groups/messages/contacts/search) when results look stale or empty (e.g. right after connecting, or an account that hasn't synced recently). Connects live, so it may take ~20–60s. Returns { messages_stored }.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_webhook_get","description":"Show this WhatsApp install's outbound webhook: the current URL, the subscribed events (empty = all), include_result, and the catalog of subscribable events (available_events — e.g. whatsapp.message, whatsapp.reaction, and the whatsapp.* wildcard). Owner/admin only.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whatsapp_webhook_set","description":"Set (or remove) this WhatsApp install's outbound webhook. Owner/admin only.\n- To set: pass `url` (https only, not localhost). `events` is the list of subscribed events (\"permissions\") — e.g. [\"whatsapp.message\"], or [\"whatsapp.*\"] for every WhatsApp event, or [] / omit for ALL events. See available_events from whatsapp_webhook_get. `include_result` (default true) controls whether the tool result is included in tool.call payloads. `secret` is optional (reserved).\n- Subscribing to any whatsapp.* event makes the daemon hold a live connection per number and forward inbound messages to your URL.\n- To remove the webhook: pass `remove: true` (or an empty url).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"}},"include_result":{"type":"boolean"},"secret":{"type":"string"},"remove":{"type":"boolean"}},"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":79,"grade":"B","scanned_at":"2026-11-01T18:06:54.371Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-01T18:06:54.245Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1614ms"]},"poisoning":{"score":15,"max":15,"notes":["47 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 9 write-action tools with no auth"]},"maintenance":{"score":12,"max":15,"notes":["last push 63 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://api.mcp.ai/p_whatsapp","reachable":true,"authRequired":false,"latencyMs":1614,"serverInfo":{"name":"mcp-ai","version":"0.9.398"}}],"packages":[],"repo":{"found":true,"owner":"mcp-dir","repo":"whatsapp-mcp","archived":false,"pushedAt":"2026-08-30T19:50:30Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/207912538?v=4","ownerCreatedAt":"2025-04-16T18:01:51Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-08-30T19:50:30.000Z","score":15}}}},"grade_history":[],"reviews":[]}