Skip to main content
Glama

@kaptionai/mcp-extension

MCP server that lets AI assistants read and manage your WhatsApp conversations through the KaptionAI Chrome extension. Also supports WebMCP for zero-config browser-native AI tool discovery.

Claude / Cursor ──stdio──> mcp-whatsapp ──ws://localhost:7865──> KaptionAI Extension ──> WhatsApp Web
Browser AI Agent ──navigator.modelContext──> KaptionAI Extension ──> WhatsApp Web (WebMCP)

Agent skill

Teach Claude Code, Codex, Cursor and other agents how to use these tools well (search first, never send without confirming, reminders vs. scheduled messages, error handling):

npx skills add Kaption-AI/mcp-extension

The skill lives in skills/kaption-whatsapp/SKILL.md.

Related MCP server: gaviwhatsapp-mcp

Setup

1. Install the extension

Install the KaptionAI Chrome Extension and enable the MCP bridge in settings.

2. Configure your AI tool

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "whatsapp": {
      "command": "npx",
      "args": ["-y", "@kaptionai/mcp-extension@latest"]
    }
  }
}

Claude Code

claude mcp add whatsapp -- npx -y @kaptionai/mcp-extension@latest

Cursor

Add to .cursor/mcp.json in your project or go to Settings > MCP Servers:

{
  "mcpServers": {
    "whatsapp": {
      "command": "npx",
      "args": ["-y", "@kaptionai/mcp-extension@latest"]
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "whatsapp": {
      "command": "npx",
      "args": ["-y", "@kaptionai/mcp-extension@latest"]
    }
  }
}

VS Code (Copilot)

Add to .vscode/mcp.json in your project:

{
  "servers": {
    "whatsapp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@kaptionai/mcp-extension@latest"]
    }
  }
}

Or add to your VS Code settings.json:

{
  "mcp": {
    "servers": {
      "whatsapp": {
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "@kaptionai/mcp-extension@latest"]
      }
    }
  }
}

Zed

Add to Zed settings (~/.config/zed/settings.json):

{
  "context_servers": {
    "whatsapp": {
      "command": {
        "path": "npx",
        "args": ["-y", "@kaptionai/mcp-extension@latest"]
      }
    }
  }
}

OpenAI Agents SDK (Python)

from agents import Agent
from agents.mcp import MCPServerStdio

whatsapp = MCPServerStdio(
    name="whatsapp",
    command="npx",
    args=["-y", "@kaptionai/mcp-extension@latest"],
)

agent = Agent(
    name="assistant",
    instructions="You can access WhatsApp conversations.",
    mcp_servers=[whatsapp],
)

Any MCP-compatible client

This package runs as a standard MCP server over stdio. To connect from any client:

npx -y @kaptionai/mcp-extension@latest

The server communicates via stdin/stdout using the MCP protocol. Point your client's MCP configuration to this command.

3. Open WhatsApp Web

Open web.whatsapp.com in Chrome or Edge. The extension will auto-connect to the MCP server.

Tools

query

Query WhatsApp data — conversations, contacts, messages, transcriptions, labels, and communities.

# List conversations
query {}

# Search everything
query { query: "meeting" }

# Unread only
query { unread: true }

# Look up a conversation with messages
query { id: "5511999887766@c.us" }

# Search contacts
query { query: "Alice", entity: "contacts" }

# List labels (Business accounts)
query { entity: "labels" }

# Filter by label
query { label: "Important" }

# List communities
query { entity: "communities" }

# Filter by community
query { community: "My Community" }

# Get session info
query { entity: "session" }

Parameter

Type

Description

query

string

Search text (names, messages, transcriptions)

id

string

Look up a specific conversation, contact, or label

entity

string

conversations, contacts, messages, transcriptions, labels, communities, session

limit

number

Max results (default 25, max 5000)

unread

boolean

Only unread conversations

label

string

Filter by label name or ID

community

string

Filter by community name or ID

before

string

Messages before this ISO 8601 timestamp (pagination)

after

string

Messages after this ISO 8601 timestamp (incremental sync)

summarize_conversation

Generate a summary of a conversation.

Parameter

Type

Description

conversation_id

string

The conversation ID

manage_labels

Manage WhatsApp Business labels — add, remove, create, or delete labels.

Parameter

Type

Description

action

string

add, remove, create, delete

label_name

string

Label name

label_id

string

Label ID (alternative to name)

conversation_id

string

Required for add/remove

manage_lists

Manage personal chat lists (custom lists). The personal account equivalent of Business labels — organize chats into custom categories.

Reading them is list_chat_lists / get_chat_list (read-only tools).

# List all custom lists (read-only tool)
list_chat_lists {}

# Get a list with its chats (read-only tool)
get_chat_list { name: "Family" }

# Create a new list
manage_lists { action: "create", name: "Work", conversation_id: "5511999887766@c.us" }

# Add a chat to a list
manage_lists { action: "add_chat", name: "Family", conversation_id: "5511999887766@c.us" }

# Remove a chat from a list
manage_lists { action: "remove_chat", name: "Family", conversation_id: "5511999887766@c.us" }

# Delete a list
manage_lists { action: "delete", name: "Old List" }

Parameter

Type

Description

action

string

create, edit, delete, add_chat, remove_chat

id

string

List ID

name

string

List name (for create/edit, or to resolve by name)

conversation_id

string

Chat ID(s) to add/remove

manage_chat

Manage chat state — archive, unarchive, mark as read/unread, pin, unpin, mute, unmute, set/clear draft messages.

# Archive a chat
manage_chat { action: "archive", conversation_id: "5511999887766@c.us" }

# Mark as read
manage_chat { action: "mark_read", conversation_id: "5511999887766@c.us" }

# Pin a chat (max 3)
manage_chat { action: "pin", conversation_id: "5511999887766@c.us" }

# Mute for 1 week
manage_chat { action: "mute", conversation_id: "5511999887766@c.us", mute_duration: "1w" }

# Set a draft message
manage_chat { action: "set_draft", conversation_id: "5511999887766@c.us", text: "Hey, I'll call you back" }

Parameter

Type

Description

action

string

archive, unarchive, mark_read, mark_unread, pin, unpin, mute, unmute, set_draft, clear_draft

conversation_id

string

The conversation ID

mute_duration

string

8h, 1w, or forever (default). Only for mute

text

string

Draft text. Required for set_draft

manage_reminders

Create, change, complete or delete personal reminders. Stored in the cloud and delivered via the Kaption extension. Reading them is list_reminders / get_reminder (read-only tools).

# List active reminders (read-only tool)
list_reminders {}

# Create a reminder
manage_reminders { action: "create", title: "Follow up with client", datetime: "2026-03-07T14:00:00Z" }

# Complete a reminder
manage_reminders { action: "complete", id: "rem_abc123" }

# List all including completed
list_reminders { filter: "all" }

Parameter

Type

Description

action

string

create, update, delete, complete, uncomplete

id

string

Reminder ID (for update/delete/complete/uncomplete)

title

string

Reminder text (max 800 chars, no newlines)

datetime

string

ISO 8601 datetime

notification_type

string

extension, whatsapp, or automatic (default)

manage_scheduled_messages

Schedule messages to be sent automatically at a specific time, in one of two modes:

  • bot (default) — sent from Kaption's WhatsApp number, not yours. Stored in Kaption's cloud and sent even when your computer is off. One-to-one chats only; one line, up to 800 characters.

  • local ("From this computer") — sent from your own WhatsApp number, as you, while this computer and WhatsApp are open. Nothing leaves your device. Kaption keeps it within safe limits automatically (a few messages an hour and a day, minutes apart, only to chats where the other person has written, at most 3 a day to groups) and refuses what doesn't fit, with the reason. The only mode that can send to groups (ones you can post in and posted in within the last 30 days). Text only. A message whose time passes while the computer is off is marked missed, never sent late on its own.

The local mode has to be turned on by you in Kaption first (the "From this computer" option in the scheduling picker, after reading the limits and risks). An AI assistant can't turn it on; until you do, local requests are refused with (reason: no-consent). It is also rolled out gradually: where it isn't available yet, local requests are refused with (reason: flag-off) and the bot works as before.

Reading them is list_scheduled_messages / get_scheduled_message (read-only tools).

# List pending messages of both modes (each one has a "mode") — read-only tool
list_scheduled_messages {}

# Schedule with the Kaption bot
manage_scheduled_messages { action: "create", message: "Hey, just following up!", datetime: "2026-03-07T09:00:00Z", conversation_id: "5511999887766@c.us" }

# Schedule from your own number, or to a group
manage_scheduled_messages { action: "create", mode: "local", message: "Running 10 min late", datetime: "2026-03-07T09:00:00-03:00", conversation_id: "5511999887766@c.us" }
manage_scheduled_messages { action: "create", mode: "local", message: "Standup moved to 10", datetime: "2026-03-07T09:00:00Z", conversation_id: "120363000000000000@g.us" }

# Cancel a scheduled message
manage_scheduled_messages { action: "delete", id: "msg_abc123" }
manage_scheduled_messages { action: "cancel", mode: "local", id: "3f2c…" }

Parameter

Type

Description

action

string

create, update, delete; with mode: "local" also cancel, remove (a finished one), send_now (a missed or failed one)

mode

string

bot (default) or local

id

string

Scheduled message ID (for update/delete/cancel/remove/send_now)

conversation_id

string

Chat to send to (for create): a person, or a group with mode: "local"

message

string

Message text. Bot: max 800 chars, no newlines. Local: up to 2000 chars

datetime

string

ISO 8601 datetime when the message should be sent

notification_type

string

Bot only: extension, whatsapp, or automatic (default)

download_media

Download and decrypt media from a message (images, videos, audio, documents).

Parameter

Type

Description

message_id

string

The message ID containing media

conversation_id

string

The conversation the message belongs to

Returns base64-encoded media data with mimetype, size, duration, and caption.

manage_notes

Write a contact's note (WhatsApp Business). Reading it is get_contact_note { contact_id } (read-only tool).

Parameter

Type

Description

action

string

set

contact_id

string

The contact ID

note

string

Note text

Read-only tools

Claude's and Google's connector reviews require reads and writes in separate tools, so each manage_* tool only writes and these tools read (each carries readOnlyHint: true). The hub sends them to the extension as the matching manage_* call, so every Kaption version answers them.

Tool

Reads

Parameters

list_reminders

Personal reminders

filter: active (default), completed, all

get_reminder

One reminder

id

list_scheduled_messages

Scheduled messages, both modes

mode (omit for both), filter: pending (default), sent, all

get_scheduled_message

One scheduled message

id, mode

list_chat_lists

Custom chat lists (personal accounts)

—

get_chat_list

One list and its chats

id or name

get_contact_note

A contact's note (Business accounts)

contact_id

call_recordings

Read WhatsApp call recordings made by the Kaption extension and their transcripts, with every word timed. Each recording names its conversation (the other person, or the group for a group call). Recordings of locked chats are never returned.

Parameter

Type

Description

action

string

list, get, search

id

string

Recording ID (required for get)

search

string

Text to find in names and transcripts (required for search)

conversation_id

string

Only recordings of this contact or group

date_from / date_to

string

ISO 8601 date range of when the call started

limit

number

Max recordings (default 20, max 100)

include_words

boolean

For get: each word with its start and end in seconds

get_api_info

Get HTTP REST API connection info for programmatic access without MCP overhead. Returns the URL, the available endpoints and where the auth token file is (~/.kaptionai/mcp-auth-token, readable only by your user). The token itself is never returned, so it never lands in a chat transcript.

Multi-account support

Multiple WhatsApp accounts can be connected simultaneously (e.g. personal + business). Use target_session on any tool to route to a specific account. Query entity: "session" to see all connected accounts and their session IDs.

Multi-instance support

Multiple AI tools can share the same extension connection. The first instance starts a WebSocket hub; subsequent instances auto-detect the existing hub and relay through it. If the hub stops, a relay automatically promotes itself.

WebMCP support

Kaption is WebMCP-ready. On browsers that support the W3C WebMCP draft (navigator.modelContext, Chrome 146+), the extension automatically registers all tools with the browser's native AI tool registry. This means browser-based AI agents can discover and invoke Kaption tools without any MCP server or WebSocket connection — zero configuration.

When WebMCP is available, the extension registers tools prefixed with kaption_ (e.g. kaption_query, kaption_manage_chat) complete with JSON Schema input definitions and readOnlyHint annotations. The tools use the same handlers as the MCP server, so behavior is identical across both paths.

Security

  • Localhost only — no cloud relay, no external connections

  • No messages sent — AI assistants can read, organize, schedule, and draft, but never send messages directly

  • Locked chats hidden — WhatsApp-locked conversations are excluded from all queries

  • Feature-gated — MCP bridge must be explicitly enabled in the extension

  • Business features gated — labels and notes require a WhatsApp Business account

  • Rate limited — draft messages limited to 10 conversations per 5-minute window; write operations include random delays

License

BSL 1.1 — free to use, converts to MIT after 4 years.

One-time attachments (when sending from this computer is on for the account)

Use create_attachment_upload({name,mime,size,target_session?}), PUT the file bytes to its uploadUrl within 15 minutes, then send attachment:{ref:attachmentRef} within one hour. The selected Kaption account consumes the ref once and stores it locally, so a schedule days later does not depend on the temporary upload. If a download fails after consumption, create a new upload. Maximum size: 8 MiB; image, document, audio or video.

On this local hub, attachment:{path:"/absolute/file.pdf"} uploads automatically; optional name and mime override the filename/type. Paths must name regular files. The cloud relay and WebMCP do not accept paths. Arbitrary URLs are never accepted. Existing small inline {name,mime,size,dataB64} uploads continue to work. All sends still require sending from this computer to be turned on for the account, consent and ask-first rules. No assistant can accept consent.

Available Tools

18 tools
call_recordingsA
Read-only

Read WhatsApp call recordings made by the Kaption extension and their transcripts, with every word timed. Each recording names its conversation (the other person, or the group for a group call), so it links to query, get_contact and get_group. Recordings of locked chats are never returned.

Actions: list - Recordings, newest first (optional conversation_id, date_from, date_to, limit) get - One recording and its transcript: turns by speaker ("you" or "contact") with start/end seconds (requires id; include_words adds each word's timing) search - Recordings whose name or transcript matches the search text, with the matching lines (requires search; same filters as list)

Examples: Recent calls: { action: "list", limit: 10 } Calls with one person: { action: "list", conversation_id: "5491157390064@c.us" } Read a transcript: { action: "get", id: "1790000000000-a1b2c3d4" } What was said about the budget: { action: "search", search: "budget" }

Inputs: action (required), id, limit, search, +5 more.

download_mediaA
Read-only

Download media content (image, video, audio, document, sticker) from a WhatsApp message. Returns base64-encoded media data with metadata.

Get message_id from query results. The message must be a media message.

Examples: Download an image: { message_id: "true_123@c.us_3EB0...", conversation_id: "123@c.us" }

Inputs: message_id (required), conversation_id (required), target_session.

export_contactsA
Read-only

Export all WhatsApp contacts as CSV (RFC 4180) or JSON. Deduped, sorted alphabetically by display name. Default format is CSV. JSON projects the requested fields. Available fields: jid, phone, name, pushname, is_my_contact, is_business. WhatsApp "@lid" privacy identifiers (opaque, non-dialable) are always excluded — only real phone-backed contacts are returned.

Examples: CSV all fields: { format: "csv" } JSON name + phone: { format: "json", fields: ["name", "phone"] } Filtered CSV: { format: "csv", query: "Argentina" } Saved contacts only: { format: "csv", is_my_contact: true }

Inputs: query, fields, format, is_my_contact.

get_analyticsA
Read-only

Get WhatsApp analytics data: KPIs, activity patterns, rankings, response times, call stats, labels, emojis, words, countries, and more. Supports section-based drill-down, date range filtering, chat/label/community filters, pagination, and chat/contact exports.

Start with section="overview" (default) for a compact summary, then drill into specific sections.

Sections: overview — High-level summary with top 5 chats (~5KB) kpis — Core + account KPIs + account overview activity — Daily/hourly/weekday/monthly + sent/received + message types rankings — Top chats/groups/DMs/senders (paginated) response_times — Avg/median/fastest/slowest + by-hour + by-chat calls — Call statistics (total/answered/missed/video/voice) labels — Labels (business) or Lists (personal) with chat counts emojis — Top emojis (paginated) words — Top words (paginated) countries — Contact country distribution silences — Longest-inactive chats channels — Newsletter/channel details + subscriber counts communities — Community details + sub-groups conversation_starters — Who starts conversations, night msgs, unanswered streaks — Current/longest streak + last active date gaps — Conversation gaps (>1 day silence periods) organization — Pinned/archived/muted/unread chat lists chat_detail — Full analytics for ONE specific chat (requires chat_id) export_chat — Export chat messages in format (requires chat_id + format) export_contacts — Export contacts in format (requires format) community_growth — Community member count history over time channel_growth — Channel subscriber count history over time

Examples: Overview: {} Rankings: { section: "rankings", chat_type: "group", limit: 5 } Filter by label: { section: "activity", label: "Family" } Chat detail: { section: "chat_detail", chat_id: "120363406792713578@g.us" } Export CSV: { section: "export_chat", chat_id: "...", format: "csv", limit: 100 } Export contacts: { section: "export_contacts", format: "vcf" }

Inputs: label, limit, query, format, +10 more.

get_api_infoA
Read-only

Get HTTP REST API connection info for programmatic access without MCP overhead. Returns URL, auth token, and available endpoints.

Inputs: no named parameters.

get_contactA
Read-only

Look up a single WhatsApp contact by JID or phone number. Pass either parameter — both work. If multiple raw contacts share the same phone (label dupes), the saved variant wins.

Examples: By JID: { jid: "5491155550001@c.us" } By phone with +: { phone: "+5491155550001" } By phone bare: { phone: "5491155550001" }

Inputs: jid, phone.

get_contact_groupsA
Read-only

List the WhatsApp groups a specific contact participates in. Reads from cached chat metadata — no network.

Examples: Groups for contact: { jid: "5491155550001@c.us" }

Inputs: jid (required).

get_groupA
Read-only

Fetch a single group with a LIVE participant list. Forces Store.GroupMetadata.update() against the WA backend before reading, so the result reflects current membership including recent joins/leaves. Use this when accuracy matters; use list_groups for browsing.

Examples: Live group fetch: { jid: "120363421729019499@g.us" }

Inputs: jid (required).

list_contactsA
Read-only

List WhatsApp contacts from the encrypted DBR3 cache (no network). Results are deduplicated by phone number — the same person across multiple labels collapses to one row. Saved contacts sort before unsaved, then alphabetically by display name. WhatsApp "@lid" privacy identifiers (opaque, non-dialable) are always excluded — only real phone-backed contacts are returned.

Examples: All contacts: {} Saved contacts only: { is_my_contact: true } Search by name: { query: "Maria" } Page 2 of 50: { limit: 50, offset: 50 }

Inputs: limit, query, offset, is_my_contact.

list_groupsA
Read-only

List all WhatsApp groups the user belongs to. Reads from the cache — no network. For a live snapshot of a single group, use get_group (it forces a fresh GroupMetadata.update).

Examples: All groups: {} Search by group name: { query: "family" } Top 10: { limit: 10 }

Inputs: limit, query.

manage_chatA

Manage chat state: archive, unarchive, mark as read/unread, pin, unpin, mute, unmute, set/clear draft.

Actions: archive - Archive a conversation unarchive - Unarchive a conversation mark_read - Mark a conversation as read mark_unread - Mark a conversation as unread pin - Pin a conversation (max 3 pinned) unpin - Unpin a conversation mute - Mute notifications (use mute_duration for duration) unmute - Unmute notifications set_draft - Set a draft message in the compose box (requires text) clear_draft - Clear the draft message

Inputs: action (required), conversation_id (required), text, mute_duration, +1 more.

manage_labelsA
Destructive

Manage WhatsApp Business labels. Requires a WhatsApp Business account.

Actions: add - Add a label to a conversation (requires label_name/label_id + conversation_id) remove - Remove a label from a conversation (requires label_name/label_id + conversation_id) create - Create a new label (requires label_name) delete - Delete a label (requires label_name or label_id)

Inputs: action (required), label_id, label_name, conversation_id.

manage_listsA
Destructive

Manage personal chat lists (custom lists). These are the personal account equivalent of Business labels. Lists allow organizing chats into custom categories like "Family", "Work", etc. Not available on all accounts — check with action "list" first to see if lists are enabled.

Actions: list - List all custom lists (also shows if feature is enabled) get - Get a list and its associated chats (requires id or name) create - Create a new list (requires name, optional conversation_id for initial chats) edit - Edit a list name or replace its chats (requires id or name) delete - Delete a list (requires id or name) add_chat - Add conversation(s) to a list (requires id/name + conversation_id) remove_chat - Remove conversation(s) from a list (requires id/name + conversation_id)

Examples: List all: { action: "list" } Create: { action: "create", name: "Family", conversation_id: ["number@c.us"] } Add chat: { action: "add_chat", name: "Family", conversation_id: "number@c.us" }

Inputs: action (required), id, name, target_session, +1 more.

manage_notesA
Idempotent

Manage contact notes. Requires a WhatsApp Business account with notes enabled.

Actions: get - Read the note for a contact set - Write/update the note for a contact

Inputs: action (required), contact_id (required), note.

manage_remindersA
Destructive

Manage personal reminders. Reminders are stored in the cloud and trigger notifications via the Kaption extension.

Actions: list - List all reminders get - Get a specific reminder by ID create - Create a new reminder (requires title + datetime) update - Update a reminder (requires id, optional title/datetime) delete - Delete a reminder (requires id) complete - Mark a reminder as completed (requires id) uncomplete - Mark a reminder as not completed (requires id)

Examples: List all: { action: "list" } Create: { action: "create", title: "Follow up with client", datetime: "2026-03-07T14:00:00Z" } Complete: { action: "complete", id: "rem_abc123" }

Inputs: action (required), id, title, filter, +3 more.

manage_scheduled_messagesA
Destructive

Schedule WhatsApp messages to be sent automatically at a specific time, in one of two modes: bot (default) - sent from Kaption's WhatsApp number, not the user's own. Stored in Kaption's cloud and sent even when this computer is off. One-to-one chats only (no groups); one line, max 800 characters. local ("From this computer") - sent from the user's own WhatsApp number, as them, while this computer and WhatsApp are open. Stays on this device. Kaption keeps it within safe limits automatically (a few messages an hour and a day, minutes apart, only to chats where the other person has written, at most 3 a day to groups) and refuses what does not fit. The only mode that can send to groups (ones the user can post in and posted in within 30 days). Text only. A message whose time passes while this computer is off is missed, never sent late on its own. The local mode must first be turned on by the user in Kaption (its "From this computer" option, after reading the risks); an assistant cannot turn it on. A refused local request says why and ends with a reason code, e.g. "(reason: per-day)".

Actions: list - List scheduled messages of both modes (each has "mode"); pass mode to list only one get - Get a specific scheduled message by ID create - Schedule a new message (requires message + datetime + conversation_id) update - Change the message and/or datetime (requires id) delete - Cancel/delete a scheduled message (requires id); in local mode it cancels a waiting message and removes a finished one cancel - Local mode only: cancel a waiting, missed or failed message remove - Local mode only: remove a finished message from the list send_now - Local mode only: send a missed or failed message now (still within the limits) Pass mode "local" for every action on a local message.

Examples: List all: { action: "list" } Schedule (Kaption bot): { action: "create", message: "Hey, just following up!", datetime: "2026-03-07T09:00:00Z", conversation_id: "5491157390064@c.us" } Schedule from the user's own number: { action: "create", mode: "local", message: "Running 10 min late", datetime: "2026-03-07T09:00:00-03:00", conversation_id: "5491157390064@c.us" } Schedule to a group: { action: "create", mode: "local", message: "Standup moved to 10", datetime: "2026-03-07T09:00:00Z", conversation_id: "120363000000000000@g.us" } Cancel: { action: "delete", id: "msg_abc123" }

Inputs: action (required), id, mode, filter, +5 more.

queryA
Read-only

Query WhatsApp data: conversations, contacts, messages, transcriptions, labels, and communities. Supports listing, searching, filtering, and looking up by ID.

IMPORTANT: Multiple WhatsApp accounts may be connected (e.g. personal + business). Always query entity="session" FIRST to see all connected accounts and their session IDs. Then use target_session to route queries to the correct account. Each account has different conversations, contacts, and messages.

HOW TO READ MESSAGES: To get messages from a specific conversation, pass its id (e.g. "5491157390064@c.us"). This returns the conversation info WITH its messages. Use limit to control how many. Do NOT use entity="messages" for this — that is for global text search only.

AUDIO TRANSCRIPTIONS: To get audio transcriptions, use entity="transcriptions" with an optional query. Or pass a conversation id to see messages (audio messages include transcription text).

Examples: List sessions: { entity: "session" } List conversations: {} Target specific account: { entity: "conversations", target_session: "sess_abc123" } Read messages: { id: "5491157390064@c.us" } Read last 100 msgs: { id: "5491157390064@c.us", limit: 100 } Search globally: { query: "meeting" } Search in chat: { id: "5491157390064@c.us", query: "meeting" } Unread conversations: { unread: true } Search contacts: { query: "Alice", entity: "contacts" } List labels: { entity: "labels" } Filter by label: { label: "Important", entity: "conversations" } List communities: { entity: "communities" } Filter by community: { community: "My Community", entity: "conversations" } Find which groups a contact is in: { id: "5491157390064@c.us", entity: "contacts", include_participants: true } List members of a group: { entity: "contacts", group: "120363421729019499@g.us" }

Inputs: id, list, after, group, +11 more.

summarize_conversationC
Read-only

Get or generate a summary of a conversation

Inputs: conversation_id (required), message_count, target_session.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 18 tools

    Disambiguation3/5

    Most tools have distinct purposes, but `query` is a mega-tool whose entities (contacts, conversations, groups, labels, communities) overlap heavily with specialized tools like `list_contacts`, `get_contact`, `get_contact_groups`, `list_groups`, and `get_group`. Additionally `get_analytics` embeds an `export_contacts` section that duplicates the standalone `export_contacts` tool, and `manage_labels` vs `manage_lists` are parallel business/personal variants.

    Naming Consistency4/5

    Strong verb_noun pattern throughout (get_*, list_*, export_*, manage_*, download_*, summarize_*). Two deviations: the bare `query` with no noun, and the noun-only `call_recordings` with no verb, but overall the convention is predictable.

    Tool Count4/5

    18 tools is on the heavier side but reasonable given the breadth of the domain (messaging, contacts, groups, analytics, media, reminders, scheduling, lists, labels, notes, recordings). Each tool maps to a coherent capability area.

    Completeness4/5

    Broad lifecycle coverage across reads, search, media download, chat state, labels/notes/lists, reminders, scheduling, analytics, and call recordings. Notable gaps: no direct/immediate message-send tool (only scheduling) and no group-membership modification (add/remove participants), though most workflows can be worked around.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables seamless integration with WhatsApp through the Model Context Protocol, featuring multi-user support and Supabase cloud storage for persistent message history and media. Users can send messages, search chat records, and manage contacts across platforms like Claude Desktop, Cursor, and OpenClaw.
      -
    • A
      license
      B
      quality
      B
      maintenance
      Turns Claude Code, Claude Desktop, Cursor, Windsurf or ChatGPT into a WhatsApp operator that knows your customers, your templates, your wallet, and your funnel.
      29
      21 npm
      3
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Provides Claude with read-only access to your WhatsApp chat history entirely on your local machine, enabling natural language search, summarization, and retrieval of messages without sending data to the cloud.
      14 npm
      MIT