pingwa

io.github.grzgrzgrz3由 GitHub 帳號 grzgrzgrz3 發布v0.4.1更新於 Oct 24, 2026

Zero-setup WhatsApp notifications + human-in-the-loop for AI agents — text 'join', send in 60s.

已驗證Streamable HTTP可網頁執行效率與工作流溝通與協作

概覽

AI 產生的概覽

把 WhatsApp 通知送到自己的手機,並讓代理在 WhatsApp 上向你提問、阻塞等待回覆。

可以做什麼
  • 向帳號持有人本人的手機傳送文字訊息,可附上公開圖片連結作為說明
  • 在 WhatsApp 上向人提問,最多三個可點按按鈕,並等待回答或逾時
  • 拉取收到的 WhatsApp 訊息,支援游標與長輪詢,用來接收臨時指示或較晚的回覆
  • 查看帳號方案、當月剩餘配額,以及免費 24 小時回覆視窗是否開啟
  • 取得升級 Pro 的 Stripe 結帳連結,若已是 Pro 則回傳帳單管理連結
適用情境
適合長時間執行的代理或腳本在建置、部署完成時通知你,或在任務中途需要人做決定時,讓你直接在 WhatsApp 上點按鈕回答,不必盯著終端機。
執行需求
需要 PINGWA_KEY 環境變數中的 pingwa API 金鑰(在 WhatsApp 上向服務號碼傳送 join 取得)。可作為遠端端點以 Bearer 金鑰標頭連線,也可用 uvx 在本機執行(需 Python/uv)。需能連線至 pingwa 後端;可用 PINGWA_BASE_URL 指向自架後端。
安裝前請注意
此金鑰是能傳訊並消耗配額的憑證,請勿外流到聊天或日誌。訊息會經過託管的 pingwa 後端,後端可看到傳送的文字與圖片連結。upgrade 工具會回傳 Stripe 付款連結,應由人自行開啟並付款。Webhook 簽章密鑰只顯示一次,需立即保存。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 pingwa,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.grzgrzgrz3%2Fpingwa/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "pingwa": {
      "type": "http",
      "url": "https://pingwa.dev/mcp"
    }
  }
}

README

pingwa (client)

[PyPI] [Python] [License: MIT]

WhatsApp notifications for AI agents and scripts with zero setup — no Meta account, no templates, no dashboard: text "join", get an API key, curl → WhatsApp in 60s. Two-way human-in-the-loop: your agent asks, you tap a button to answer. From your terminal or an MCP client.

This is the open-source (MIT) pingwa client: a CLI, a tiny HTTP client, and an MCP server. It talks to a pingwa backend (the hosted service at https://pingwa.dev, or your own). The backend is separate and private; this client is not.

Install & use

No install needed with uv:

bash
export PINGWA_KEY=pw_your_key          # get one: send "join" on WhatsApp to the service numberuvx pingwa send "build finished ✅"     # notify your own phoneecho "deploy done" | uvx pingwa send -  # from stdinuvx pingwa ask "Deploy to prod?" --button yes --button no   # wait for a reply from your phoneuvx pingwa replies                      # pull messages your phone sent back (out-of-band steering)uvx pingwa me                           # plan / quota / reply-windowuvx pingwa keys                         # list active API keys (up to 10 named keys per number)uvx pingwa keys revoke ci               # revoke one by name (or reply 'revoke ci' on WhatsApp)uvx pingwa upgrade                      # get a Stripe link to go Pro (no password needed)uvx pingwa send "x" --json              # raw JSON response

AI agents: don't ask your human to copy-paste a key — drive the registration yourself (POST /v1/registrations; full recipe in llms.txt). The human only taps one WhatsApp link; the key is claimed by you and never travels through the chat. Works for existing accounts too — it mints an additional named key.

Exit codes: 0 ok · 2 missing key · 3 quota exceeded · 1 other. Override the backend with PINGWA_BASE_URL or --base-url.

Webhooks

Prefer PUSH over polling replies? Register HTTPS endpoints and pingwa POSTs every inbound WhatsApp message to them:

bash
uvx pingwa webhooks                                   # list your webhooksuvx pingwa webhooks add https://your-host/pingwa-hook # returns a signing SECRET, shown ONCEuvx pingwa webhooks rm https://your-host/pingwa-hook  # by id, or by exact url

add prints a whsec_... secret once — store it now; it never appears again. Each delivery carries an X-Pingwa-Signature: sha256=<hex> header (an HMAC-SHA256 of the raw body under that secret) — verify it and reject anything that fails. Full verification recipe and payload shape: llms.txt. Up to 5 active webhooks per account; to rotate a secret, rm then add again.

MCP server

Same tools on stdio and remote: notify(text), ask(text, buttons?, timeout?), check_replies(since?, wait?), check_status(), upgrade().

Local (stdio) — for Claude Desktop / Claude Code:

json
{  "mcpServers": {    "pingwa": {      "command": "uvx",      "args": ["pingwa", "mcp"],      "env": { "PINGWA_KEY": "pw_your_key" }    }  }}

Remote (Streamable HTTP, no install):

json
{  "mcpServers": {    "pingwa": {      "url": "https://pingwa.dev/mcp",      "headers": { "Authorization": "Bearer pw_your_key" }    }  }}

Every error carries an action hint, so an agent knows what to do next.

What it sends

Only your message text and your key, to the pingwa backend you point it at — over HTTPS. Nothing else. The recipient is always your own phone (there is no "to" field). See the service's /privacy.

License

MIT — see LICENSE in the repository root. It covers this client package only (src/pingwa/client/); the pingwa server is separate, private, and not published. See NOTICE for the exact boundary.

來源:README.md,提交 58a47df

工具

5

notify

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.

輸入參數text必填image_url

check_status

Show the pingwa account's plan, remaining monthly quota, and whether the free 24h WhatsApp reply window is currently open.

無需輸入參數。

upgrade

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.

無需輸入參數。

ask

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

輸入參數text必填buttonstimeout

check_replies

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.

輸入參數waitsince

版本歷史

1
  1. v0.4.1最新Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分