Zero-setup WhatsApp notifications + human-in-the-loop for AI agents — text 'join', send in 60s.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Ask the human a question on WhatsApp and BLOCK until they reply (or timeout). `text` is the question. `buttons` (optional, up to 3) render as tappable reply buttons; omit them to invite a free-text answer the human types on their phone — use this to let the human steer you mid-task. `timeout` is seconds to wait (max 90). Returns the human's reply (free text and/or the chosen option). On timeout, returns a note — the question was delivered and the answer is still retrievable via `check_replies`.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Ask the human a question on WhatsApp and BLOCK until they reply (or timeout). `text` is the question. `buttons` (optional, up to 3) render as tappable reply buttons; omit them to invite a free-text answer the human types on their phone — use this to let the human steer you mid-task. `timeout` is seconds to wait (max 90). Returns the human's reply (free text and/or the chosen option). On timeout, returns a note — the question was delivered and the answer is still retrievable via `check_replies`.
| Argument | Type | Description |
|---|---|---|
| text* | string | |
| buttons | any | |
| timeout | integer |
{
"type": "object",
"title": "askArguments",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text"
},
"buttons": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Buttons",
"default": null
},
"timeout": {
"type": "integer",
"title": "Timeout",
"default": 60
}
}
}Pull inbound WhatsApp messages the human sent to pingwa (out-of-band instructions, or late answers to an `ask`). `since` is a cursor from a previous call (pass it back to get only newer messages); `wait` long-polls up to that many seconds for something to arrive. Returns the messages and a new cursor.
| Argument | Type | Description |
|---|---|---|
| wait | integer | |
| since | any |
{
"type": "object",
"title": "check_repliesArguments",
"properties": {
"wait": {
"type": "integer",
"title": "Wait",
"default": 0
},
"since": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Since",
"default": null
}
}
}Show the pingwa account's plan, remaining monthly quota, and whether the free 24h WhatsApp reply window is currently open.
No arguments.
{
"type": "object",
"title": "check_statusArguments",
"properties": {}
}Send a WhatsApp notification to the account owner's own phone. `text` is the message (1-1024 chars). `image_url` (optional) is a public https image link — a screenshot, chart or diff — delivered as an image with `text` as the caption when the user's 24h window is open (otherwise text only). Returns a confirmation with the queued message id; raises an actionable error on quota/auth.
| Argument | Type | Description |
|---|---|---|
| text* | string | |
| image_url | any |
{
"type": "object",
"title": "notifyArguments",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text"
},
"image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Image Url",
"default": null
}
}
}Get a link to upgrade the account to Pro (raises the monthly quota). Returns a Stripe Checkout URL for the human to open and pay — no pingwa password needed, the card is handled by Stripe. If the account is already Pro, returns a billing-portal URL to manage or cancel instead.
No arguments.
{
"type": "object",
"title": "upgradeArguments",
"properties": {}
}