← Files PingRoomARCHIVED FILE
skills/pingroom-mcp/references/tools.md
17.4 KB · Oct 5, 2026 · 18:23 UTC
# PingRoom MCP — complete tool reference
Generated from the live `tools/list` of https://api.pingroom.io/api/agent/mcp
(27 tools). Regenerate by POSTing `{"jsonrpc":"2.0","id":1,"method":"tools/list"}`
to that endpoint. Every tool call is `tools/call`; in Claude Code the tools
surface as `mcp__pingroom__<name>` (load schemas with ToolSearch
"select:mcp__pingroom__<name>" before first use).
Annotations: R = read-only, D = destructive, I = idempotent.
## list_rooms [RI]
List the rooms the authenticated account belongs to.
(no arguments)
## list_quick_actions [RI]
List the quick actions configured for a room.
- `invite_code` (string) **(required)**. Room invite code.
## trigger_quick_action [D]
Press a room quick action, notifying its members. Rate-limited.
- `invite_code` (string) **(required)**. Room invite code.
- `action_number` (integer) **(required)** — 1–4. Quick-action slot number (1–4).
- `trigger_source` (string) — one of: `manual`, `location`. Defaults to "manual". Only these two are client-settable — "webhook" and "system" are stamped server-side and are rejected here.
- `is_urgent` (boolean). Deliver this one press time-sensitive so it breaks through Focus / Do Not Disturb. Send-time only — the action's saved configuration is unchanged.
- `requires_ack` (boolean). Keep this one press open until an eligible recipient acknowledges it. Send-time only and elevating only: true adds the acknowledgement to an action that has none, false never disables the action's stored ack policy.
## broadcast [D]
Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there).
- `invite_code` (string) **(required)**. Room invite code.
- `message` (string) **(required)** — ≤160 chars. Ping body text (max 120 characters in private rooms, 160 in public rooms).
- `title` (string) — ≤40 chars. Optional headline. Defaults to the room name.
- `action_number` (integer) — 1–4. Optional quick-action slot to attribute the ping to.
- `action_icon` (string) — ≤50 chars. Optional emoji shown with the ping.
- `data` (object). Arbitrary structured context (max 25 keys / 8KB). Read surfaces return it after connector privacy filtering; do not put secrets in data. data.location is reserved for a shareable location, and data.url + data.button_label are reserved for a tappable link ping.
- `data.location` (object). A shareable geographic location.
- `data.location.latitude` (number). Latitude in decimal degrees.
- `data.location.longitude` (number). Longitude in decimal degrees.
- `data.location.label` (string). Optional place name shown to the recipient.
- `data.location.address` (string). Optional formatted street address.
- `data.url` (string). Reserved: an absolute http:// or https:// URL. Present turns the ping into a tappable link.
- `data.button_label` (string). Reserved: label for the link button rendered for data.url.
- `data.label` (string). Reserved: short caption shown with the link ping.
- `correlation_id` (string) — ≤255 chars. Your own id, echoed back unchanged on read.
- `reply_to` (string) — ≤255 chars. Id of the ping this one answers (notification id or correlation id).
- `is_urgent` (boolean). Deliver time-sensitive so the ping breaks through Focus / Do Not Disturb. Independent of requires_ack: urgent affects delivery only and asks nothing of the recipient.
- `requires_ack` (boolean). Keep this ping open until one eligible recipient acknowledges it, and show it as a lock-screen card with an Acknowledge button. Does not raise the interruption level on its own — combine with is_urgent for an ack that also breaks through Focus.
- `ack_timeout_seconds` (integer) — 60–86400. Optional acknowledgement deadline in seconds.
- `attachment_ids` (array) — ≤4 items. Ids of up to 4 uploaded attachments (see upload_attachment) to include. Uploading requires a Pro account.
## live_status [DI]
Start, update, or end a live progress card on the room members' lock screen (an iOS Live Activity / Android live update). Reuse the same correlation_id for every ping of one stream: the first ping starts the card and sends one alert, further "running" pings move it silently, and the first "done"/"failed" sends one completion alert and ends it. Free accounts get a small number of NEW streams per day; updates and the final ping are never charged.
- `invite_code` (string) **(required)**. Room invite code.
- `correlation_id` (string) **(required)** — ≤255 chars. The stream key. Reuse it on every ping of the same stream.
- `live_status` (object) **(required)**. The live card's state. Only state is required.
- `live_status.state` (string) **(required)**. running keeps the card live; done/failed end it with one completion alert.
- `live_status.template` (string). Which layout the OS renders. Fixed at stream creation.
- `live_status.category` (string). Legacy rendering category; prefer template. "alert" has NO template equivalent and is the only way to start a stream time-sensitive (breaks through Focus). Fixed at stream creation.
- `live_status.message` (string). The card's live message line.
- `live_status.progress` (number). Progress bar / Dynamic Island gauge, 0..1.
- `live_status.steps` (array). Step labels. Required on the first ping of a steps stream; immutable afterwards.
- `live_status.current_step` (integer). Index into steps; the only mutable steps field.
- `live_status.metrics` (array). Up to 3 {label,value} counters for the metrics template.
- `live_status.deadline_at` (integer). Epoch seconds the countdown template counts down to.
- `live_status.eta_at` (integer). Epoch seconds; renders a live ETA on status/progress.
- `live_status.prompt` (string). The ask, for the question template.
- `live_status.options` (array). Up to 4 {value,label} choices for the question template.
- `live_status.left` (object). Left side {label,value} for the matchup template.
- `live_status.left.label` (string).
- `live_status.left.value` (string).
- `live_status.right` (object). Right side {label,value} for the matchup template.
- `live_status.right.label` (string).
- `live_status.right.value` (string).
- `live_status.center` (string). Center score/clock for the matchup template.
- `live_status.accent_override` (string). Hex #rrggbb; a semantic accent for one frame (e.g. deadline red).
- `title` (string) — ≤40 chars. Card title. Defaults to the selected quick action's label.
- `action` (integer) — 1–4. Quick-action slot to attribute the stream to (supplies the icon and sound).
- `data` (object). Arbitrary structured context (max 25 keys / 8KB), returned on read surfaces after connector privacy filtering. Do not put secrets in data.
- `requires_ack` (boolean). Add an Acknowledge button; the first eligible member to tap resolves it for everyone. Does not raise the interruption level — set category "alert" for a time-sensitive start.
- `ack_timeout_seconds` (integer) — 1–86400. Optional acknowledgement deadline in seconds.
## get_live_status [RI]
Read back the current state of a live stream you created, so a restarted producer can reconcile instead of starting a duplicate. Only returns streams started by this credential, within the last 24 hours. Returns notification_id and correlation_id, then the stored display state (state, progress, message, category, template, accent_override, eta_at, deadline_at, metrics, prompt, options, left, right, center, steps, current_step), action_state, and updated_at. Fields you never set come back as null rather than being omitted, so a matchup/metrics/countdown/question stream can be resumed without re-sending content.
- `invite_code` (string) **(required)**. Room invite code.
- `correlation_id` (string) **(required)** — ≤255 chars. The stream key used when the stream was started.
## list_room_icons [RI]
List the room-icon catalog (icon ids, tags, and categories) for interpreting icon values returned by room and quick-action reads.
(no arguments)
## list_notifications [RI]
List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true.
- `type` (string) — one of: `received`, `sent`. Narrow to pings you received or pings you sent. Omit for both.
- `date` (string). Only pings created on this calendar date, e.g. "2026-08-25".
- `limit` (integer) — 1–25. Pings per page. Defaults to 10; maximum 25.
- `page` (integer) — 1. Page number, newest first.
## get_notification [RI]
Fetch one visible ping by notification id, including its current action_state.
- `notification_id` (string) **(required)**. Room notification id.
## wait_for_notification [RI]
Long-poll for the next ping. Blocks until one arrives or the timeout elapses — the real-time inbound channel for an agent. The agent's own sends are excluded.
- `after` (string). Cursor from the previous call; omit to get the current head.
- `timeout` (integer) — 1–30. Seconds to hold the request open (server-capped).
## wait_for_ack [RI]
Long-poll a generic acknowledgement-required ping until an eligible recipient acknowledges it, it expires, or the timeout elapses. Questions use wait_for_answer instead.
- `notification_id` (string) **(required)**. Room notification id.
- `timeout` (integer) — 0–30. Seconds to hold the request open. Use 0 for an immediate authoritative state read.
## request_approval [D]
Ask the human to approve or reject an action, then block on their answer (pair with wait_for_approval). Delivered as a push to the user. Rate-limited.
- `invite_code` (string) **(required)**. Room invite code.
- `question` (string) **(required)** — ≤500 chars. What you want the human to decide on.
- `title` (string) — ≤40 chars. Optional short title for the request.
- `options` (array) — ≤4 items. Answers to choose between. Defaults to ["approve","deny"].
- `correlation_id` (string) — ≤255 chars. Your own id, echoed back unchanged on read.
- `data` (object). Arbitrary structured context, returned on reads after connector privacy filtering. Do not put secrets in data.
- `ttl` (integer) — 1. Seconds the request stays open before it expires.
## wait_for_approval [RI]
Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option.
- `approval_id` (string) **(required)**. Approval request id.
- `timeout` (integer) — 1–30. Seconds to hold the request open (server-capped).
## get_approval [RI]
Fetch the current status of an approval request without blocking.
- `approval_id` (string) **(required)**. Approval request id.
## ask_question [D]
Ask a person a question with 2-4 tappable options, then block on their answer (pair with wait_for_answer). Delivered as a push they can answer from the lock screen or in-app; the first valid answer wins. Rate-limited.
- `invite_code` (string) **(required)**. Room invite code.
- `prompt` (string) **(required)** — ≤500 chars. The question the person reads.
- `context` (string) — ≤40 chars. Optional secondary line, e.g. a build number.
- `options` (array) — ≤4 items. Answer options in display order. Omit for a default Approve/Deny.
- `text_input` (object). Invite a typed answer (on its own, or alongside options). max_length is capped at 60.
- `text_input.placeholder` (string). Hint shown in the reply field.
- `text_input.max_length` (integer). Max characters (default 60).
- `correlation_id` (string) — ≤255 chars. Your own id, echoed back unchanged on read.
- `reply_to` (string) — ≤255 chars. Optional routing pointer, echoed back unchanged.
- `data` (object). Arbitrary structured context (max 25 keys / 8KB). Read surfaces return it after connector privacy filtering; do not put secrets in data. data.location is reserved for a shareable location.
- `data.location` (object). A shareable geographic location.
- `data.location.latitude` (number). Latitude in decimal degrees.
- `data.location.longitude` (number). Longitude in decimal degrees.
- `data.location.label` (string). Optional place name shown to the recipient.
- `data.location.address` (string). Optional formatted street address.
- `ttl` (integer) — 1. Seconds the question stays open before it expires.
- `attachment_ids` (array) — ≤4 items. Ids of up to 4 uploaded attachments (see upload_attachment) to include. Uploading requires a Pro account.
## wait_for_answer [RI]
Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder.
- `question_id` (string) **(required)**. Question id.
- `timeout` (integer) — 1–30. Seconds to hold the request open (server-capped).
## get_question [RI]
Fetch the current state of a question without blocking.
- `question_id` (string) **(required)**. Question id.
## list_questions [RI]
List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true.
- `state` (string) — one of: `pending`, `answered`, `expired`, `cancelled`, `all`. Filter by state. Omit for all.
- `limit` (integer) — 1–25. Questions per page. Defaults to 10; maximum 25.
- `page` (integer) — 1. Page number, newest first.
## cancel_question [DI]
Withdraw a still-pending question you asked.
- `question_id` (string) **(required)**. Question id.
## activate_agent_inbox [D]
Start or resume the onboarding Question in the private room the human chose during authorization. Read question.id, then call wait_for_handoff only while state is pending and within a bounded local deadline. Success is answered with activation_completed true. Any other terminal result is incomplete: stop polling that attempt, then call activate_agent_inbox again for one numbered retry. The stamp requires native phone receipt before the human answer.
(no arguments)
## create_handoff [D]
Hand work to exactly one human as either an acknowledgement or a tappable question. The server verifies that one of the recipient's current devices supports the complete Handoff action before creating anything.
- `kind` (string) **(required)** — one of: `ack`, `question`. ack asks the human to acknowledge; question asks them to choose an option.
- `prompt` (string) **(required)** — ≤500 chars. The work/request shown to the human.
- `audience` (object) **(required)**.
- `audience.type` (string) **(required)**.
- `audience.user_id` (string) **(required)**. The authorizing human, expressed as the literal value "me".
- `expires_in` (integer). Seconds before the handoff expires; the server clamps this to its safe range.
- `urgency` (string) — one of: `active`, `passive`. Notification interruption level. Defaults to active.
- `options` (array) — ≤4 items. Required for question and forbidden for ack. Each item may be a label string or a structured option.
- `data` (object). Structured context returned on read surfaces after connector privacy filtering. Do not put secrets in data.
- `correlation_id` (string) — ≤255 chars. Your own stable correlation id.
- `reply_to` (string) — ≤255 chars. Optional routing pointer.
- `idempotency_key` (string) — ≤255 chars. Stable key for at-most-once creation across both Ack and Question kinds.
## wait_for_handoff [–]
Long-poll a Handoff until the human resolves it, it expires, or the bounded timeout elapses. For the onboarding Question returned by activate_agent_inbox, success requires an answered result with activation_completed true; use a bounded local deadline and treat any terminal answer without that stamp as incomplete.
- `handoff_id` (string) **(required)**. Handoff id.
- `timeout` (integer) — 0–25. Seconds to hold the request open; use 0 for an immediate state read.
## get_handoff [RI]
Fetch the authoritative current state of one Handoff without blocking.
- `handoff_id` (string) **(required)**. Handoff id.
## list_handoffs [RI]
List a bounded page of this agent's Handoffs, newest first. Omit state (or use open) for unresolved work; use all for history and page while has_more is true.
- `state` (string) — one of: `open`, `all`. Filter to open Handoffs or include all states.
- `limit` (integer) — 1–25. Handoffs per page. Defaults to 10; maximum 25.
- `page` (integer) — 1. Page number, newest first.
## upload_attachment [–]
Upload a small file (max ~90 KiB over MCP; Pro account required) and get an attachment id to include in broadcast or ask_question via attachment_ids. Larger files: use the PingRoom CLI or agent REST API.
- `filename` (string) **(required)** — ≤255 chars. File name including extension, e.g. report.md.
- `content_base64` (string) **(required)** — ≤124000 chars. Base64-encoded file bytes (standard alphabet, padding optional).
- `mime_type` (string) — ≤100 chars. Optional MIME type, e.g. text/markdown. Defaults from the filename extension.
## get_attachment [RI]
Fetch an attachment visible to this agent as base64 content plus metadata. Results over the connector size limit return attachment_too_large — fetch those via the agent REST API instead.
- `attachment_id` (string) **(required)**. Attachment id returned by upload_attachment.
## delete_attachment [DI]
Delete an attachment this agent uploaded that is not yet claimed by a ping.
- `attachment_id` (string) **(required)**. Attachment id returned by upload_attachment.
SHA-256: b15ea40210b118a606ebf9bfd44619ae96ba40ae81d6e8ced92cf46fe651c791