Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "create_user_request", "create_verification_request", "get_api_key_usage" and 1 more
⟨5 unchanged words⟩ to ask another user to share verified assets. Each asset is an object naming its type, e.g. { "type": "email" }. ACCESS: needs a Proof account. Authenticate this ⟨23 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"action_context":{"additionalProperties":false,"description":"AdditionalWhatcontextthe recipient is shown about why the assets are needed, e.g. { \"title\": \"Confirm your contact details\" }","properties":{"amount":{"exclusiveMinimum":0,"type":"number"},"currency":{"maxLength":10,"minLength":1,"type":"string"},"description":{"maxLength":500,"minLength":1,"type":"string"},"entity":{"maxLength":200,"minLength":1,"type":"string"},"title":{"maxLength":100,"minLength":1,"type":"string"}},"type":"object"},"action_type":{"description":"Purpose of the request (default: verification); custom and confirmation also need an action_context title","enum":["verification","onboarding2fa","compliancelogin","custom","confirmation","authorization"],"type":"string"},"assets":{"description":"AssetAssets to request, e.g. [{ \"type\": \"email\" }, { \"type\": \"phone\", \"required\": false }]","items":{"additionalProperties":false,"properties":{"allowed_channels":{"description":"Channels the recipient may choose from","items":{"enum":["whatsapp","telegram","sms","email","dns","http","auto","github","google","facebook","x","linkedin","instagram","youtube","tiktok","ethereum","solana","bitcoin","coinbase","kraken","telegram_bot_token"],"
⟨187 unchanged words⟩ description":"Request expiry in seconds (default:86400604800, i.e. 7 days; max:6048002592000, i.e. 30 days)","exclusiveMinimum":0,"type":"integer" ⟨61 unchanged words⟩
⟨15 unchanged words⟩ , and attribution context (attribution_cutoff_at, attributed_fraction). The counts cover the key and every key it replaced (api_key.replaced_key_ids). Counts only — no recipient identifiers. Scoped to ⟨42 unchanged words⟩
Regenerate an API key,:issuingissues a newsecretkeywhile(akeepingnew id and secret) with the sameIDname, environment, scopes andsettings.project. The old key stops workingimmediately.immediately; use the id in this response from now on. The new key lists the old one in replaced_key_ids, so its requests and usage stay with it. The new secret is returned ONLY in this ⟨77 unchanged words⟩
Authorization not required, issuer https://api.proof.holdings
Authorization not required, issuer https://api.proof.holdings
Changed the definition of "create_account", "create_chat_id_discovery", "create_circle" and 22 more
⟨172 unchanged words⟩ On telegram/whatsapp pass `deep_link` to render_auth_link, whichprintsreturns the clickable linkandwith a QR code beneathit.it to you. On sms `deep_link` is an EMPTY STRING and ⟨52 unchanged words⟩ a real terminal needs the QR. (3)CallOnce your reply shows the user the challenge, call wait_for_account_creation with the session id until verification completes. ⟨11 unchanged words⟩ whatever follow-up the agent was asked to do. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox.
Authorization not required, issuer https://api.proof.holdings
Authorization not required, issuer https://api.proof.holdings
Changed the definition of "list_circle_members"
List a Circle's members. Each member carries channel-presence booleansonly(has_telegram / has_whatsapp) and the masked phone they enrolled from (enrolled_phone_hint, e.g. +9••••••4171) —ana full identifier is NEVER returned (SEC-PM-006). ACCESS: ⟨23 unchanged words⟩
Removed "add_challenger", "invite_challenger", "list_challengers" and 2 more; changed the definition of "add_circle_member", "add_circle_member_channel", "add_domain" and 168 more (176 tools before, 171 now)
before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}Authorization not required, issuer https://api.proof.holdings
Authorization not required, issuer https://api.proof.holdings
Authorization not required, issuer https://api.proof.holdings
Authorization not required, issuer https://api.proof.holdings
Authorization not required, issuer https://api.proof.holdings
Unavailable → Live
Certificate recorded, valid to 2026-12-03
Authorization not required, issuer https://api.proof.holdings
First tool surface recorded: 176 tools (server version 1.1.0)
Showing the latest 17 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨104 unchanged words⟩ creating a HITL config with a Telegram channel. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨83 unchanged words⟩ "minLength":1,"type":"string"},"owner_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"description":"How this Circle's members know its owner (\"Dad\", \"Giorgi\"). The bots name the owner by it; while it is empty they name nobody — the Circle's name labels the group, never the person. Trimmed by the API; null or an empty value clears it."},"profile_id":{"description":"Public profile (sub-account) ⟨28 unchanged words⟩
⟨125 unchanged words⟩ retrieve the proof token when a channel verifies. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨92 unchanged words⟩ state (verified, failed, or expired). The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨163 unchanged words⟩ the user clicks the deep link to verify. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨47 unchanged words⟩ the user has not yet entered their code. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw. ACCESS: needs a Proof account. Authenticate this client ⟨22 unchanged words⟩
⟨7 unchanged words⟩ addition by session ID. Poll until terminal state. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw. ACCESS: needs a Proof account. Authenticate this client ⟨22 unchanged words⟩
Get the encryption keypair for a HITL config.ReturnsWith `hitl:read` it returns the public key, encrypted private key, KDF salt, and key ID (kid). A key holding `confirmations:create` without `hitl:read` receives only `public_key` and `kid` — what a confirmation message is sealed to, never the private-key material. ACCESS: needs a Proof account. Authenticate this ⟨17 unchanged words⟩
⟨27 unchanged words⟩ (with expires_at) when the group is verified. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨11 unchanged words⟩ status, channel, and proof token if verified. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨8 unchanged words⟩ Returns a signed list of all revoked proofIDs,IDs.cacheableReuse a fetched list for up to 5minutes.minutes (its cache lifetime), then fetch it again to see new revocations; if you cannot, its signature stays verifiable offline for 1 hour.
⟨15 unchanged words⟩ username once the user interacts with the bot. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨25 unchanged words⟩ computation tool — no HTTP request is made. Its output comes back to you, not to the user: copy the link, and the QR block inside its fence, into your reply. Agent usage: pass a LINK field from ⟨6 unchanged words⟩ , create_chat_id_discovery always; start_login, create_account, start_2fa, start_2fa_for_action, start_add_phone on telegram/whatsapp ONLY, where on sms and email ⟨75 unchanged words⟩ blank line or wrapped row destroys the code. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox.
⟨233 unchanged words⟩ a code — the backend handles this automatically. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this client ⟨22 unchanged words⟩
⟨247 unchanged words⟩ verified. (5) Retry the original sensitive call. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
Start adding a new phonenumber.numberUsesby reverse OTP: thesystemusersendsstartsathemessageexchange themselves and nothing is sent before they do; theuserresponse'sreplies.`instructions` field says what they do (on telegram the bot then asks them to tap a button that shares their number). Returns a sessionID,ID; on telegram/whatsapp also deep_link, qr_code (base64 PNG),and qr_text (UTF-8 text QR), and on sms sms_message and sms_dids (one entry per region; a region with no number configured has an empty `did`) with no deep_link. Agent usage: on telegram/whatsapp pass `deep_link` to render_auth_link forterminalthedisplaylink and a QR code. On sms there is no deep_link — show `sms_message` and a number from an `sms_dids` entry whose `did` is non-empty. Never hand a `qr_text` to a link renderer — it is a link already rendered as QR art. Then poll get_add_phone_status with the session ID. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it)., the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this ⟨23 unchanged words⟩
⟨86 unchanged words⟩ On telegram/whatsapp pass `deep_link` to render_auth_link, whichprintsreturns the clickable link and a QRcode;code to you; in a chat client the link is what ⟨187 unchanged words⟩ a blank line lands between them. (3)CallOnce your reply shows the user the challenge, call wait_for_login with the returned session ID to poll ⟨8 unchanged words⟩ (login succeeded), "failed", "expired". The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox.
Update a Circle'sname.nameOnlyand/ortheownerdisplayname.nameOmittedisfieldsmutableare—left unchanged; the profile/identity binding is create-only. ACCESS: needs ⟨22 unchanged words⟩
⟨25 unchanged words⟩ 200,"minLength":1,"type":"string"},"owner_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"description":"How this Circle's members know its owner (\"Dad\", \"Giorgi\"). The bots name the owner by it; while it is empty they name nobody — the Circle's name labels the group, never the person. Trimmed by the API; null or an empty value clears it."}},"required":["id"],"type":"object"}
⟨59 unchanged words⟩ telegram/whatsapp, or show its `sms_message` on sms. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨85 unchanged words⟩ new User or logged in an existing one. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw.
⟨66 unchanged words⟩ user has not yet opened the Telegram link. The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨87 unchanged words⟩ call this tool again with the same id. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw.
⟨18 unchanged words⟩ initial, 1.5x, 30s max) with jitter. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
⟨47 unchanged words⟩ so the wait returns rather than polling on. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appeared only in a tool result is one they never saw. ACCESS: needs a Proof account. Authenticate this client ⟨16 unchanged words⟩
before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}Create a Proof-Me cross-channel identity challenge (CONFIRM) for an enrolledchallenger.Circle member. The account holder approves/denies on a channel different from the one the suspicious contact reached thechallengermember on. Agent usage: poll get_identity_challenge with the returned ID until itreaches a terminalleavesstatepending (active =confirmed, denied, cancelled, failed, expired or revoked). ACCESS: needs a Proof account. Authenticate ⟨18 unchanged words⟩
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"challenger_idcircle_id":{"description":"EnrolledCirclechallengerthatinitiatingholds thecheckmember","pattern":"^[0-9a-fA-F]{24}$","type":"string"},"hitl_idmember_id":{"description":"HITLEnrolledconfigCirclethatmemberholdsinitiating thechallengercheck","pattern":"^[0-9a-fA-F]{24}$" ⟨3 unchanged words⟩ description":"Channel the suspicious contact reached thechallengermember on; defaults to thechallengermember channel","enum":["telegram","whatsapp"],"type":"string"}},"required":["hitl_idcircle_id","challenger_idmember_id"],"type":"object"}
before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":false,"readOnlyHint":false}Get thecurrent authenticated user.signed-inReturnsuser's account details, plan,andsettingssettings.forNeedsthea login session: call start_login, then wait_for_login until it reports success. An API keyowner.alone cannot read this — for the key's own account use get_self_api_key or get_settings. ACCESS: needs a Proof account. Authenticate this ⟨23 unchanged words⟩
before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}Get a Proof-Me identity challenge by ID. Returns its status (pending, confirmed, denied, cancelled, failed, expired, revoked or suspended), the channel the CONFIRM ran on, and — once the person being checked decided — the proof tokenonceandconfirmed.its proof_id. Poll this for resolution. ACCESS: needs a ⟨21 unchanged words⟩
before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"destructiveHint":true,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"destructiveHint":false,"readOnlyHint":false}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}before
—after
{"readOnlyHint":true}Pre-enroll a Proof-Me challenger (a trusted contact) on a HITL config. Enabling the first challenger opts the config into Proof-Me. A telegram challenger captures its chat_id later at enrollment; a whatsapp challenger must pre-declare its phone. Agent usage: After adding a challenger, call invite_challenger to mint the single-use enrollment link the challenger taps to bind their messenger identity. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
Mint a single-use Proof-Me enrollment invite for a challenger. Returns Telegram + WhatsApp deep links and a QR code; the challenger taps the channel-matched link to bind their messenger identity to the config. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
List the Proof-Me challengers enrolled on a HITL config. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
Remove a Proof-Me challenger from a HITL config. Removing the last challenger disables Proof-Me on the config. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
Fire an on-demand Proof-Me drill against one enrolled challenger — a real cross-channel identity challenge carrying the scheduled-safety-check label. Complements the automated daily drill + monthly reinforcement sweeps. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.