verify_presentation
REQUESTER step 2: verify a presentation a counterparty produced against the challenge you issued — pass the SAME challenge_envelope you handed out (it carries audience, challenge, predicates, the addressed presenter and the deadline), or the legacy audience + challenge (+ predicates). Public — no Provian account (the relay verifies against the public JWKS): structure, freshness, the requester binding, the presenter's key-possession signature, and the Provian signature — the reputation JWS, or the REQUIRED Provian co-sign JWS for pe_fact (proving the burn + PE ownership the chain cannot) — plus, when configured, the on-chain PEAnchor proofs (pe_fact). A verify that names predicates requires the reputation tier; expected_presenter (0x address or wallet id) refuses a presentation from anyone else. Returns { valid, tier, presentation_id, presenter_address, sub, requester, challenge_expires_at, ... } — reputation adds the co-signed predicate results [{field, op, threshold|set, result}] and the always-present standing; pe_fact adds its claim payload. { valid: false, reason } on refusal. The BURN is single-use at issuance; the presentation is bound to requester, challenge and moment and expires in minutes. ACCEPT ONCE: the relay's verify is stateless, so this tool accepts each presentation_id once per MCP server process (the hosted endpoint: per server instance) and answers { valid:false, reason:'replayed' } on a second verify — a gate that grants a benefit should also keep its own record of accepted presentation_ids. accept_once:false turns this off.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "verify_presentation"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | The opaque presentation token the presenter returned (base64url). | |
| audience | No | Legacy: the EXACT audience you issued. | |
| challenge | No | Legacy: the EXACT challenge you issued. | |
| predicates | No | Legacy: the EXACT predicates you issued (each must be answered; reputation tier only). | |
| accept_once | No | Default true: a second verify of the same presentation_id in this process answers replayed. | |
| disclosures | No | Legacy: the EXACT disclosure requests you issued (each must be answered — disclosed or declined; reputation tier only). The result carries `disclosures`: each answer with its election and its relay-checked records. | |
| presentation | No | Alternatively, the structured presentation object. | |
| challenge_envelope | No | The EXACT challenge envelope you issued with present_challenge (object or JSON string). Preferred: it carries every expectation. | |
| expected_presenter | No | Optional: the presenter you expect (0x address or wallet id). Derived from a challenge_envelope that names a presenter. |