{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_rmuj465j9ecc","handle":"mcp-dir-whatsapp","url":"https://wellknown.network/agents/mcp-dir-whatsapp","links":{"self":"https://wellknown.network/agents/mcp-dir-whatsapp/record.json","html":"https://wellknown.network/agents/mcp-dir-whatsapp","markdown":"https://wellknown.network/agents/mcp-dir-whatsapp/record.md","api":"https://wellknown.network/api/v1/agents/mcp-dir-whatsapp","status":"https://wellknown.network/api/v1/agents/mcp-dir-whatsapp/status","claim":"https://wellknown.network/agents/mcp-dir-whatsapp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/mcp-dir-whatsapp/claim.json","badge":"https://wellknown.network/agents/mcp-dir-whatsapp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/mcp-dir-whatsapp/history","tools":"https://wellknown.network/api/v1/agents/mcp-dir-whatsapp/tools"},"ard":{"identifier":"urn:air:api.mcp.ai:server:mcp-dir-whatsapp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"WhatsApp","summary":"Connect a personal/Business WhatsApp account via QR pairing (multi-device, like WhatsApp Web). Send","description":"Connect a personal/Business WhatsApp account via QR pairing (multi-device, like WhatsApp Web). Send","publisher":{"name":"mcp-dir","url":null},"homepage":null,"repository":"https://github.com/mcp-dir/whatsapp-mcp","version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://api.mcp.ai/p_whatsapp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-08-21T17:15:12.261398Z","publishedAt":"2026-08-21T17:15:12.261398Z","registryName":"io.github.mcp-dir/whatsapp-mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"communication.sms-voice","name":"SMS & Voice","confidence":1,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.992,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":0.977,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.583,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":0.569,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.51,"provenance":"derived"},{"slug":"infra.browser-automation","name":"Browser Automation","confidence":0.51,"provenance":"derived"}],"categories":["commerce","communication","data","infra","security"],"language":"fr"},"observed":{"status":"live","statusReason":"Responded 11h ago.","lastOkAt":"2026-10-09T18:24:48.456Z","lastProbedAt":"2026-10-09T18:24:48.456Z","statusComputedAt":"2026-10-09T18:27:37.981Z","reliability30d":{"probes":47,"successRate":0.9787,"p50Ms":157,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":46,"ok":45,"authBoundaryOk":0,"serviceOk":45,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-09T18:24:48.456Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":167,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.369","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T14:23:25.961Z","kind":"mcp_initialize","ok":false,"httpStatus":502,"latencyMs":132,"error":"http 502","detail":null},{"at":"2026-10-07T16:27:49.025Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":146,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.368","protocolVersion":"2025-06-18"}},{"at":"2026-10-06T17:26:23.817Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":144,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.365","protocolVersion":"2025-06-18"}},{"at":"2026-10-05T19:22:50.118Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":155,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.358","protocolVersion":"2025-06-18"}},{"at":"2026-10-04T21:22:53.363Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":153,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.358","protocolVersion":"2025-06-18"}},{"at":"2026-10-03T23:28:37.849Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":156,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.358","protocolVersion":"2025-06-18"}},{"at":"2026-10-03T01:25:04.000Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":114,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.356","protocolVersion":"2025-06-18"}},{"at":"2026-10-02T02:22:59.566Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":132,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.353","protocolVersion":"2025-06-18"}},{"at":"2026-10-01T04:27:32.810Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":133,"error":null,"detail":{"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"toolCount":47,"toolsHash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","serverName":"mcp-ai","capabilities":["tools"],"serverVersion":"0.9.353","protocolVersion":"2025-06-18"}}],"tools":[{"name":"whatsapp_list_accounts","description":"List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status."},{"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 (ch"},{"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         "},{"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         "},{"name":"whatsapp_chats","description":"List WhatsApp chats (individual + group). Sorted by most recent activity."},{"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` (I"},{"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 "},{"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"},{"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"},{"name":"whatsapp_groups","description":"List WhatsApp groups the account belongs to — subject, jid, participants count, owner."},{"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"},{"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' remo"},{"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' remo"},{"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' remo"},{"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' remo"},{"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 bat"},{"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 t"},{"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 t"},{"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- f"},{"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- f"},{"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- f"},{"name":"whatsapp_chat_metadata","description":"Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid."},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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]"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"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_ji"},{"name":"whatsapp_search","description":"Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context."},{"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_me"},{"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- \"do"},{"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 (ava"},{"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"},{"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"},{"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 connect"},{"name":"show_version","description":"Show the current MCP platform and adapter versions."},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction."},{"name":"connect","description":"Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns conn"},{"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."},{"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\","},{"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 <tok"}],"package":null,"toolSurface":{"id":"ts_wck232uu3bac","endpointId":"ep_zhea9vctqhz2","hash":"67f16b30f3ba23cf975a2c69e8c18f72d41deaa4181f63be281a45284df852eb","toolCount":47,"serverName":"mcp-ai","serverVersion":"0.9.346","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-12T14:24:33.308Z","lastSeenAt":"2026-10-09T18:24:48.472Z","observations":38,"toolNames":["whatsapp_list_accounts","whatsapp_sync","whatsapp_send_text","whatsapp_send_media","whatsapp_chats","whatsapp_messages","whatsapp_messages_write","whatsapp_contacts_list","whatsapp_contacts_get","whatsapp_groups","whatsapp_group_members","whatsapp_group_participants_add","whatsapp_group_participants_remove","whatsapp_group_participants_promote","whatsapp_group_participants_demote","whatsapp_react","whatsapp_poll_create","whatsapp_poll_vote","whatsapp_message_delete","whatsapp_message_forward","whatsapp_message_edit","whatsapp_chat_metadata","whatsapp_chat_archive","whatsapp_chat_unarchive","whatsapp_chat_pin","whatsapp_chat_unpin","whatsapp_chat_mute","whatsapp_chat_unmute","whatsapp_group_manage_create","whatsapp_group_manage_leave","whatsapp_group_manage_update","whatsapp_group_manage_invite_link","whatsapp_group_manage_join","whatsapp_group_manage_requests","whatsapp_search","whatsapp_history_coverage","whatsapp_history_backfill","whatsapp_webhook_get","whatsapp_webhook_set","whatsapp_config_get","whatsapp_config_set","show_version","report_bug","connect","toolkit_info","marketplace","authenticate"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_zhea9vctqhz2","url":"https://api.mcp.ai/p_whatsapp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-09T18:24:48.480Z","auth":{"observedAt":"2026-10-09T18:24:48.595Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-09T18:24:48.620Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"mcp.ai","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-09-28T19:13:28.000Z","validTo":"2026-12-27T20:13:21.000Z","daysToExpiry":78,"sanCount":2,"fingerprint256":"E7:DF:D9:D6:BD:02:F4:65:51:8A:94:85:49:44:9D:D7:B4:0D:F5:9B:C6:D5:A0:B7:D3:12:57:AB:F8:3D:EE:BA"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.mcp-dir/whatsapp-mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.mcp-dir%2Fwhatsapp-mcp","firstSeenAt":"2026-09-06T20:21:45.960Z","fetchedAt":"2026-10-07T19:18:55.634Z","normalizedAt":"2026-10-07T19:18:55.634Z"}]},"firstSeenAt":"2026-09-06T20:21:45.960Z","updatedAt":"2026-10-09T18:28:17.193Z"}