[{"data":1,"prerenderedAt":197},["ShallowReactive",2],{"pseo:platforms:mcp":3,"highlight:platform:mcp":183},{"auth_method":4,"ban_risk":5,"capabilities":6,"example_flows":73,"faqs":120,"http_module":130,"name":133,"official_connector_note":134,"recipes":135,"related":136,"seo":156,"setup_steps":170,"setup_time":176,"slug":177,"tier":178,"type":179,"updated":168,"url":164,"webhook_trigger":180},"Token held in the MCP server's environment; clients never receive it","high",[7,16,22,27,32,38,43,49,56,62,67],{"availability":8,"category":9,"cloud_api_status":10,"in_flows":11,"name":12,"slug":13,"summary":14,"url":15},"ga","groups","forbidden",true,"Create Group","create-group","Open a WhatsApp group from your own backend.","\u002Fwhatsapp-api\u002Fcreate-group\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":17,"name":18,"slug":19,"summary":20,"url":21},false,"Group Participants","group-participants","Add, remove and list members of a WhatsApp group.","\u002Fwhatsapp-api\u002Fgroup-participants\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":17,"name":23,"slug":24,"summary":25,"url":26},"Group Invite Link","group-invite-link","Read, revoke and resolve group invite links.","\u002Fwhatsapp-api\u002Fgroup-invite-link\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":11,"name":28,"slug":29,"summary":30,"url":31},"Send Group Message","send-group-message","Send text, media and polls into a WhatsApp group.","\u002Fwhatsapp-api\u002Fsend-group-message\u002F",{"availability":8,"category":33,"cloud_api_status":10,"in_flows":17,"name":34,"slug":35,"summary":36,"url":37},"channels","Create Channel","create-channel","Create and manage a WhatsApp Channel.","\u002Fwhatsapp-api\u002Fcreate-channel\u002F",{"availability":8,"category":33,"cloud_api_status":10,"in_flows":11,"name":39,"slug":40,"summary":41,"url":42},"Post to Channel","post-to-channel","Publish text and media to a WhatsApp Channel.","\u002Fwhatsapp-api\u002Fpost-to-channel\u002F",{"availability":8,"category":44,"cloud_api_status":10,"in_flows":17,"name":45,"slug":46,"summary":47,"url":48},"status","Post Status","post-status","Post text, image and video status updates.","\u002Fwhatsapp-api\u002Fpost-status\u002F",{"availability":8,"category":50,"cloud_api_status":51,"in_flows":11,"name":52,"slug":53,"summary":54,"url":55},"messaging","restricted","Send Without Template","send-message-without-template","Send any message with no template approval.","\u002Fwhatsapp-api\u002Fsend-message-without-template\u002F",{"availability":8,"category":57,"cloud_api_status":51,"in_flows":17,"name":58,"slug":59,"summary":60,"url":61},"contacts","Check Number","check-number","Check whether a phone number is on WhatsApp.","\u002Fwhatsapp-api\u002Fcheck-number\u002F",{"availability":8,"category":57,"cloud_api_status":51,"in_flows":17,"name":63,"slug":64,"summary":65,"url":66},"LID to Phone","lid-to-phone","Map a WhatsApp LID to a phone number.","\u002Fwhatsapp-api\u002Flid-to-phone\u002F",{"availability":8,"category":68,"cloud_api_status":51,"in_flows":17,"name":69,"slug":70,"summary":71,"url":72},"account","Connect a Number","connect-number-qr-pairing","Link any WhatsApp number by code or QR.","\u002Fwhatsapp-api\u002Fconnect-number-qr-pairing\u002F",[74,88,100,109],{"body":75,"curl":76,"operation":79,"title":87},"A send tool takes a recipient and a body, validates the recipient against an allow-list held by the server, and calls Wapito. The host shows the user exactly what will be sent before it goes.",{"code":77,"lang":78},"curl --request POST \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Ftext \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"to\":\"+15551234567\",\"body\":\"Your order #4182 has shipped. Track it here: https:\u002F\u002Facme.example\u002Ft\u002F4182\",\"typing_time\":3}'","bash",{"availability":8,"ban_risk":80,"method":81,"operationId":82,"path":83,"summary":84,"tag":85,"url":86},"medium","POST","sendText","\u002Fmessages\u002Ftext","Send a text message","messages","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-text\u002F","Let an assistant send a WhatsApp message",{"body":89,"curl":90,"operation":92,"title":99},"A list-groups tool returns names and ids only. It is read-only by construction, which makes it safe to expose without confirmation while the write tools stay gated.",{"code":91,"lang":78},"curl --request GET \\\n  --url 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fgroups?count=50&offset=0' \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN'",{"availability":8,"ban_risk":93,"method":94,"operationId":95,"path":96,"summary":97,"tag":9,"url":98},"low","GET","listGroups","\u002Fgroups","List groups","\u002Fdocs\u002Fapi\u002Fgroups\u002Flist-groups\u002F","Give the assistant read access to groups",{"body":101,"curl":102,"operation":104,"title":108},"A create-group tool takes a subject and a list of participants drawn from a directory the server controls, so the assistant can propose a group but cannot invent members from the conversation text.",{"code":103,"lang":78},"curl --request POST \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fgroups \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"subject\":\"Acme Launch Team\",\"participants\":[\"+15551234567\",\"+15559876543\"],\"description\":\"Coordination for the Q3 launch. Keep it on topic.\"}'",{"availability":8,"ban_risk":5,"method":81,"operationId":105,"path":96,"summary":106,"tag":9,"url":107},"createGroup","Create a group","\u002Fdocs\u002Fapi\u002Fgroups\u002Fcreate-group\u002F","Create a group from a conversation",{"body":110,"curl":111,"operation":113,"title":119},"Recent inbound messages are exposed as resources rather than as a tool, so the assistant can read the thread it is being asked about without that read implying any ability to reply.",{"code":112,"lang":78},"curl --request GET \\\n  --url 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Flist\u002F15551234567@s.whatsapp.net?count=50&offset=0&from_me=true&time_from=1789372800000&time_to=1789459200000' \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN'",{"availability":114,"ban_risk":93,"method":94,"operationId":115,"path":116,"summary":117,"tag":85,"url":118},"beta","listMessages","\u002Fmessages\u002Flist\u002F{chat_id}","List messages in a chat","\u002Fdocs\u002Fapi\u002Fmessages\u002Flist-messages\u002F","Surface recent messages as context",[121,124,127],{"a":122,"q":123},"Only with guardrails. Keep the tool list minimal, validate recipients against your own allow-list rather than trusting the model, require host confirmation on anything that sends, and cap sends per session. Treat inbound message text as data, never as instructions the assistant should follow.","Is it safe to give an assistant a send tool?",{"a":125,"q":126},"In the server's environment, never in a tool argument and never in a prompt. The client asks the server to do something; the server decides whether to and holds the credential. That separation is the whole point of putting an MCP server in front of an API.","Where does the token live?",{"a":128,"q":129},"Not directly - MCP has no inbound trigger. Run your own webhook receiver, store the events, and expose them as resources the assistant reads when asked. If you want a message to start an autonomous run, that scheduling belongs in your code rather than in the protocol.","Can the assistant be triggered by an incoming message?",{"docs_url":131,"name":132},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fdocs\u002Fconcepts\u002Ftools","MCP tool (tools\u002Fcall) wrapping a Wapito endpoint","MCP","There is no official WhatsApp MCP server from Meta, and the official API has no groups, Channels or status to expose through one. A server wrapping Wapito can expose all of them, which is precisely why the write tools need confirmation in the host.",[],{"hub":137,"pillars":138,"siblings":152},"\u002Fintegrations\u002F",[139,140,143,146,147,150,151],{"title":12,"url":15},{"title":141,"url":142},"Group Info","\u002Fwhatsapp-api\u002Fgroup-info\u002F",{"title":144,"url":145},"Leave Group","\u002Fwhatsapp-api\u002Fleave-group\u002F",{"title":28,"url":31},{"title":148,"url":149},"Group Events","\u002Fwhatsapp-api\u002Fgroup-events\u002F",{"title":39,"url":42},{"title":52,"url":55},[153],{"title":154,"url":155},"OpenAI","\u002Fintegrations\u002Fopenai\u002F",{"breadcrumb":157,"canonical":165,"description":166,"h1":167,"lastmod":168,"title":169},[158,161,163],{"name":159,"url":160},"Home","\u002F",{"name":162,"url":137},"Integrations",{"name":133,"url":164},"\u002Fintegrations\u002Fmcp\u002F","https:\u002F\u002Fwapito.com\u002Fintegrations\u002Fmcp\u002F","Connect WhatsApp to MCP with the MCP tool (tools\u002Fcall) wrapping a Wapito endpoint and the MCP resource fed by your webhook receiver.","Integrate WhatsApp with MCP","2026-09-15","WhatsApp MCP Integration | Wapito",[171,172,173,174,175],"Create an MCP server in any language with an official SDK, and read the Wapito channel token from its environment rather than from any client-supplied argument.","Expose a small number of tools with strict input schemas - send a message, list groups, create a group, check a number - and give each a description that states its limits.","Mark the tools that send anything as requiring confirmation in the host, so a human approves an outbound message before it leaves.","Run a webhook receiver alongside the server that stores recent events, and expose them as resources so the assistant can read context without being handed a send capability.","Test with a Sandbox channel first, with a hard per-session cap on sends, before pointing the server at a production number.","45 minutes","mcp","t3a","ai",{"docs_url":181,"name":182},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fdocs\u002Fconcepts\u002Fresources","MCP resource fed by your webhook receiver",[184,188,191,194],{"label":185,"id":186,"lang":78,"code":77,"html":187},"curl","flow-0","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Ftext\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Content-Type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --data\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> '{\"to\":\"+15551234567\",\"body\":\"Your order #4182 has shipped. Track it here: https:\u002F\u002Facme.example\u002Ft\u002F4182\",\"typing_time\":3}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":185,"id":189,"lang":78,"code":91,"html":190},"flow-1","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> GET\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fgroups?count=50&#x26;offset=0'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":185,"id":192,"lang":78,"code":103,"html":193},"flow-2","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fgroups\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Content-Type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --data\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> '{\"subject\":\"Acme Launch Team\",\"participants\":[\"+15551234567\",\"+15559876543\"],\"description\":\"Coordination for the Q3 launch. Keep it on topic.\"}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":185,"id":195,"lang":78,"code":112,"html":196},"flow-3","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> GET\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Flist\u002F15551234567@s.whatsapp.net?count=50&#x26;offset=0&#x26;from_me=true&#x26;time_from=1789372800000&#x26;time_to=1789459200000'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1790464904207]