Kaption WhatsApp
NPM · @KAPTIONAI/MCP-EXTENSION
Read and manage your WhatsApp conversations through the KaptionAI browser extension.
Available components
Last scanned (55 minutes ago)
Scores higher than 36% of npm servers
Category Communication
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security13
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: the version this server declares is not published in its registry.Unverified
- No install/post-install scripts declared.Pass
- Dependency health could not be checked: the version this server declares is not published in its registry.Unverified
Provenance & Transparency87
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to Kaption-AI/mcp-extension). View diagnostics → Pass
- License check failed: the license (BUSL-1.1) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability63
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5620 tokens (~281/item across 20 items; 20 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management60
- Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 24 Oct 26 −25
- CVE-2023-54404 affects this package: high ▼ security
- Known CVEs: pass → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Known CVEs: pass → fail ▼ security
- Dependency health: 0.85 → unverified ▼ functional
- Destructive annotations: pass → 100 functional
- Package version: 0.5.6 → 0.5.11 functional
- Package version: 0.5.6 → 0.5.10 functional
- 22 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 +4
- Stability: unverified → 0.30 ▲ functional
- 12 Oct 26 0
- Security disclosure: unverified → pass ▲ functional
- 11 Oct 26 0
- Security disclosure: pass → unverified ▼ functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Oct 2026 · Analysed npm/@kaptionai/mcp-extension@0.5.11
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | Kaption-AI/mcp-extension |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/Kaption-AI/mcp-extension/.github/workflows/publish.yml@refs/tags/v0.5.11 |
| Rekor log index | 3431242340 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:3d8b4d1b6b34de5500f95b49fcef88816923fae72ad22d7e94090254a56c6689101a10bfeb622d0cbda6a089ba7d3fc3e443ab8c069d99c4dc532a067 |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
call_recordings ~408
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" }
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Call recordings action to perform |
| conversation_id | string | – | Only recordings of this conversation (a contact or group ID) |
| date_from | string | – | Only recordings started on or after this date (ISO 8601) |
| date_to | string | – | Only recordings started on or before this date (ISO 8601) |
| id | string | – | Recording ID (required for get) |
| include_words | boolean | – | For get: include each word with its start and end in seconds (default false) |
| limit | number | – | Max recordings to return (default 20, max 100) |
| search | string | – | Text to find in names and transcripts (required for search) |
| target_session | string | – | Session ID for multi-account routing |
No output schema declared.
No examples provided.
create_attachment_upload ~188
Create a one-time attachment upload slot, authorized by your connected Kaption account and owner-only MCP_LOCAL_SEND. Returns uploadUrl, attachmentRef and expiresAt. PUT the raw file bytes to uploadUrl within 15 minutes (e.g. curl -T file.pdf), then pass attachment: {ref: attachmentRef} to send_message or a local schedule create/update within one hour. The extension consumes the ref once and stores the bytes locally. No third-party URLs. Requires a connected Rust extension; target_session selects the account.
| Name | Type | Req | Description |
|---|---|---|---|
| mime | string | yes | Allowed image, document, audio or video MIME type |
| name | string | yes | Filename without paths or control characters, max 200 characters |
| size | integer | yes | Exact file size in bytes, maximum 8 MiB |
| target_session | string | – | Session ID of the Kaption account that will send the attachment |
No output schema declared.
No examples provided.
download_media ~129
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" }
| Name | Type | Req | Description |
|---|---|---|---|
| conversation_id | string | yes | The conversation ID containing the message |
| message_id | string | yes | The message ID (from query results) |
| target_session | string | – | Session ID for multi-account routing |
No output schema declared.
No examples provided.
export_contacts ~266
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 }
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | – | Whitelist of fields to include. Defaults to all six: jid, phone, name, pushname, is_my_contact, is_business |
| format | string | – | Output format. Default "csv" |
| is_my_contact | boolean | – | If true, only contacts saved in the user address book. If false, only un-saved. Omit to include both. |
| query | string | – | Optional case-insensitive substring filter (matches name, pushname, phone, JID) |
No output schema declared.
No examples provided.
get_analytics ~743
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: "act…
| Name | Type | Req | Description |
|---|---|---|---|
| chat_id | string | – | Filter to specific chat. Required for chat_detail/export_chat |
| chat_type | string | – | Filter rankings by chat type |
| community | string | – | Filter by community name or ID |
| date_from | string | – | Custom start date (ISO 8601) — overrides date_range |
| date_range | string | – | Preset date range (default: "30d") |
| date_to | string | – | Custom end date (ISO 8601) — overrides date_range |
| format | string | – | Export format (required for export_chat/export_contacts) |
| include_transcriptions | boolean | – | Include audio transcriptions in exports (default true) |
| label | string | – | Filter by label/list name or ID |
| limit | number | – | Max items for paginated sections (default 20, max 500) |
| offset | number | – | Skip N items for pagination |
| query | string | – | Search keyword — filter analytics to only messages containing this text. Shows activity patterns for conversations mentioning a topic. |
| section | string | – | Analytics section to retrieve |
| target_session | string | – | Session ID for multi-account routing |
No output schema declared.
No examples provided.
get_api_info ~33
Get HTTP REST API connection info for programmatic access without MCP overhead. Returns URL, auth token, and available endpoints.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_contact ~146
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" }
| Name | Type | Req | Description |
|---|---|---|---|
| jid | string | – | Full WhatsApp JID (e.g. "5491155550001@c.us") |
| phone | string | – | Phone number — leading "+" and "00" are stripped during matching |
No output schema declared.
No examples provided.
get_contact_groups ~75
List the WhatsApp groups a specific contact participates in. Reads from cached chat metadata — no network. Examples: Groups for contact: { jid: "5491155550001@c.us" }
| Name | Type | Req | Description |
|---|---|---|---|
| jid | string | yes | Contact JID — must be the full @c.us form (phone alone not accepted here) |
No output schema declared.
No examples provided.
get_group ~96
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" }
| Name | Type | Req | Description |
|---|---|---|---|
| jid | string | yes | Group JID — must end in "@g.us" |
No output schema declared.
No examples provided.
list_contacts ~228
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 }
| Name | Type | Req | Description |
|---|---|---|---|
| is_my_contact | boolean | – | If true, only contacts saved in the user address book. If false, only un-saved contacts. Omit to include both. |
| limit | number | – | Max contacts to return (default 50, max 500) |
| offset | number | – | Skip N contacts for pagination (default 0) |
| query | string | – | Case-insensitive substring matched against name, pushname, phone, and JID |
No output schema declared.
No examples provided.
list_groups ~114
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 }
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Max groups to return (default 50, max 500) |
| query | string | – | Case-insensitive substring match against group name |
No output schema declared.
No examples provided.
manage_chat ~232
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
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Chat action to perform |
| conversation_id | string | yes | The conversation ID |
| mute_duration | string | – | Mute duration (only for "mute" action). Default: "forever" |
| target_session | string | – | Session ID for multi-account routing |
| text | string | – | Draft text (required for "set_draft" action) |
No output schema declared.
No examples provided.
manage_labels ~153
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)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Label action to perform |
| conversation_id | – | – | Conversation ID or array of IDs (required for add/remove) |
| label_id | string | – | Label ID (alternative to label_name for add/remove/delete) |
| label_name | string | – | Label name (for add/remove/create/delete) |
No output schema declared.
No examples provided.
manage_lists ~326
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" }
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | List action to perform |
| conversation_id | – | – | Chat ID or array of IDs to add/remove |
| id | string | – | List ID (for get/edit/delete/add_chat/remove_chat) |
| name | string | – | List name (for create/edit, or to resolve by name) |
| target_session | string | – | Session ID for multi-account routing |
No output schema declared.
No examples provided.
manage_notes ~83
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
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Note action to perform |
| contact_id | string | yes | The contact ID |
| note | string | – | Note text (required for "set" action) |
No output schema declared.
No examples provided.
manage_reminders ~306
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" }
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Reminder action to perform |
| datetime | string | – | ISO 8601 datetime for the reminder (required for create, optional for update) |
| filter | string | – | Filter for list action. Default: "active" (non-completed only) |
| id | string | – | Reminder ID (required for get/update/delete/complete/uncomplete) |
| notification_type | string | – | How to notify. Default: "automatic" |
| target_session | string | – | Session ID for multi-account routing |
| title | string | – | Reminder text (required for create, optional for update) |
No output schema declared.
No examples provided.
manage_scheduled_messages ~958
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). Supports one image, document, audio or video attachment (8 MiB max), behind MCP_LOCAL_SEND and Rust core; audio captions are refused. 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" } Sched…
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Scheduled message action to perform (cancel, remove and send_now need mode "local") |
| attachment | – | – | Local create/update only. One attachment; null removes it on update. Omit message for attachment-only sends |
| conversation_id | string | – | Chat to send the message to (required for create): a person, or a group with mode "local" |
| datetime | string | – | ISO 8601 datetime when the message should be sent (required for create, optional for update) |
| filter | string | – | Filter for list action. Default: "pending" (not sent yet; in local mode also missed or failed ones waiting for the user) |
| id | string | – | Scheduled message ID (required for get/update/delete/cancel/remove/send_now) |
| message | string | – | Message text to send (required for create, optional for update). Bot: one line, max 800 characters. Local: text or caption up to 2000 characters; omit with an attachment |
| mode | string | – | "bot" (default): sent from Kaption's WhatsApp number. "local": sent from the user's own WhatsApp number while this computer and WhatsApp are open, within safe limits kept automatically; needed for gr… |
| notification_type | string | – | Bot mode only. Notification type. Default: "automatic" |
| target_session | string | – | Session ID for multi-account routing |
No output schema declared.
No examples provided.
query ~836
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" }
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | Return messages after this ISO 8601 datetime (e.g. "2026-03-01T12:00:00.000Z") for incremental sync |
| before | string | – | Return messages before this ISO 8601 datetime (e.g. "2026-03-01T12:00:00.000Z") for cursor-based pagination backward |
| community | string | – | Filter conversations by community name or ID |
| entity | string | – | Entity type to query. Defaults to "conversations" when listing, or all when searching. Use "session" to list all connected WhatsApp accounts. |
| exclude_archived | boolean | – | Exclude archived conversations from listings (default true) |
| exclude_muted | boolean | – | Exclude muted conversations from listings (default false) |
| group | string | – | Filter contacts by group ID — only return contacts that are members of this group |
| id | string | – | Look up a specific conversation, contact, or label by ID |
| include_participants | boolean | – | Include group participants in results. Useful when looking up a contact by ID to see which groups they belong to, or when querying a group to see its members. |
| label | string | – | Filter conversations by label name or ID (Business accounts) |
| limit | number | – | Max results (default 25, max 5000) |
| list | string | – | Filter conversations by list name or ID (Personal accounts) |
| query | string | – | Text to search for (names, messages, transcriptions) |
| target_session | string | – | Session ID to target a specific WhatsApp account. Get session IDs from entity="session". If omitted, routes to the most recently active account. |
| unread | boolean | – | Only return conversations with unread messages |
No output schema declared.
No examples provided.
send_message ~230
Queue a WhatsApp message from this computer for the earliest permitted delivery. Requires the owner-only MCP_LOCAL_SEND flag, Rust core, and user consent in Kaption. Supports an existing person chat or eligible group (@g.us) and one image, document, audio or video attachment (8 MiB max). Message is optional with an attachment; audio cannot have captions. Returns queued plus a schedule ID, not proof of delivery. Existing ask-first prompts, 8/hour, 20/day, group limits and delays apply. An assistant cannot accept consent or confirmation. Computer and WhatsApp must remain open. Use manage_scheduled_messages with mode local to inspect or cancel the returned ID.
| Name | Type | Req | Description |
|---|---|---|---|
| attachment | – | – | Exactly one attachment source: dataB64, uploaded ref, or absolute local path; max 8 MiB. Requires MCP_LOCAL_SEND and local delivery |
| conversation_id | string | yes | Existing person chat ID or eligible group ID ending @g.us |
| message | string | – | Message or attachment caption; omit for attachment-only sends |
| target_session | string | – | Session ID for multi-account routing |
No output schema declared.
No examples provided.
summarize_conversation ~70
Get or generate a summary of a conversation
| Name | Type | Req | Description |
|---|---|---|---|
| conversation_id | string | yes | The conversation ID |
| message_count | number | – | Number of messages to use for summary generation (default 50, max 500) |
| target_session | string | – | Session ID to target a specific WhatsApp account |
No output schema declared.
No examples provided.
How do I install the Kaption WhatsApp MCP server?
Kaption WhatsApp runs locally as an npm package, launched with npx -y @kaptionai/mcp-extension. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @kaptionai/mcp-extension
claude mcp add kaption-ai-mcp-extension -- npx -y @kaptionai/mcp-extension
What is the Kaption WhatsApp MCP server?
Kaption WhatsApp is an MCP server listed in the public MCP registry as io.github.Kaption-AI/mcp-extension. Read and manage your WhatsApp conversations through the KaptionAI browser extension. This page covers its npm package (@kaptionai/mcp-extension).
Is the Kaption WhatsApp MCP server safe to use?
Kaption WhatsApp scores 59 out of 100 on VerifyMCP. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Kaption WhatsApp MCP server expose?
Kaption WhatsApp exposes 20 tools: query, summarize_conversation, manage_labels, manage_notes, download_media, and 15 more. Their descriptions and schemas cost roughly 5,620 tokens of context every time the server is loaded.
Is the Kaption WhatsApp MCP server still maintained?
Kaption WhatsApp is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Kaption WhatsApp MCP server under?
Kaption WhatsApp declares the BUSL-1.1 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.