MCP server for interacting with your LINE Official Account
Kaption WhatsApp is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Kaption is a personal MCP for WhatsApp, with voice-note and call transcripts. Search and summarize your chats, read what was said in voice notes and calls, and organize chats, labels, notes, reminders and scheduled messages from Claude, ChatGPT, Cursor or any MCP client. This local server runs on your machine and talks to the Kaption extension for WhatsApp Web (Chrome, Edge) or the Kaption desktop app, which must be open. Your messages stay on your device. There is no send-now tool: messages can only be scheduled. Setup: https://kaptionai.com/mcp/
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user kaption-whatsapp-mcp '--' npx -y @kaptionai/mcp-extension
# 2 — ask your agent for something these tools do
# query, summarize_conversation, manage_labels and 17 more
Kaption WhatsApp costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Kaption WhatsApp as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user kaption-whatsapp-mcp '--' npx -y @kaptionai/mcp-extensionReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
20 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Text to search for (names, messages, transcriptions) |
| id | string | no | Look up a specific conversation, contact, or label by ID |
| entity | string | no | Entity type to query. Defaults to "conversations" when listing, or all when searching. Use "session" to list all connected WhatsApp accounts. |
| limit | number | no | Max results (default 25, max 5000) |
| unread | boolean | no | Only return conversations with unread messages |
| label | string | no | Filter conversations by label name or ID (Business accounts) |
| list | string | no | Filter conversations by list name or ID (Personal accounts) |
| community | string | no | Filter conversations by community name or ID |
| group | string | no | Filter contacts by group ID — only return contacts that are members of this group |
| exclude_archived | boolean | no | Exclude archived conversations from listings (default true) |
| exclude_muted | boolean | no | Exclude muted conversations from listings (default false) |
| before | string | no | Return messages before this ISO 8601 datetime (e.g. "2026-03-01T12:00:00.000Z") for cursor-based pagination backward |
| after | string | no | Return messages after this ISO 8601 datetime (e.g. "2026-03-01T12:00:00.000Z") for incremental sync |
| include_participants | boolean | no | 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. |
| target_session | string | no | Session ID to target a specific WhatsApp account. Get session IDs from entity="session". If omitted, routes to the most recently active account. |
Get or generate a summary of a conversation
| Parameter | Type | Required | Notes |
|---|---|---|---|
| conversation_id | string | yes | The conversation ID |
| message_count | number | no | Number of messages to use for summary generation (default 50, max 500) |
| target_session | string | no | Session ID to target a specific WhatsApp account |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Label action to perform |
| label_name | string | no | Label name (for add/remove/create/delete) |
| label_id | string | no | Label ID (alternative to label_name for add/remove/delete) |
| conversation_id | no | Conversation ID or array of IDs (required for add/remove) |
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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Note action to perform |
| contact_id | string | yes | The contact ID |
| note | string | no | Note text (required for "set" action) |
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:…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message_id | string | yes | The message ID (from query results) |
| conversation_id | string | yes | The conversation ID containing the message |
| target_session | string | no | Session ID for multi-account routing |
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 -…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Chat action to perform |
| conversation_id | string | yes | The conversation ID |
| mute_duration | string | no | Mute duration (only for "mute" action). Default: "forever" |
| text | string | no | Draft text (required for "set_draft" action) |
| target_session | string | no | Session ID for multi-account routing |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Reminder action to perform |
| filter | string | no | Filter for list action. Default: "active" (non-completed only) |
| id | string | no | Reminder ID (required for get/update/delete/complete/uncomplete) |
| title | string | no | Reminder text (required for create, optional for update) |
| datetime | string | no | ISO 8601 datetime for the reminder (required for create, optional for update) |
| notification_type | string | no | How to notify. Default: "automatic" |
| target_session | string | no | Session ID for multi-account routing |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Filename without paths or control characters, max 200 characters |
| mime | string | yes | Allowed image, document, audio or video MIME type |
| size | integer | yes | Exact file size in bytes, maximum 8 MiB |
| target_session | string | no | Session ID of the Kaption account that will send the attachment |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| conversation_id | string | yes | Existing person chat ID or eligible group ID ending @g.us |
| message | string | no | Message or attachment caption; omit for attachment-only sends |
| attachment | no | Exactly one attachment source: dataB64, uploaded ref, or absolute local path; max 8 MiB. Requires MCP_LOCAL_SEND and local delivery | |
| target_session | string | no | Session ID for multi-account routing |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Scheduled message action to perform (cancel, remove and send_now need mode "local") |
| mode | string | no | "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 gro |
| filter | string | no | Filter for list action. Default: "pending" (not sent yet; in local mode also missed or failed ones waiting for the user) |
| id | string | no | Scheduled message ID (required for get/update/delete/cancel/remove/send_now) |
| conversation_id | string | no | Chat to send the message to (required for create): a person, or a group with mode "local" |
| message | string | no | 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 |
| attachment | no | Local create/update only. One attachment; null removes it on update. Omit message for attachment-only sends | |
| datetime | string | no | ISO 8601 datetime when the message should be sent (required for create, optional for update) |
| notification_type | string | no | Bot mode only. Notification type. Default: "automatic" |
| target_session | string | no | Session ID for multi-account routing |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | List action to perform |
| id | string | no | List ID (for get/edit/delete/add_chat/remove_chat) |
| name | string | no | List name (for create/edit, or to resolve by name) |
| conversation_id | no | Chat ID or array of IDs to add/remove | |
| target_session | string | no | Session ID for multi-account routing |
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,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Case-insensitive substring matched against name, pushname, phone, and JID |
| limit | number | no | Max contacts to return (default 50, max 500) |
| offset | number | no | Skip N contacts for pagination (default 0) |
| is_my_contact | boolean | no | If true, only contacts saved in the user address book. If false, only un-saved contacts. Omit to include both. |
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: {…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jid | string | no | Full WhatsApp JID (e.g. "5491155550001@c.us") |
| phone | string | no | Phone number — leading "+" and "00" are stripped during matching |
List the WhatsApp groups a specific contact participates in. Reads from cached chat metadata — no network. Examples: Groups for contact: { jid: "5491155550001@c.us" }
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jid | string | yes | Contact JID — must be the full @c.us form (phone alone not accepted here) |
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 }
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Case-insensitive substring match against group name |
| limit | number | no | Max groups to return (default 50, max 500) |
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: {…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jid | string | yes | Group JID — must end in "@g.us" |
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)…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| format | string | no | Output format. Default "csv" |
| query | string | no | Optional case-insensitive substring filter (matches name, pushname, phone, JID) |
| fields | array | no | Whitelist of fields to include. Defaults to all six: jid, phone, name, pushname, is_my_contact, is_business |
| is_my_contact | boolean | no | If true, only contacts saved in the user address book. If false, only un-saved. Omit to include both. |
Get HTTP REST API connection info for programmatic access without MCP overhead. Returns URL, auth token, and available endpoints.
No parameter schema on file.
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"…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| section | string | no | Analytics section to retrieve |
| date_range | string | no | Preset date range (default: "30d") |
| date_from | string | no | Custom start date (ISO 8601) — overrides date_range |
| date_to | string | no | Custom end date (ISO 8601) — overrides date_range |
| chat_id | string | no | Filter to specific chat. Required for chat_detail/export_chat |
| label | string | no | Filter by label/list name or ID |
| community | string | no | Filter by community name or ID |
| chat_type | string | no | Filter rankings by chat type |
| limit | number | no | Max items for paginated sections (default 20, max 500) |
| offset | number | no | Skip N items for pagination |
| format | string | no | Export format (required for export_chat/export_contacts) |
| query | string | no | Search keyword — filter analytics to only messages containing this text. Shows activity patterns for conversations mentioning a topic. |
| include_transcriptions | boolean | no | Include audio transcriptions in exports (default true) |
| target_session | string | no | Session ID for multi-account routing |
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.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Call recordings action to perform |
| id | string | no | Recording ID (required for get) |
| search | string | no | Text to find in names and transcripts (required for search) |
| conversation_id | string | no | Only recordings of this conversation (a contact or group ID) |
| date_from | string | no | Only recordings started on or after this date (ISO 8601) |
| date_to | string | no | Only recordings started on or before this date (ISO 8601) |
| limit | number | no | Max recordings to return (default 20, max 100) |
| include_words | boolean | no | For get: include each word with its start and end in seconds (default false) |
| target_session | string | no | Session ID for multi-account routing |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under BUSL-1.1
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Kaption WhatsApp or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.5.8. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Kaption WhatsApp can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.