Skip to main content
Glama
razvangirgiz

wazap-mcp

by razvangirgiz

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
WAZAP_HOSTNoHTTP bind address.127.0.0.1
WAZAP_PORTNoHTTP bind port.8766
OPENAI_API_KEYNoFallback API key for OpenAI-compatible transcription when WAZAP_TRANSCRIBE_API_KEY is not set.
WAZAP_DATA_DIRNoWhere everything is stored.~/.wazap
WAZAP_NO_SHARENoSet to 1 to opt out of sharing a WhatsApp session between multiple wazap processes.0
WAZAP_READ_ONLYNoDo not register the write tools. Set to 1 to enable read-only mode.0
WAZAP_TRANSPORTNostdio or http.stdio
WAZAP_PUBLIC_URLNoThe https address agents reach the server at. Must be a bare origin with no path. With WAZAP_OAUTH_PASSWORD, turns OAuth on.
WAZAP_RATE_LIMITNoWrite tool calls per minute; 0 disables.20
WAZAP_READ_TOKENNoHTTP bearer token that grants read-only access. Required to bind a non-loopback address without OAuth.
WAZAP_TRANSCRIBENolocal, openai or off.off
WAZAP_WHISPER_BINNoPath to a whisper.cpp binary that is not on PATH.
WAZAP_WRITE_TOKENNoHTTP bearer token that also unlocks write tools.
WAZAP_WHISPER_MODELNoturbo, large-v3 or medium.turbo
WAZAP_OAUTH_PASSWORDNoWhat the consent page asks for. At least 8 characters. With WAZAP_PUBLIC_URL, turns OAuth on.
WAZAP_TRANSCRIBE_URLNoOpenAI-compatible base URL.https://api.openai.com/v1
WAZAP_NO_UPDATE_CHECKNoSet to 1 to stop status asking npm for a newer version.0
WAZAP_PERSIST_HISTORYNoKeep chats and messages across restarts.1
WAZAP_TRANSCRIBE_AUTONoTranscribe incoming voice notes in the background. Set to 0 to keep the tool and stop background work.1
WAZAP_TRANSCRIBE_MODELNoModel at that URL.gpt-4o-mini-transcribe
WAZAP_SYNC_FULL_HISTORYNoAsk WhatsApp for a fuller history sync.0
WAZAP_TRANSCRIBE_API_KEYNoAPI key for OpenAI-compatible transcription. Never a flag; stored in .env. OPENAI_API_KEY is the fallback.
WAZAP_TRANSCRIBE_LANGUAGENoSpoken language, e.g. ro.auto

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
learnA

The guide to these tools: ids, account_id with several accounts, the workflows, the message shape and what to do about each error code. Read it once, before the other tools; it never touches WhatsApp.

get_statusA

Whether the account works: status (connected, not_linked, linking with its pairing code…), sync, how fresh the history is, webhook delivery, versions. accounts lists every account, with default. Call it on NOT_CONNECTED, NOT_LINKED or SYNC_IN_PROGRESS.

link_accountA

Pair wazap with the user's WhatsApp when get_status says not_linked, logged_out, session_corrupt or auth_failure. Show the user the code it returns: WhatsApp → Settings → Linked devices → Link a device → Link with phone number instead. Then poll get_status every 10 s until connected.

list_chatsA

Conversations, most recently active first: chat_id, name, type, unread count, last message, and whether archived, pinned, muted or left. Use it to find a chat_id.

read_messagesA

Read one chat, oldest to newest: the latest messages, or older ones with before (wazap asks the phone when the local history runs out). Long texts are cut unless full_text. chat_id "status" reads the stories people posted, newest first, from the last hours (at most a day); they show nowhere else.

catch_upA

What the user missed, all accounts, within budget_tokens: waiting (every open ask of 14 days, whatever the window), mentions, calls, people, groups, stories. account_id narrows it to one account; get_status names them. The mark moves first; a lost answer is since: "previous". more.cursor: the rest.

rememberA

Keep what the user says about someone, locally, never on WhatsApp: a note, tags, details find_contact matches ({"relatie": "mama"}), or handled: true for an ask dealt with elsewhere. #private keeps their words out of what you did not ask about them by name; #no-catchup keeps them out of catch_up.

wait_for_messagesA

Wait for messages from other people, up to timeout_seconds, and return them with a cursor: pass it to the next call so nothing that lands between calls is missed. addressed_to_me wakes only for direct messages, mentions and replies to the user. For agents that stay on the line.

searchB

Find by meaning and words, with nearby source contexts. Use the question and known context, never guessed filters. Auto: exact codes/quoted literals; words: substrings. Check corrections; assessment flags ambiguity. Cite the supporting message.

get_messageA

One message in full, its words never cut: the message it quotes, each reaction with who left it, poll votes and event answers by person, its media, and on the user's own messages who it reached and who read it. Without account_id the id is looked for on every account.

find_contactA

Who a name, nickname, relationship ("mama"), filed detail ("AP-123"), group, number or id means, before drafting. resolved: contact.chat_id, with number, note, tags, details and, when writing, context. ambiguous or not_found: ask the user; never guess. Several accounts: see fix. tag: its people.

list_contactsA

The phone's address book on one account, a page at a time: saved name, phone (E.164), chat_id, contact_id, and when the last direct message was and its direction. No message words; #private people left out. address_book_synced false: not arrived yet.

get_group_infoA

A group's name, description, owner and participants (up to 500), whether the account is admin, its settings (info_locked, member_add_mode, join_approval, disappearing_seconds), its community, and the invite link for an admin. Call it before manage_group.

get_mediaB

What a message's media holds: a voice note or audio as its transcript (kept once made; an API provider bills it), or with save_to its file; a photo attached as an image; any file saved at path on the machine running wazap; a copy kept on arrival answers first. MEDIA_UNAVAILABLE: gone, none kept.

send_messageA

Drafts text, media, polls, locations, forwards; sends nothing. Call it as soon as you have recipient and text: it returns draft_id and preview (recipient, number, exact text). Show that preview; confirm_send only on a yes to this text and recipient — a send in the same request is that yes.

edit_messageA

Replace the text of a message the linked account sent. WhatsApp allows it for 15 minutes after sending; later, send a correction instead.

react_to_messageA

React to a message with one emoji, or pass "" to take your reaction off.

confirm_sendA

Send a draft the user approved — this text, this recipient: the only call that sends, once per draft. A yes about something else: show the preview again and ask. Expired, missing or stale: draft again, show the new preview, ask again. SEND_OUTCOME_UNKNOWN: read_messages, never redo it unasked.

delete_messageA

Delete a message; confirm with the user first. for_everyone: true retracts it for everyone within 2 days: the account's own message, or anyone's in a group where it is admin. for_everyone: false removes any message from the linked account's devices only.

manage_chatA

Preview archive, pin, mute, pin_message, star_message, clear, delete, block and undo. After approval repeat chat_id/action with confirmation_id, without options. Expires in 15m; one attempt. mark_read runs directly.

manage_groupA

Create a group, join one from an invite (preview first, then confirm: true), or administer one: members, name, description, photo, invite link, join requests, settings, leave. Most actions need admin. Every change shows to all members at once: say what will change, wait for a yes.

scheduled_messagesA

The account's scheduled messages: list (waiting ones soonest first, then the week's sent, missed, failed and cancelled ones) or cancel one by schedule_id before it goes. To schedule one, send_message with send_at, then confirm_send. Tell the user about every missed or failed one.

reminderA

The user's reminders about a chat, kept locally and posted to their webhook when due: create (chat_id, note, after_hours or due_at); condition "no_reply" fires only if nobody wrote there since ("if Ana has not answered in 2 days"). list, cancel. Nothing goes to WhatsApp.

Prompts

Interactive templates invoked by user choice

NameDescription
wazap-setupInstall, link or repair the WhatsApp connection. Use when the user wants to connect WhatsApp to Claude, when a WhatsApp tool returns NOT_LINKED, SESSION_EXPIRED or SESSION_CORRUPT, when `get_status` is anything but connected, or when the user asks how wazap works with Claude Desktop, Claude Code or HTTP.
whatsapp-groupsCatch up on a busy WhatsApp group. Use when the user asks what happened in a group, what was decided, what they are being asked to do there, or for a summary of a thread with many messages. Read-only.
whatsapp-inboxTriage the user's WhatsApp. Use when they ask what they missed, what's unread, who is waiting on a reply, what needs attention today, or whom they forgot to answer. Read-only; it sends nothing and marks nothing read.
whatsapp-recallFind something in the user's WhatsApp history. Use when they ask for an address, invoice, photo, document, link, phone number, date or a thing someone said or sent, or "what did X say about Y". Read-only.
whatsapp-sendSend, reply, forward, share a file or a location, react, create a poll, or change a group's photo on WhatsApp on the user's behalf. Use for any request that results in an outgoing WhatsApp message or a change others see. Find who the user means with find_contact first; messages draft first, and a group photo has no draft. Show the image, wait for a yes, then call manage_group set_picture.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 23 tools

Disambiguation4/5

Most tools target a clear, distinct resource and action (list_chats vs read_messages vs search vs catch_up are well separated, and send_message/confirm_send are explicitly staged). A few pairs could be lightly confused at a glance — remember vs reminder, find_contact vs list_contacts, manage_chat vs manage_group — but descriptions draw the boundaries clearly.

Naming Consistency4/5

Consistent snake_case throughout, with a dominant verb_noun pattern (get_status, list_chats, read_messages, confirm_send, manage_group, edit_message). Minor deviations exist in noun-form tools (reminder, scheduled_messages) and bare verbs (learn, remember, search, catch_up), but nothing ambiguous.

Tool Count4/5

23 tools is on the heavy side, but the domain genuinely spans messaging, media, contacts, groups, scheduling, reminders, memory and account linking. Each tool covers a distinct capability, so the surface is broad rather than padded.

Completeness4/5

Strong lifecycle coverage: draft/confirm send, read, search, edit, delete, react, media, contacts, groups, scheduling and account linking. Minor gaps like profile/account settings management and explicit quoting/forwarding details (partially folded into send_message/get_message) keep it from a 5.

Maintenance

ActivityActive
ResponsivenessSlow