# Kaption WhatsApp (npm · @kaptionai/mcp-extension)

Read and manage your WhatsApp conversations through the KaptionAI browser extension.

- Trust score: 59/100 (low)
- Change this week: −22
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-24

## Components

- npm · `@kaptionai/mcp-extension`: 59/100 (this document), [markdown](https://verifymcp.io/servers/kaption-ai-mcp-extension/kaptionai-mcp-extension.md), [page](https://verifymcp.io/servers/kaption-ai-mcp-extension/kaptionai-mcp-extension)

## Channel facts

- Registry: `npm`
- Package: `@kaptionai/mcp-extension`
- Version: `0.5.11`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-24.

- **Supply Chain Security**: 13/100
  - Malware scan not yet available for this package.
  - Known CVEs could not be checked: the version this server declares is not published in its registry.
  - No install/post-install scripts declared.
  - Dependency health could not be checked: the version this server declares is not published in its registry.
- **Provenance & Transparency**: 87/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to Kaption-AI/mcp-extension).
  - License check failed: the license (BUSL-1.1) isn't a recognized OSI-approved license.
  - Actively maintained (last published 0 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 63/100
  - AI-judged instruction clarity (excellent).
  - 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.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 60/100
  - Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### 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.

### Claude

```bash
claude mcp add kaption-ai-mcp-extension -- npx -y @kaptionai/mcp-extension
```

### Cursor

```json
{
  "mcpServers": {
    "kaption-ai-mcp-extension": {
      "command": "npx",
      "args": [
        "-y",
        "@kaptionai/mcp-extension"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "kaption-ai-mcp-extension": {
      "command": "npx",
      "args": [
        "-y",
        "@kaptionai/mcp-extension"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add kaption-ai-mcp-extension -- npx -y @kaptionai/mcp-extension
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "kaption-ai-mcp-extension": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@kaptionai/mcp-extension"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add kaption-ai-mcp-extension --command npx --arg -y --arg @kaptionai/mcp-extension
```

### Hermes

```yaml
mcp_servers:
  kaption-ai-mcp-extension:
    command: "npx"
    args: ["-y", "@kaptionai/mcp-extension"]
```

### Netclaw

```json
{
  "McpServers": {
    "kaption-ai-mcp-extension": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@kaptionai/mcp-extension"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add kaption-ai-mcp-extension -t stdio -c npx -a -y @kaptionai/mcp-extension
```

### Other

```json
{
  "mcpServers": {
    "kaption-ai-mcp-extension": {
      "command": "npx",
      "args": [
        "-y",
        "@kaptionai/mcp-extension"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-24 (score 59, −25)

- [security regression] CVE-2023-54404 affects this package: high
- [security regression] Known CVEs: pass → unverified
- [security regression] Malware scan: pass → unverified
- [security regression] Known CVEs: pass → fail
- [functional regression] 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

### 2026-10-22 (score 84, +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.

### 2026-10-20 (score 83, +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.

### 2026-10-18 (score 82, +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.

### 2026-10-16 (score 81, +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.

### 2026-10-15 (score 80, +4)

- [functional improvement] Stability: unverified → 0.30

### 2026-10-12 (score 76, 0)

- [functional improvement] Security disclosure: unverified → pass

### 2026-10-11 (score 76, 0)

- [functional regression] Security disclosure: pass → unverified

## MCP tools (20)

### `query` (~836 tokens)

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" }

Input parameters:

- `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

### `summarize_conversation` (~70 tokens)

Get or generate a summary of a conversation

Input parameters:

- `conversation_id` (string, required): 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

### `manage_labels` (~153 tokens)

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)

Input parameters:

- `action` (string, required): 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)

### `manage_notes` (~83 tokens)

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

Input parameters:

- `action` (string, required): Note action to perform
- `contact_id` (string, required): The contact ID
- `note` (string): Note text (required for "set" action)

### `download_media` (~129 tokens)

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" }

Input parameters:

- `conversation_id` (string, required): The conversation ID containing the message
- `message_id` (string, required): The message ID (from query results)
- `target_session` (string): Session ID for multi-account routing

### `manage_chat` (~232 tokens)

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

Input parameters:

- `action` (string, required): Chat action to perform
- `conversation_id` (string, required): 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)

### `manage_reminders` (~306 tokens)

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" }

Input parameters:

- `action` (string, required): 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)

### `create_attachment_upload` (~188 tokens)

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.

Input parameters:

- `mime` (string, required): Allowed image, document, audio or video MIME type
- `name` (string, required): Filename without paths or control characters, max 200 characters
- `size` (integer, required): Exact file size in bytes, maximum 8 MiB
- `target_session` (string): Session ID of the Kaption account that will send the attachment

### `send_message` (~230 tokens)

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.

Input parameters:

- `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, required): 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

### `manage_scheduled_messages` (~958 tokens)

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…

Input parameters:

- `action` (string, required): 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

### `manage_lists` (~326 tokens)

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" }

Input parameters:

- `action` (string, required): 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

### `list_contacts` (~228 tokens)

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 }

Input parameters:

- `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

### `get_contact` (~146 tokens)

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" }

Input parameters:

- `jid` (string): Full WhatsApp JID (e.g. "5491155550001@c.us")
- `phone` (string): Phone number — leading "+" and "00" are stripped during matching

### `get_contact_groups` (~75 tokens)

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

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

Input parameters:

- `jid` (string, required): Contact JID — must be the full @c.us form (phone alone not accepted here)

### `list_groups` (~114 tokens)

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 }

Input parameters:

- `limit` (number): Max groups to return (default 50, max 500)
- `query` (string): Case-insensitive substring match against group name

### `get_group` (~96 tokens)

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" }

Input parameters:

- `jid` (string, required): Group JID — must end in "@g.us"

### `export_contacts` (~266 tokens)

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 }

Input parameters:

- `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)

### `get_api_info` (~33 tokens)

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

### `get_analytics` (~743 tokens)

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…

Input parameters:

- `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

### `call_recordings` (~408 tokens)

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" }

Input parameters:

- `action` (string, required): 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

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/kaption-ai-mcp-extension/kaptionai-mcp-extension#diagnostics

## Score history

- 2026-10-24: 59
- 2026-10-23: 84
- 2026-10-22: 84
- 2026-10-21: 83
- 2026-10-20: 83
- 2026-10-19: 82
- 2026-10-18: 82
- 2026-10-17: 81
- 2026-10-16: 81
- 2026-10-15: 80
- 2026-10-14: 76
- 2026-10-13: 76
- 2026-10-12: 76
- 2026-10-11: 76
- 2026-10-07: 76

## Common questions

### 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.

## Links

- npm package: https://www.npmjs.com/package/@kaptionai/mcp-extension
- Socket report: https://socket.dev/npm/package/@kaptionai/mcp-extension
- Repository: https://github.com/Kaption-AI/mcp-extension
- Changelog RSS feed: https://verifymcp.io/servers/kaption-ai-mcp-extension/kaptionai-mcp-extension.xml
- Changelog JSON feed: https://verifymcp.io/servers/kaption-ai-mcp-extension/kaptionai-mcp-extension.json
- HTML version of this page: https://verifymcp.io/servers/kaption-ai-mcp-extension/kaptionai-mcp-extension
