wait_for_request
Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.
ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"id": "<id>"
},
"name": "wait_for_request"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Verification request ID to poll | |
| timeout_seconds | No | Maximum wait time in seconds (default: 50, max: 300). Keep it under your MCP client's request timeout (the SDK default is 60 s) — a longer wait is cut off by the client while the server is still polling. On timeout the tool answers status "pending"; call it again with the same identifier. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | MongoDB ObjectId | |
| assets | No | ||
| status | No | "pending" when the wait ran out before a terminal state; otherwise the resource's own status | |
| message | No | On timeout: what to do next (call the tool again with the same identifier) | |
| outcome | No | `relying_party` when the request was created to wait for your outcome; null otherwise. Absent from an API that predates the field. | |
| progress | No | ||
| created_at | No | ||
| expires_at | No | ||
| partial_ok | No | ||
| updated_at | No | ||
| action_type | No | Type of action for verification request or authorization | |
| last_status | No | On timeout: the last non-terminal status observed, or null when none was | |
| callback_url | No | The webhook URL set on the request, if any | |
| completed_at | No | ||
| redirect_url | No | ||
| reference_id | No | ||
| action_context | No | The action the person is asked to authorize; null when the request carries none | |
| computed_state | No | Additive machine-readable effective state: re-derives expiry from expires_at (never trusts the stored status). BOTH `is_expiring_soon` and `next_action` are role-aware — `next_action.role` says which side this envelope was computed for, and the two fields are consistent within it. Present only on authenticated owner/requester and recipient responses; absent on public/third-party surfaces. | |
| waited_seconds | No | On timeout: seconds actually waited | |
| timeout_seconds | No | On timeout: the wait budget this call was given | |
| verification_url | No | URL for the verification flow | |
| validity_requirement | No | Required proof freshness as set on the request (e.g. "7d"); null when none was set | |
| outcome_timeout_seconds | No | The window set on the request, in seconds; null when it does not wait for an outcome. Absent from an API that predates the field. |