{"name":"corapilot-whatsapp","version":"1.0.0","description":"Connect Claude, ChatGPT or any MCP client to the user's WhatsApp to search, analyse and send messages. No API key; the user signs in to authorise.","documentation":"https://corapilot.com/blog/connect-claude-to-whatsapp","transport":"streamable-http","endpoint":"https://corapilot.com/mcp","instructions":"This server connects you to the user's WhatsApp so you can read, search and send messages on their behalf.\n\nHow to use it:\n- Call `connection_status` first to confirm WhatsApp is linked and healthy.\n- To find a person or group, use `search_messages` or `list_chats`. Matching is fuzzy and case-insensitive — no exact name needed (e.g. 'Flackwell Heath FC minors').\n- Use `get_chat_messages` for the full history of one conversation or group.\n- Use `list_recent_messages` / `list_unread_messages` to catch up on what's new.\n- History depth: the stored history usually spans many months (see `connection_status` for the exact date range). `search_messages` covers the whole range; for a specific period use the `days`/`since`/`until` filters. Don't assume history is only a few days — check the range first.\n- Only call `send_message` when the user explicitly asks you to send something, and confirm the recipient and wording first. Numbers are digits-only, international format, no '+'.\n- To send the user a WhatsApp alert/reminder to themselves (e.g. 'ping me on WhatsApp when this is done'), call `send_message_to_me` — a separate, self-only tool that can never message anyone else.\n- Self-chat assistant: the user may use their own WhatsApp 'Message yourself' chat to talk to you. Read it with `get_chat_messages` chat=\"me\", and reply there with `send_message_to_me`. This is ideal for a scheduled automation that checks the self-chat and responds.\n\nYou never auto-reply: read freely, but send only on the user's instruction.","authentication":{"type":"oauth2","flow":"authorization_code","pkce":"S256","dynamic_client_registration":true,"authorization_server_metadata":"https://corapilot.com/.well-known/oauth-authorization-server","protected_resource_metadata":"https://corapilot.com/.well-known/oauth-protected-resource","scopes":["whatsapp"]},"setup":["Create a CoraPilot account at https://corapilot.com/portal (a 7-day free trial is available).","Link WhatsApp on the WhatsApp tab by scanning the QR code with your phone.","In your AI client, add the MCP endpoint https://corapilot.com/mcp as a custom connector and sign in when prompted."],"tools":[{"name":"connection_status","description":"Check that this connector is linked and healthy: returns the account name, whether WhatsApp is connected, how many messages are stored, and the most recent message time. Call this first to confirm the connection before doing other work."},{"name":"list_recent_messages","description":"List WhatsApp messages (inbound and outbound) for this account, newest last. The full stored history often spans many months — this returns the most recent by default, so to reach older messages use 'days'/'since'/'until' or raise 'limit' (don't assume history is short — call connection_status to see the stored date range). Optional 'query' does a fuzzy, case-insensitive match across message text, sender/group name and number."},{"name":"search_messages","description":"Fuzzy full-text search over ALL stored WhatsApp messages (matches message text, sender/group name and number, case-insensitive partial match). Searches the entire stored history (often many months), not just recent messages. Use this to find a chat or message by any keyword; optionally narrow with 'days'/'since'/'until'."},{"name":"list_chats","description":"Search or browse the user's WhatsApp GROUPS. Each result shows the group name, jid, member count and last-activity date. Pass 'query' to filter by group name, jid, or a participant's name/number (fuzzy, case-insensitive) — so you can find a group by who is in it even when it has no name. Results are paginated: use 'limit' and 'offset' to page through all groups. If some groups show '(no name)', call `sync_groups` to fetch their names."},{"name":"sync_groups","description":"Refresh the names/metadata of the user's WhatsApp groups from WhatsApp. Use this when a group can't be found or shows '(no name)' — e.g. a group created or renamed after linking. WhatsApp rate-limits group lookups, so this fills names in over ~1–2 minutes; run `list_chats` again afterwards."},{"name":"get_chat_messages","description":"Download the message history of a WhatsApp group or chat (up to 500 recent messages) directly from WhatsApp, so you can summarise it or answer questions (e.g. key fixture dates). Identify the chat by group name (fuzzy — use list_chats first if unsure), phone number, or JID. If the name matches multiple groups, you'll be asked to pick one."},{"name":"list_unread_messages","description":"List incoming WhatsApp messages not yet seen, and mark them as read."},{"name":"send_message","description":"Send a WhatsApp message from this account to a person OR a group. This sends a real message — only use it when the user has asked you to send something. The recipient can be a group name (e.g. 'Family'), a group/contact JID, a phone number, or \"me\" to message the user's own WhatsApp (self-chat). If a group name matches more than one group you'll be asked to confirm which."},{"name":"send_message_to_me","description":"Send a WhatsApp message to the USER'S OWN WhatsApp (their 'Message yourself' self-chat) — a personal alert or reminder. This can ONLY message the user themselves, never anyone else, so it is safe for self-notifications. Use for requests like 'message me when the report is done', 'remind me on WhatsApp to call the dentist', or replying in the self-chat."}]}