{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_wwe7wuy8pa7x","handle":"pingroom","url":"https://wellknown.network/agents/pingroom","links":{"self":"https://wellknown.network/agents/pingroom/record.json","html":"https://wellknown.network/agents/pingroom","markdown":"https://wellknown.network/agents/pingroom/record.md","api":"https://wellknown.network/api/v1/agents/pingroom","status":"https://wellknown.network/api/v1/agents/pingroom/status","claim":"https://wellknown.network/agents/pingroom/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/pingroom/claim.json","badge":"https://wellknown.network/agents/pingroom/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/pingroom/history","tools":"https://wellknown.network/api/v1/agents/pingroom/tools"},"ard":{"identifier":"urn:air:api.pingroom.io:server:pingroom","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"PingRoom","summary":"Send mobile pings and route human questions, approvals, and handoffs from AI agents.","description":"Send mobile pings and route human questions, approvals, and handoffs from AI agents.","publisher":{"name":"io.pingroom","url":null},"homepage":"https://pingroom.io/developers","repository":null,"version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://api.pingroom.io/api/agent/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-01T09:23:36.925113Z","publishedAt":"2026-09-01T09:23:36.925113Z","registryName":"io.pingroom/pingroom"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"communication.notifications","name":"Notifications","confidence":1,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.583,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":0.569,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.51,"provenance":"derived"},{"slug":"communication.chat","name":"Team Chat","confidence":0.51,"provenance":"derived"},{"slug":"automation.workflows","name":"Workflow Automation","confidence":0.51,"provenance":"derived"}],"categories":["automation","commerce","communication","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 2h ago.","lastOkAt":"2026-10-10T03:25:18.261Z","lastProbedAt":"2026-10-10T03:25:18.261Z","statusComputedAt":"2026-10-10T03:27:16.823Z","reliability30d":{"probes":108,"successRate":1,"p50Ms":135,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":108,"ok":108,"authBoundaryOk":0,"serviceOk":108,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T03:25:18.261Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":95,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":41,"toolsHash":"4b57c7aea180eaf322d6126505953826658c01171706bf71b05263df6b78203b","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T20:29:21.369Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":88,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":41,"toolsHash":"4b57c7aea180eaf322d6126505953826658c01171706bf71b05263df6b78203b","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T13:30:38.643Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":111,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":41,"toolsHash":"4b57c7aea180eaf322d6126505953826658c01171706bf71b05263df6b78203b","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T06:22:49.832Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":98,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":41,"toolsHash":"4b57c7aea180eaf322d6126505953826658c01171706bf71b05263df6b78203b","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T00:24:37.424Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":95,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":41,"toolsHash":"4b57c7aea180eaf322d6126505953826658c01171706bf71b05263df6b78203b","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T17:26:28.370Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":292,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":41,"toolsHash":"4b57c7aea180eaf322d6126505953826658c01171706bf71b05263df6b78203b","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T10:24:28.145Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":112,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"redeem_code","description":"Redeem a gifted Pro or promo code for the human account that connected this agent. Consumes a single-use code and grants Pro; no room or paid plan is required. "},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":42,"toolsHash":"60be890ba767d989f263651ee0850db9bba22b6d3b238553adfd420bfa5e8fdf","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T04:25:34.129Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":105,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"redeem_code","description":"Redeem a gifted Pro or promo code for the human account that connected this agent. Consumes a single-use code and grants Pro; no room or paid plan is required. "},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":42,"toolsHash":"60be890ba767d989f263651ee0850db9bba22b6d3b238553adfd420bfa5e8fdf","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T21:27:45.682Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":86,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"redeem_code","description":"Redeem a gifted Pro or promo code for the human account that connected this agent. Consumes a single-use code and grants Pro; no room or paid plan is required. "},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":42,"toolsHash":"60be890ba767d989f263651ee0850db9bba22b6d3b238553adfd420bfa5e8fdf","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T14:29:56.162Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":133,"error":null,"detail":{"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"redeem_code","description":"Redeem a gifted Pro or promo code for the human account that connected this agent. Consumes a single-use code and grants Pro; no room or paid plan is required. "},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"toolCount":42,"toolsHash":"60be890ba767d989f263651ee0850db9bba22b6d3b238553adfd420bfa5e8fdf","serverName":"PingRoom","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"connection_info","description":"Verify the current connection: owner.id is the human public User ID, handle identifies the robot, and home_room is its delivery room. After login or reconnect, "},{"name":"disconnect","description":"Revoke this authenticated robot connection, including its access and refresh credentials and room memberships. Use only when the human explicitly requests logou"},{"name":"list_rooms","description":"List the rooms the authenticated account belongs to."},{"name":"list_quick_actions","description":"List the quick actions configured for a room."},{"name":"trigger_quick_action","description":"Press a room quick action, notifying its members. Rate-limited. Read the action's input_type first (list_quick_actions): location needs data.location, link need"},{"name":"broadcast","description":"Send a custom ping to a room the account belongs to. Rate-limited. Not available in personal rooms (use trigger_quick_action there)."},{"name":"live_status","description":"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 ever"},{"name":"get_live_status","description":"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"},{"name":"list_room_icons","description":"List the room-icon catalog (icon ids, tags, and categories). Call this before create_room / create_public_room / create_webhook to pick a valid icon id, and to "},{"name":"list_notifications","description":"List a bounded page of recent pings across approved rooms, newest first. Use page to continue while has_more is true."},{"name":"get_notification","description":"Fetch one visible ping by notification id, including its current action_state."},{"name":"wait_for_notification","description":"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."},{"name":"wait_for_ack","description":"Long-poll a generic acknowledgement-required ping until its confirmation rule is met (any: first confirmation; all: every original eligible recipient), it expir"},{"name":"request_approval","description":"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 connected human only, so like"},{"name":"wait_for_approval","description":"Long-poll an approval request until the human decides or it expires. Returns the status and, once decided, the chosen option."},{"name":"get_approval","description":"Fetch the current status of an approval request without blocking."},{"name":"ask_question","description":"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 scr"},{"name":"wait_for_answer","description":"Long-poll a question until it is answered or expires. Returns the state and, once answered, the chosen option value + label and the responder."},{"name":"get_question","description":"Fetch the current state of a question without blocking."},{"name":"list_questions","description":"List a bounded page of questions you asked, newest first. Optionally filter by state; use page while has_more is true."},{"name":"cancel_question","description":"Withdraw a still-pending question you asked."},{"name":"activate_agent_inbox","description":"Start or resume the onboarding Question in the private room the human chose during authorization. If recipient_not_ready, ask the human to install or update Pin"},{"name":"create_handoff","description":"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"},{"name":"wait_for_handoff","description":"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, succe"},{"name":"get_handoff","description":"Fetch the authoritative current state of one Handoff without blocking."},{"name":"list_handoffs","description":"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."},{"name":"upload_attachment","description":"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 fil"},{"name":"get_attachment","description":"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 t"},{"name":"delete_attachment","description":"Delete an attachment this agent uploaded that is not yet claimed by a ping."},{"name":"get_room","description":"Fetch a single room by its invite code, including members and quick actions."},{"name":"create_room","description":"Create a new private room owned by the authenticated account. Free accounts may own up to five rooms. If this agent was granted every room and has no delivery r"},{"name":"create_public_room","description":"Create a publicly discoverable room with a unique @handle. Counts toward the free-plan five-room cap."},{"name":"join_room","description":"Join a room using its invite code. Include the password only if the room is protected."},{"name":"list_webhooks","description":"List the incoming webhooks (with their trigger URLs) for a room the account owns."},{"name":"create_webhook","description":"Create an incoming webhook for a room the account owns. The bound account must be Pro. Returns the secret trigger URL — treat it as a credential."},{"name":"update_webhook","description":"Update an incoming webhook (by id) on a room the account owns — e.g. change its icon, title, message, or sound."},{"name":"delete_webhook","description":"Delete an incoming webhook (by id) from a room the account owns."},{"name":"update_quick_action","description":"Configure a numbered quick-action slot for a room the account owns. Sends a background room refresh to room members' devices."},{"name":"update_quick_actions","description":"Configure several of a room's quick-action slots in one call. Prefer this over repeated update_quick_action: each single-slot write wakes room members' devices "},{"name":"set_avatar","description":"Set this agent's avatar. Must be one of the PingRoom bot avatars."},{"name":"rotate_handle","description":"Rotate this agent's public handle — kill-switch for a leaked handle."}],"package":null,"toolSurface":{"id":"ts_j23gzk828fd9","endpointId":"ep_nwuvjwtvmenf","hash":"4b57c7aea180eaf322d6126505953826658c01171706bf71b05263df6b78203b","toolCount":41,"serverName":"PingRoom","serverVersion":"0.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-08T17:26:28.373Z","lastSeenAt":"2026-10-10T03:25:18.254Z","observations":6,"toolNames":["connection_info","disconnect","list_rooms","list_quick_actions","trigger_quick_action","broadcast","live_status","get_live_status","list_room_icons","list_notifications","get_notification","wait_for_notification","wait_for_ack","request_approval","wait_for_approval","get_approval","ask_question","wait_for_answer","get_question","list_questions","cancel_question","activate_agent_inbox","create_handoff","wait_for_handoff","get_handoff","list_handoffs","upload_attachment","get_attachment","delete_attachment","get_room","create_room","create_public_room","join_room","list_webhooks","create_webhook","update_webhook","delete_webhook","update_quick_action","update_quick_actions","set_avatar","rotate_handle"],"distinctSurfaces":10},"endpointFacts":[{"id":"ep_nwuvjwtvmenf","url":"https://api.pingroom.io/api/agent/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-09T20:29:21.397Z","auth":{"observedAt":"2026-10-09T20:29:21.516Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://api.pingroom.io/.well-known/oauth-protected-resource/api/agent/mcp","resource":"https://api.pingroom.io/api/agent/mcp","authorizationServers":["https://api.pingroom.io"],"scopesSupported":["pingroom:full"]},"authorizationServer":{"url":"https://api.pingroom.io/.well-known/oauth-authorization-server","issuer":"https://api.pingroom.io","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none","client_secret_post","client_secret_basic"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":null},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":false,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-09T20:29:21.545Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"pingroom.io","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-08-24T09:17:53.000Z","validTo":"2026-11-22T10:17:45.000Z","daysToExpiry":43,"sanCount":2,"fingerprint256":"EE:8E:DD:C2:47:FF:AC:58:1F:AD:5B:75:93:4E:6D:9D:AD:64:19:6A:5A:4C:6F:AD:E1:F4:33:4E:CE:CE:FA:72"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.pingroom/pingroom","url":"https://registry.modelcontextprotocol.io/v0/servers/io.pingroom%2Fpingroom","firstSeenAt":"2026-09-07T07:22:29.988Z","fetchedAt":"2026-10-08T17:21:40.001Z","normalizedAt":"2026-10-08T17:21:40.001Z"}]},"firstSeenAt":"2026-09-07T07:22:29.988Z","updatedAt":"2026-10-10T03:28:02.950Z"}