@reclaimprotocol/agent 0.1.1-dev.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +1 -1
  2. package/lib/cdp/capture-engine.d.ts +66 -0
  3. package/lib/cdp/capture-engine.js +153 -0
  4. package/lib/cdp/capture.d.ts +9 -20
  5. package/lib/cdp/capture.js +14 -138
  6. package/lib/cdp/index.d.ts +3 -0
  7. package/lib/cdp/index.js +6 -0
  8. package/lib/config/store.d.ts +7 -6
  9. package/lib/config/store.js +2 -2
  10. package/lib/index.d.ts +2 -2
  11. package/lib/index.js +1 -1
  12. package/lib/mcp/api/operations.gen.d.ts +101 -45
  13. package/lib/mcp/api/operations.gen.js +996 -126
  14. package/lib/mcp/api/to-zod.d.ts +24 -0
  15. package/lib/mcp/api/to-zod.js +94 -0
  16. package/lib/mcp/api/tools.js +1 -1
  17. package/lib/mcp/credentials/authenticate.d.ts +3 -0
  18. package/lib/mcp/{tools/credentials → credentials}/authenticate.js +3 -3
  19. package/lib/mcp/credentials/build.d.ts +5 -0
  20. package/lib/mcp/credentials/build.js +18 -0
  21. package/lib/mcp/{tools/credentials → credentials}/cache.d.ts +9 -9
  22. package/lib/mcp/{tools/credentials → credentials}/cache.js +36 -19
  23. package/lib/mcp/credentials/import.d.ts +2 -0
  24. package/lib/mcp/{tools/credentials → credentials}/import.js +2 -2
  25. package/lib/mcp/credentials/issue.d.ts +2 -0
  26. package/lib/mcp/{tools/credentials → credentials}/issue.js +4 -4
  27. package/lib/mcp/credentials/keypair.d.ts +17 -0
  28. package/lib/mcp/credentials/keypair.js +48 -0
  29. package/lib/mcp/credentials/link.d.ts +3 -0
  30. package/lib/mcp/credentials/link.js +107 -0
  31. package/lib/mcp/{tools/credentials → credentials}/list-cached.d.ts +1 -1
  32. package/lib/mcp/{tools/credentials → credentials}/list-cached.js +5 -5
  33. package/lib/mcp/credentials/owner-key.d.ts +23 -0
  34. package/lib/mcp/credentials/owner-key.js +58 -0
  35. package/lib/mcp/credentials/paths.d.ts +12 -0
  36. package/lib/mcp/credentials/paths.js +35 -0
  37. package/lib/mcp/credentials/poll.d.ts +27 -0
  38. package/lib/mcp/credentials/poll.js +61 -0
  39. package/lib/mcp/{tools/credentials → credentials}/resolve-owner-key.d.ts +1 -1
  40. package/lib/mcp/{tools/credentials → credentials}/resolve-owner-key.js +2 -2
  41. package/lib/mcp/credentials/session-cache.d.ts +14 -0
  42. package/lib/mcp/credentials/session-cache.js +42 -0
  43. package/lib/mcp/{tools/credentials → credentials}/status.d.ts +1 -1
  44. package/lib/mcp/credentials/status.js +76 -0
  45. package/lib/mcp/instructions.d.ts +1 -0
  46. package/lib/mcp/instructions.js +11 -0
  47. package/lib/mcp/register.d.ts +38 -0
  48. package/lib/mcp/register.js +80 -0
  49. package/lib/mcp/server.d.ts +2 -2
  50. package/lib/mcp/server.js +3 -3
  51. package/lib/mcp/start.js +10 -4
  52. package/lib/mcp/tools/agent/build.js +2 -15
  53. package/lib/mcp/tools/agent/index.d.ts +2 -0
  54. package/lib/mcp/tools/agent/index.js +3 -0
  55. package/lib/mcp/tools/agent/proof.js +1 -6
  56. package/lib/mcp/tools/agent/propose.js +13 -2
  57. package/lib/mcp/tools/agent/publish.js +10 -2
  58. package/lib/mcp/tools/agent/replay.js +0 -5
  59. package/lib/mcp/tools/analyze.d.ts +3 -0
  60. package/lib/mcp/tools/analyze.js +26 -0
  61. package/lib/mcp/tools/attach.d.ts +11 -0
  62. package/lib/mcp/tools/attach.js +72 -0
  63. package/lib/mcp/tools/authenticate/authenticate.js +107 -0
  64. package/lib/mcp/tools/authenticate/build.d.ts +15 -0
  65. package/lib/mcp/tools/authenticate/build.js +28 -0
  66. package/lib/mcp/tools/authenticate/decrypt-key.d.ts +32 -0
  67. package/lib/mcp/tools/authenticate/decrypt-key.js +49 -0
  68. package/lib/mcp/tools/authenticate/eth-key.d.ts +38 -0
  69. package/lib/mcp/tools/authenticate/eth-key.js +130 -0
  70. package/lib/mcp/tools/authenticate/import.js +57 -0
  71. package/lib/mcp/tools/authenticate/index.d.ts +2 -0
  72. package/lib/mcp/tools/authenticate/index.js +4 -0
  73. package/lib/mcp/tools/authenticate/issue.js +42 -0
  74. package/lib/mcp/tools/authenticate/resolve-owner-key.d.ts +13 -0
  75. package/lib/mcp/tools/authenticate/resolve-owner-key.js +53 -0
  76. package/lib/mcp/tools/capture.d.ts +10 -0
  77. package/lib/mcp/tools/capture.js +142 -0
  78. package/lib/mcp/tools/eval.d.ts +5 -0
  79. package/lib/mcp/tools/eval.js +127 -0
  80. package/lib/mcp/tools/find.d.ts +3 -0
  81. package/lib/mcp/tools/find.js +60 -0
  82. package/lib/mcp/tools/index.d.ts +3 -0
  83. package/lib/mcp/tools/index.js +6 -0
  84. package/lib/mcp/tools/owner-key.d.ts +2 -0
  85. package/lib/mcp/tools/owner-key.js +63 -0
  86. package/lib/mcp/tools/proof.d.ts +3 -0
  87. package/lib/mcp/tools/proof.js +214 -0
  88. package/lib/mcp/tools/propose.d.ts +9 -0
  89. package/lib/mcp/tools/propose.js +75 -0
  90. package/lib/mcp/tools/publish.d.ts +3 -0
  91. package/lib/mcp/tools/publish.js +59 -0
  92. package/lib/mcp/tools/replay.d.ts +3 -0
  93. package/lib/mcp/tools/replay.js +46 -0
  94. package/lib/mcp/tools/session.d.ts +10 -0
  95. package/lib/mcp/tools/session.js +29 -0
  96. package/lib/mcp/tools/verification/build.d.ts +12 -0
  97. package/lib/mcp/tools/verification/build.js +14 -0
  98. package/lib/mcp/tools/verification/diagnose.d.ts +11 -0
  99. package/lib/mcp/tools/verification/diagnose.js +132 -0
  100. package/lib/mcp/tools/verification/index.d.ts +1 -0
  101. package/lib/mcp/tools/verification/index.js +2 -0
  102. package/lib/mcp/tools/verification/result.d.ts +12 -0
  103. package/lib/mcp/tools/verification/result.js +126 -0
  104. package/lib/mcp/verifications/build.d.ts +5 -0
  105. package/lib/mcp/verifications/build.js +14 -0
  106. package/lib/mcp/verifications/create.d.ts +3 -0
  107. package/lib/mcp/verifications/create.js +57 -0
  108. package/lib/mcp/verifications/find.d.ts +3 -0
  109. package/lib/mcp/verifications/find.js +37 -0
  110. package/lib/mcp/verifications/get.d.ts +3 -0
  111. package/lib/mcp/verifications/get.js +26 -0
  112. package/lib/mcp/verifications/update.d.ts +3 -0
  113. package/lib/mcp/verifications/update.js +78 -0
  114. package/lib/old/client.d.ts +3 -0
  115. package/lib/old/instructions.d.ts +0 -6
  116. package/lib/old/instructions.js +6 -24
  117. package/lib/old/to-register.d.ts +3 -0
  118. package/lib/old/to-register.js +35 -7
  119. package/lib/old/tools/publish.js +13 -1
  120. package/lib/proof/attestor.d.ts +33 -1
  121. package/lib/proof/attestor.js +65 -63
  122. package/lib/proof/index.d.ts +5 -0
  123. package/lib/proof/index.js +6 -0
  124. package/lib/proof/proof-core.d.ts +35 -0
  125. package/lib/proof/proof-core.js +73 -0
  126. package/lib/provider/index.d.ts +5 -0
  127. package/lib/provider/index.js +9 -0
  128. package/lib/provider/to-version.d.ts +9 -12
  129. package/lib/provider/to-version.js +38 -4
  130. package/lib/provider/verification-checks.d.ts +12 -0
  131. package/lib/provider/verification-checks.js +30 -0
  132. package/lib/routes.gen.d.ts +271 -0
  133. package/lib/routes.gen.js +73 -0
  134. package/lib/types/openapi.gen.d.ts +3967 -0
  135. package/lib/types/openapi.gen.js +5 -0
  136. package/package.json +16 -7
  137. package/skill/SKILL.md +35 -14
  138. package/skill/builder-mode.md +9 -0
  139. package/skill/old-mode.md +13 -0
  140. package/src/cdp/capture-engine.ts +256 -0
  141. package/src/cdp/capture.ts +25 -185
  142. package/src/cdp/index.ts +6 -0
  143. package/src/config/store.ts +7 -6
  144. package/src/index.ts +2 -4
  145. package/src/mcp/api/operations.gen.ts +1023 -121
  146. package/src/mcp/api/to-zod.ts +115 -0
  147. package/src/mcp/api/tools.ts +9 -3
  148. package/src/mcp/instructions.ts +15 -0
  149. package/src/mcp/server.ts +5 -4
  150. package/src/mcp/start.ts +14 -4
  151. package/src/mcp/tools/agent/build.ts +2 -18
  152. package/src/mcp/tools/agent/index.ts +4 -0
  153. package/src/mcp/tools/agent/proof.ts +1 -7
  154. package/src/mcp/tools/agent/propose.ts +13 -2
  155. package/src/mcp/tools/agent/publish.ts +10 -2
  156. package/src/mcp/tools/agent/replay.ts +0 -5
  157. package/src/mcp/tools/{credentials → authenticate}/authenticate.ts +9 -8
  158. package/src/mcp/tools/authenticate/build.ts +32 -0
  159. package/src/mcp/tools/authenticate/decrypt-key.ts +64 -0
  160. package/src/mcp/tools/authenticate/eth-key.ts +182 -0
  161. package/src/mcp/tools/authenticate/import.ts +73 -0
  162. package/src/mcp/tools/authenticate/index.ts +4 -0
  163. package/src/mcp/tools/authenticate/issue.ts +50 -0
  164. package/src/mcp/tools/authenticate/resolve-owner-key.ts +60 -0
  165. package/src/mcp/tools/index.ts +6 -0
  166. package/src/mcp/tools/verification/build.ts +16 -0
  167. package/src/mcp/tools/verification/index.ts +2 -0
  168. package/src/mcp/tools/verification/result.ts +155 -0
  169. package/src/old/client.ts +3 -0
  170. package/src/old/instructions.ts +10 -25
  171. package/src/old/to-register.ts +62 -27
  172. package/src/old/tools/publish.ts +17 -1
  173. package/src/proof/attestor.ts +112 -71
  174. package/src/proof/index.ts +21 -0
  175. package/src/proof/proof-core.ts +109 -0
  176. package/src/provider/index.ts +20 -0
  177. package/src/provider/to-version.ts +52 -11
  178. package/src/provider/verification-checks.ts +36 -0
  179. package/lib/mcp/tools/credentials/build.d.ts +0 -16
  180. package/lib/mcp/tools/credentials/build.js +0 -33
  181. package/lib/mcp/tools/credentials/status.js +0 -62
  182. package/src/mcp/tools/credentials/build.ts +0 -37
  183. package/src/mcp/tools/credentials/cache.ts +0 -161
  184. package/src/mcp/tools/credentials/env-file.ts +0 -101
  185. package/src/mcp/tools/credentials/import.ts +0 -72
  186. package/src/mcp/tools/credentials/issue.ts +0 -107
  187. package/src/mcp/tools/credentials/list-cached.ts +0 -66
  188. package/src/mcp/tools/credentials/register.ts +0 -49
  189. package/src/mcp/tools/credentials/resolve-owner-key.ts +0 -78
  190. package/src/mcp/tools/credentials/status.ts +0 -82
  191. package/src/types/openapi.ts +0 -7
  192. /package/lib/mcp/{tools/credentials → credentials}/env-file.d.ts +0 -0
  193. /package/lib/mcp/{tools/credentials → credentials}/env-file.js +0 -0
  194. /package/lib/mcp/{tools/credentials → credentials}/register.d.ts +0 -0
  195. /package/lib/mcp/{tools/credentials → credentials}/register.js +0 -0
  196. /package/lib/mcp/tools/{credentials → authenticate}/authenticate.d.ts +0 -0
  197. /package/lib/mcp/tools/{credentials → authenticate}/import.d.ts +0 -0
  198. /package/lib/mcp/tools/{credentials → authenticate}/issue.d.ts +0 -0
  199. /package/lib/mcp/tools/{credentials → authenticate}/session-cache.d.ts +0 -0
  200. /package/lib/mcp/tools/{credentials → authenticate}/session-cache.js +0 -0
  201. /package/src/mcp/tools/{credentials → authenticate}/session-cache.ts +0 -0
@@ -4,7 +4,7 @@
4
4
  // to regenerate. Do not edit by hand.
5
5
  // @ts-nocheck
6
6
 
7
- import { convertJsonSchemaToZod as toZod } from 'zod-from-json-schema'
7
+ import { toZod } from './to-zod.ts'
8
8
 
9
9
  export const MCP_TOOLS = {
10
10
  "AddOrgMember": {
@@ -172,6 +172,48 @@ export const MCP_TOOLS = {
172
172
  "additionalProperties": false
173
173
  }),
174
174
  },
175
+ "AdminSessions": {
176
+ description: "Explore verification sessions (admin-only)\n\nAdmin only. Search verification sessions across all organizations — paste a session id, provider id, or consumer ETH address into `q`, optionally filter by `status`. Rows link to the org-scoped session detail page (admins can open any org's pages). Capped at 100, newest first.",
177
+ inputSchema: toZod({
178
+ "type": "object",
179
+ "properties": {
180
+ "params": {
181
+ "type": "object",
182
+ "properties": {
183
+
184
+ }
185
+ },
186
+ "query": {
187
+ "type": "object",
188
+ "properties": {
189
+ "q": {
190
+ "type": "string",
191
+ "maxLength": 100
192
+ },
193
+ "status": {
194
+ "type": "string",
195
+ "description": "Status of a verification session, derived from its events. New values\nmay be added over time; clients MUST tolerate unknown values in\nresponses.\n\n- `pending`: Created, not yet finished; completable until `expiresAt`.\n\n- `success`: Terminal — `verification_success` recorded.\n\n- `rejected`: Terminal — `verification_rejected` recorded.\n\n- `error`: Terminal — `verification_error` recorded.\n\n- `expired`: `expiresAt` passed before a terminal event; the end-user\n can no longer complete it.",
196
+ "enum": [
197
+ "pending",
198
+ "success",
199
+ "rejected",
200
+ "error",
201
+ "expired"
202
+ ]
203
+ }
204
+ }
205
+ },
206
+ "body": {
207
+ "type": "object"
208
+ }
209
+ },
210
+ "required": [
211
+ "params",
212
+ "query"
213
+ ],
214
+ "additionalProperties": false
215
+ }),
216
+ },
175
217
  "CancelPublicListingRequest": {
176
218
  description: "Cancel a pending public listing review request\n\nCancels a pending public listing request by moving the version from `in_review` back to `draft`. Only org members can cancel their own review requests. This allows users to withdraw a request before admin review if they change their mind.",
177
219
  inputSchema: toZod({
@@ -251,6 +293,71 @@ export const MCP_TOOLS = {
251
293
  "additionalProperties": false
252
294
  }),
253
295
  },
296
+ "CreateCallbackSubscription": {
297
+ description: "Register a callback subscription\n\nRegisters a destination for verification results on the organization\nthe presented `OrgToken` resolves to. The body is just `callbackUrl`\nand `events`. At least one subscription must exist for the org before a\nverification session can be created. Delivery is scoped by org: terminal\nresults are encrypted as a compact JWE to the org's encryption\ncredential when set (see `PUT /orgs/{orgId}/credential`), else delivered\nas plaintext.\n",
298
+ inputSchema: toZod({
299
+ "type": "object",
300
+ "properties": {
301
+ "params": {
302
+ "type": "object",
303
+ "properties": {
304
+
305
+ }
306
+ },
307
+ "query": {
308
+ "type": "object",
309
+ "properties": {
310
+
311
+ }
312
+ },
313
+ "body": {
314
+ "type": "object",
315
+ "additionalProperties": false,
316
+ "description": "Body for `POST /verifications/callback-subscriptions`. The owning organization is resolved from the presented `OrgToken`; delivery is scoped to that org and encrypted to its credential when set.",
317
+ "required": [
318
+ "callbackUrl",
319
+ "events"
320
+ ],
321
+ "properties": {
322
+ "callbackUrl": {
323
+ "type": "string",
324
+ "format": "uri",
325
+ "maxLength": 2000
326
+ },
327
+ "events": {
328
+ "type": "array",
329
+ "minItems": 1,
330
+ "maxItems": 12,
331
+ "items": {
332
+ "type": "string",
333
+ "description": "Lifecycle event reported for a verification session. A healthy run\nproceeds through these in order; reading the gaps locates where a\nsession stalled. Session-level terminal events trigger callback\ndelivery; request-level events are progress pings carrying a\n`request_id` in their event data. New values may be added over time;\nclients MUST tolerate unknown values in responses.\n\n- `session_pending`: Session created; awaiting the end-user.\n\n- `verification_client_opened`: The end-user opened the link. Absent ⇒\n the link was never opened.\n\n- `verification_client_ready`: The client initialized.\n\n- `request_matched`: The target request was captured on the provider\n site. Absent (after opened) ⇒ the user didn't complete the journey.\n\n- `request_claim_created`: A proof claim was started.\n\n- `request_claim_completed`: A proof claim finished.\n\n- `request_claim_rejected`: A claim was rejected (detail in `eventData`).\n\n- `request_claim_failed`: A claim errored (detail in `eventData`).\n\n- `verification_success`: Terminal — verified. Triggers callback delivery.\n\n- `verification_rejected`: Terminal — rejected (detail in `eventData`).\n\n- `verification_error`: Terminal — errored (detail in `eventData`).\n\n- `session_expired`: `expiresAt` passed before a terminal event.",
334
+ "enum": [
335
+ "session_pending",
336
+ "verification_client_opened",
337
+ "verification_client_ready",
338
+ "request_matched",
339
+ "request_claim_created",
340
+ "request_claim_completed",
341
+ "request_claim_rejected",
342
+ "request_claim_failed",
343
+ "verification_success",
344
+ "verification_rejected",
345
+ "verification_error",
346
+ "session_expired"
347
+ ]
348
+ }
349
+ }
350
+ }
351
+ }
352
+ },
353
+ "required": [
354
+ "params",
355
+ "query",
356
+ "body"
357
+ ],
358
+ "additionalProperties": false
359
+ }),
360
+ },
254
361
  "CreateOrg": {
255
362
  description: "Create an organization\n\nCreates a new `ORG`-kind organization with the caller as its first `OWNER`. The personal org is created automatically at user signup and is not created via this endpoint.",
256
363
  inputSchema: toZod({
@@ -291,6 +398,78 @@ export const MCP_TOOLS = {
291
398
  "additionalProperties": false
292
399
  }),
293
400
  },
401
+ "CreateOrgCallbackSubscription": {
402
+ description: "Register a callback subscription on an organization\n\nRegisters a destination for verification results on the organization. Caller must be an active member of the org. The body is just `callbackUrl` and `events`; delivery is scoped to the org and encrypted as a compact JWE to the org's encryption credential when set, else delivered as plaintext.",
403
+ inputSchema: toZod({
404
+ "type": "object",
405
+ "properties": {
406
+ "params": {
407
+ "type": "object",
408
+ "properties": {
409
+ "orgId": {
410
+ "type": "string",
411
+ "format": "uuid"
412
+ }
413
+ },
414
+ "required": [
415
+ "orgId"
416
+ ],
417
+ "additionalProperties": false
418
+ },
419
+ "query": {
420
+ "type": "object",
421
+ "properties": {
422
+
423
+ }
424
+ },
425
+ "body": {
426
+ "type": "object",
427
+ "additionalProperties": false,
428
+ "description": "Body for `POST /orgs/{orgId}/callback-subscriptions`. The owning organization comes from the path; bearer-authenticated and gated on org membership. Delivery is scoped to the org and encrypted to its credential when set.",
429
+ "required": [
430
+ "callbackUrl",
431
+ "events"
432
+ ],
433
+ "properties": {
434
+ "callbackUrl": {
435
+ "type": "string",
436
+ "format": "uri",
437
+ "maxLength": 2000
438
+ },
439
+ "events": {
440
+ "type": "array",
441
+ "minItems": 1,
442
+ "maxItems": 12,
443
+ "items": {
444
+ "type": "string",
445
+ "description": "Lifecycle event reported for a verification session. A healthy run\nproceeds through these in order; reading the gaps locates where a\nsession stalled. Session-level terminal events trigger callback\ndelivery; request-level events are progress pings carrying a\n`request_id` in their event data. New values may be added over time;\nclients MUST tolerate unknown values in responses.\n\n- `session_pending`: Session created; awaiting the end-user.\n\n- `verification_client_opened`: The end-user opened the link. Absent ⇒\n the link was never opened.\n\n- `verification_client_ready`: The client initialized.\n\n- `request_matched`: The target request was captured on the provider\n site. Absent (after opened) ⇒ the user didn't complete the journey.\n\n- `request_claim_created`: A proof claim was started.\n\n- `request_claim_completed`: A proof claim finished.\n\n- `request_claim_rejected`: A claim was rejected (detail in `eventData`).\n\n- `request_claim_failed`: A claim errored (detail in `eventData`).\n\n- `verification_success`: Terminal — verified. Triggers callback delivery.\n\n- `verification_rejected`: Terminal — rejected (detail in `eventData`).\n\n- `verification_error`: Terminal — errored (detail in `eventData`).\n\n- `session_expired`: `expiresAt` passed before a terminal event.",
446
+ "enum": [
447
+ "session_pending",
448
+ "verification_client_opened",
449
+ "verification_client_ready",
450
+ "request_matched",
451
+ "request_claim_created",
452
+ "request_claim_completed",
453
+ "request_claim_rejected",
454
+ "request_claim_failed",
455
+ "verification_success",
456
+ "verification_rejected",
457
+ "verification_error",
458
+ "session_expired"
459
+ ]
460
+ }
461
+ }
462
+ }
463
+ }
464
+ },
465
+ "required": [
466
+ "params",
467
+ "query",
468
+ "body"
469
+ ],
470
+ "additionalProperties": false
471
+ }),
472
+ },
294
473
  "CreateProvider": {
295
474
  description: "Create a verification\n\nCreate a new Reclaim verification. Use this only after `providers` returned nothing useful for the domain. The caller must be an active member of the target organization.\nCreates a new verification in the specified organization. `visibility` is coerced to `PRIVATE` at creation regardless of what's sent; the author may toggle to `PUBLIC` later via `PATCH /providers/{id}`. While `PRIVATE`, versions go to the go live freely; once `PUBLIC`, non-admin versions need admin review. See `Provider.visibility`.\nThe server also seeds an initial `0.1.0` version on the `draft` branch in the same transaction so the verification is immediately editable. Its `initialUrl` defaults to `https://<domain>`; all other version fields fall back to their schema-declared defaults (structured verification, empty requests, empty web settings). `Provider.latestVersion` stays `null` until the draft is promoted to the live channel.",
296
475
  inputSchema: toZod({
@@ -660,7 +839,143 @@ export const MCP_TOOLS = {
660
839
  "description": "A template for selecting request",
661
840
  "allOf": [
662
841
  {
663
- "$ref": "#/components/schemas/RequestSelection"
842
+ "type": "object",
843
+ "additionalProperties": false,
844
+ "description": "A matcher for one HTTP request in observed traffic, together with the response constraints that must hold for a Reclaim proof over that request to be valid. Used by interceptors, in-page injections, and LLM agents.",
845
+ "required": [
846
+ "url",
847
+ "method"
848
+ ],
849
+ "properties": {
850
+ "url": {
851
+ "type": "string",
852
+ "description": "The URL or generic path of the HTTP request."
853
+ },
854
+ "method": {
855
+ "type": "string",
856
+ "description": "The HTTP method used for the request.",
857
+ "enum": [
858
+ "GET",
859
+ "POST",
860
+ "PUT",
861
+ "PATCH",
862
+ "DELETE"
863
+ ]
864
+ },
865
+ "requestBodyTemplate": {
866
+ "type": "string",
867
+ "description": "Template used to match or capture an outgoing request body. Template can use regex templates as placeholders. For example, to match an outgoing request body that contains a request ID, you can use the following template: `(?<requestId>.*)`.",
868
+ "maxLength": 100000
869
+ },
870
+ "credentials": {
871
+ "type": "string",
872
+ "description": "Mirrors the Fetch API `RequestCredentials` value used when issuing the request — controls whether cookies and auth headers are sent.",
873
+ "enum": [
874
+ "omit",
875
+ "same-origin",
876
+ "include"
877
+ ]
878
+ },
879
+ "writeRedactionMode": {
880
+ "type": "string",
881
+ "description": "How the matched portion of the response should be redacted before the transcript is handed to the attestor.\n- `zk`: redact using a zero-knowledge proof over the original\n bytes.\n\n- `key-update`: redact by performing a TLS key update so the\n attestor never observes the matched bytes in cleartext.",
882
+ "enum": [
883
+ "zk",
884
+ "key-update"
885
+ ]
886
+ },
887
+ "additionalClientOptions": {
888
+ "type": "object",
889
+ "additionalProperties": false,
890
+ "description": "Apply TLS configuration when creating the tunnel to the attestor.",
891
+ "properties": {
892
+ "supportedProtocolVersions": {
893
+ "type": "array",
894
+ "description": "TLS protocol versions the client is allowed to negotiate.",
895
+ "minItems": 1,
896
+ "uniqueItems": true,
897
+ "items": {
898
+ "type": "string",
899
+ "enum": [
900
+ "TLS1_2",
901
+ "TLS1_3"
902
+ ]
903
+ }
904
+ }
905
+ }
906
+ },
907
+ "matches": {
908
+ "type": "array",
909
+ "description": "A list of match conditions for the response.",
910
+ "minItems": 1,
911
+ "items": {
912
+ "type": "object",
913
+ "additionalProperties": false,
914
+ "description": "Specifies a rule to match against a string in response to validate proof content.",
915
+ "required": [
916
+ "type",
917
+ "value"
918
+ ],
919
+ "properties": {
920
+ "isOptional": {
921
+ "type": "boolean",
922
+ "description": "If true, the match condition is optional and won't fail if absent",
923
+ "default": false
924
+ },
925
+ "description": {
926
+ "type": "string",
927
+ "description": "The description of the field that is extracted using this match rule",
928
+ "minLength": 1,
929
+ "maxLength": 1000
930
+ },
931
+ "order": {
932
+ "type": "integer",
933
+ "description": "The order in which the field should be displayed to user in UI",
934
+ "minimum": 0
935
+ },
936
+ "type": {
937
+ "type": "string",
938
+ "description": "The matching mechanism to use value as against response. Typically regex or simple string containment",
939
+ "enum": [
940
+ "regex",
941
+ "contains"
942
+ ]
943
+ },
944
+ "value": {
945
+ "type": "string",
946
+ "description": "The pattern or value to look for in the response. When `type` is 'contains', supports template variable declaration using `{{variable}}` syntax. When `type` is 'regex', can be used to extract variables using regex named groups."
947
+ },
948
+ "extract": {
949
+ "type": "object",
950
+ "description": "Which portions to select from a response. These are selected in order, xpath => jsonPath => regex * These redactions are done client side and only the selected portions are sent to the attestor. The attestor will only be able to see the selected portions alongside the first line of the HTTP response (i.e. \"HTTP/1.1 200 OK\")",
951
+ "properties": {
952
+ "xPath": {
953
+ "type": "string",
954
+ "description": "expect an HTML response, and to contain a certain xpath for eg. \"/html/body/div.a1/div.a2/span.a5\""
955
+ },
956
+ "jsonPath": {
957
+ "type": "string",
958
+ "description": "expect a JSON response, retrieve the item at this path using dot notation for e.g. 'email.addresses.0'"
959
+ },
960
+ "regex": {
961
+ "type": "string",
962
+ "description": "select a regex match from the response"
963
+ },
964
+ "hash": {
965
+ "type": "string",
966
+ "description": "If provided, the value inside will be hashed instead of being redacted. Useful for cases where the data inside is an identifiying piece of information that you don't want to reveal to the attestor, eg. an email address.\nIf the hash function produces more bytes than the original value, the hash will be truncated.\nEg. if hash is enabled, the original value is \"hello\", and hashed is \"a1b2c\", then the attestor will only see \"a1b2c\".\nNote: if a regex with named groups is provided, only the named groups will be hashed.",
967
+ "enum": [
968
+ "oprf",
969
+ "oprf-mpc",
970
+ "oprf-raw"
971
+ ]
972
+ }
973
+ }
974
+ }
975
+ }
976
+ }
977
+ }
978
+ }
664
979
  },
665
980
  {
666
981
  "type": "object",
@@ -692,7 +1007,8 @@ export const MCP_TOOLS = {
692
1007
  "geoLocation": {
693
1008
  "type": "string",
694
1009
  "description": "Geographic location (e.g. ISO country code or {{DYNAMIC_GEO}} to use user's geo location) the verification should appear to originate from.",
695
- "maxLength": 15
1010
+ "maxLength": 15,
1011
+ "default": "{{DYNAMIC_GEO}}"
696
1012
  },
697
1013
  "clientOptions": {
698
1014
  "type": "object",
@@ -707,7 +1023,7 @@ export const MCP_TOOLS = {
707
1023
  "useProxy": {
708
1024
  "type": "boolean",
709
1025
  "description": "When true, network traffic from the portal client and attestation is routed through a proxy.",
710
- "default": false
1026
+ "default": true
711
1027
  },
712
1028
  "userAgent": {
713
1029
  "type": "string",
@@ -777,14 +1093,10 @@ export const MCP_TOOLS = {
777
1093
  }
778
1094
  }
779
1095
  },
780
- "requiredParameters": {
1096
+ "requiredContext": {
781
1097
  "type": "object",
782
- "description": "Map of parameter names needed (optional or required) to use this provider to their human-readable descriptions/labels. Values are plain strings shown alongside the field in dashboards and prompts.",
783
- "maxProperties": 50,
784
- "additionalProperties": {
785
- "type": "string",
786
- "maxLength": 500
787
- }
1098
+ "description": "Optional JSON Schema describing the `context` a Consumer must supply when creating a verification session for this provider version. Only needed when the recipe expects Consumer-supplied values: those are referenced as `{{context.<key>}}` in recipe requests. Bare `{{parameterName}}` placeholders are provider parameters (extracted / not Consumer-supplied) and need no declaration here. The Builder validates `CreateVerificationSessionRequest.context` against this schema and rejects the request (400) on mismatch. Extra context fields are always allowed regardless of the schema (a root-level `additionalProperties: false` is ignored). Empty/absent accepts any context.",
1099
+ "additionalProperties": true
788
1100
  },
789
1101
  "notes": {
790
1102
  "type": "string",
@@ -802,6 +1114,63 @@ export const MCP_TOOLS = {
802
1114
  "additionalProperties": false
803
1115
  }),
804
1116
  },
1117
+ "CreateVerificationSession": {
1118
+ description: "Create a verification session\n\nCreates a verification session for an end-user to complete.\nAuthenticated by the consumer's `OrgToken`; the session is scoped to\nthe resolved organization. The request carries no callback URLs —\nresults are delivered to the org's pre-registered callback\nsubscriptions.\n\n curl -X POST $BASE/verifications/sessions \\\n -H \"Authorization: Bearer $ORG_TOKEN\" \\\n -H 'Content-Type: application/json' \\\n -d '{\"providerId\":\"…\",\"context\":{},\n \"verificationClientUrl\":\"'$BASE'/v/{sessionId}\"}'\n\nFails with `409 Conflict` if the organization has no callback\nsubscription (there would be nowhere to deliver the result).\n",
1119
+ inputSchema: toZod({
1120
+ "type": "object",
1121
+ "properties": {
1122
+ "params": {
1123
+ "type": "object",
1124
+ "properties": {
1125
+
1126
+ }
1127
+ },
1128
+ "query": {
1129
+ "type": "object",
1130
+ "properties": {
1131
+
1132
+ }
1133
+ },
1134
+ "body": {
1135
+ "type": "object",
1136
+ "additionalProperties": false,
1137
+ "description": "Body for `POST /verifications/sessions`. Authenticated by the consumer's `OrgToken`. Carries no callback URLs — they come from the org's callback subscriptions.",
1138
+ "required": [
1139
+ "providerId",
1140
+ "context",
1141
+ "verificationClientUrl"
1142
+ ],
1143
+ "properties": {
1144
+ "providerId": {
1145
+ "type": "string",
1146
+ "format": "uuid"
1147
+ },
1148
+ "version": {
1149
+ "type": "string",
1150
+ "description": "Semver constraint; empty resolves to the latest trunk version.",
1151
+ "maxLength": 64
1152
+ },
1153
+ "context": {
1154
+ "type": "object",
1155
+ "additionalProperties": true,
1156
+ "description": "Consumer context. Validated against the resolved provider version's `requiredContext` JSON Schema (a 400 is returned on mismatch); extra fields are always allowed. Recipe requests reference these values as `{{context.<key>}}`. Echoed back (plus `reclaimSessionId`) in the result."
1157
+ },
1158
+ "verificationClientUrl": {
1159
+ "type": "string",
1160
+ "description": "Must contain a `{sessionId}` placeholder.",
1161
+ "maxLength": 2000
1162
+ }
1163
+ }
1164
+ }
1165
+ },
1166
+ "required": [
1167
+ "params",
1168
+ "query",
1169
+ "body"
1170
+ ],
1171
+ "additionalProperties": false
1172
+ }),
1173
+ },
805
1174
  "DecideProviderVersionReview": {
806
1175
  description: "Record a decision on a verification version review\n\nAdmin only (Reclaim staff). Approves or rejects a verification version currently on the `in_review` branch. `APPROVED` clears the branch tag and promotes the version to the live channel; `REJECTED` moves it to the `rejected` branch where the author can address feedback and resubmit. A rejected version stays rejected — the author either fixes and resubmits, or abandons it.\nUntil RBAC is designed, \"admin\" is detected via the user's email domain (`@reclaimprotocol.org`). Non-admin callers receive a 403.",
807
1176
  inputSchema: toZod({
@@ -863,6 +1232,118 @@ export const MCP_TOOLS = {
863
1232
  "additionalProperties": false
864
1233
  }),
865
1234
  },
1235
+ "DeleteCallbackSubscription": {
1236
+ description: "Delete a callback subscription\n\nRemoves a callback subscription. Authenticated by the org's `OrgToken`; the subscription must belong to that organization.",
1237
+ inputSchema: toZod({
1238
+ "type": "object",
1239
+ "properties": {
1240
+ "params": {
1241
+ "type": "object",
1242
+ "properties": {
1243
+ "subscriptionId": {
1244
+ "type": "string",
1245
+ "format": "uuid",
1246
+ "description": "Stable id for a callback subscription."
1247
+ }
1248
+ },
1249
+ "required": [
1250
+ "subscriptionId"
1251
+ ],
1252
+ "additionalProperties": false
1253
+ },
1254
+ "query": {
1255
+ "type": "object",
1256
+ "properties": {
1257
+
1258
+ }
1259
+ },
1260
+ "body": {
1261
+ "type": "object"
1262
+ }
1263
+ },
1264
+ "required": [
1265
+ "params",
1266
+ "query"
1267
+ ],
1268
+ "additionalProperties": false
1269
+ }),
1270
+ },
1271
+ "DeleteOrgCallbackSubscription": {
1272
+ description: "Delete an organization's callback subscription\n\nRemoves a callback subscription. Caller must be an active member of the owning org.",
1273
+ inputSchema: toZod({
1274
+ "type": "object",
1275
+ "properties": {
1276
+ "params": {
1277
+ "type": "object",
1278
+ "properties": {
1279
+ "orgId": {
1280
+ "type": "string",
1281
+ "format": "uuid"
1282
+ },
1283
+ "subscriptionId": {
1284
+ "type": "string",
1285
+ "format": "uuid",
1286
+ "description": "Stable id for a callback subscription."
1287
+ }
1288
+ },
1289
+ "required": [
1290
+ "orgId",
1291
+ "subscriptionId"
1292
+ ],
1293
+ "additionalProperties": false
1294
+ },
1295
+ "query": {
1296
+ "type": "object",
1297
+ "properties": {
1298
+
1299
+ }
1300
+ },
1301
+ "body": {
1302
+ "type": "object"
1303
+ }
1304
+ },
1305
+ "required": [
1306
+ "params",
1307
+ "query"
1308
+ ],
1309
+ "additionalProperties": false
1310
+ }),
1311
+ },
1312
+ "DeleteOrgCredential": {
1313
+ description: "Clear the organization's encryption credential\n\nRemoves the organization's encryption credential. After this, terminal results are delivered as plaintext until a new credential is set. Authenticated by the org's `OrgToken` or a human `BearerAuth` session for an active member of the org.",
1314
+ inputSchema: toZod({
1315
+ "type": "object",
1316
+ "properties": {
1317
+ "params": {
1318
+ "type": "object",
1319
+ "properties": {
1320
+ "orgId": {
1321
+ "type": "string",
1322
+ "format": "uuid"
1323
+ }
1324
+ },
1325
+ "required": [
1326
+ "orgId"
1327
+ ],
1328
+ "additionalProperties": false
1329
+ },
1330
+ "query": {
1331
+ "type": "object",
1332
+ "properties": {
1333
+
1334
+ }
1335
+ },
1336
+ "body": {
1337
+ "type": "object"
1338
+ }
1339
+ },
1340
+ "required": [
1341
+ "params",
1342
+ "query"
1343
+ ],
1344
+ "additionalProperties": false
1345
+ }),
1346
+ },
866
1347
  "DeleteProvider": {
867
1348
  description: "Delete a verification\n\nOwner of the verification's organization only. Soft-archives the verification (sets `status` to `ARCHIVED`) so historical references remain resolvable. Supports optimistic concurrency via `If-Match`.",
868
1349
  inputSchema: toZod({
@@ -997,22 +1478,49 @@ export const MCP_TOOLS = {
997
1478
  "additionalProperties": false
998
1479
  }),
999
1480
  },
1000
- "GetCredential": {
1001
- description: "Get a credential\n\nReturns the credential row. Visibility: anyone can fetch an anonymous (`orgId` null) credential by id; linked credentials are visible only to active members of the owning org.",
1481
+ "GetMe": {
1482
+ description: "Get the authenticated user",
1483
+ inputSchema: toZod({
1484
+ "type": "object",
1485
+ "properties": {
1486
+ "params": {
1487
+ "type": "object",
1488
+ "properties": {
1489
+
1490
+ }
1491
+ },
1492
+ "query": {
1493
+ "type": "object",
1494
+ "properties": {
1495
+
1496
+ }
1497
+ },
1498
+ "body": {
1499
+ "type": "object"
1500
+ }
1501
+ },
1502
+ "required": [
1503
+ "params",
1504
+ "query"
1505
+ ],
1506
+ "additionalProperties": false
1507
+ }),
1508
+ },
1509
+ "GetOrg": {
1510
+ description: "Get an organization",
1002
1511
  inputSchema: toZod({
1003
1512
  "type": "object",
1004
1513
  "properties": {
1005
1514
  "params": {
1006
1515
  "type": "object",
1007
1516
  "properties": {
1008
- "credentialId": {
1517
+ "orgId": {
1009
1518
  "type": "string",
1010
- "format": "uuid",
1011
- "description": "Stable id for a `Credential` row."
1519
+ "format": "uuid"
1012
1520
  }
1013
1521
  },
1014
1522
  "required": [
1015
- "credentialId"
1523
+ "orgId"
1016
1524
  ],
1017
1525
  "additionalProperties": false
1018
1526
  },
@@ -1033,24 +1541,21 @@ export const MCP_TOOLS = {
1033
1541
  "additionalProperties": false
1034
1542
  }),
1035
1543
  },
1036
- "GetCredentialByAddress": {
1037
- description: "Look up a credential by its lowercase ETH address\n\nCompanion to `GET /credentials/{credentialId}`. The MCP / CLI knows the credential by its address (the public handle the user actually types) rather than by its UUID id, so this shortcut returns the same `Credential` shape keyed on the address. Visibility rules mirror `GetCredential`: anonymous credentials are world-readable; linked credentials are visible only to active members of the owning org. Bumps `lastUsedAt` so the dashboard shows liveness.",
1544
+ "GetOrgBilling": {
1545
+ description: "Get the billing record for an organization\n\nOwner only. Returns `404` when no billing has been set; presence of the row is what promotes the org's credentials out of sandbox mode (see `Credential.mode`).",
1038
1546
  inputSchema: toZod({
1039
1547
  "type": "object",
1040
1548
  "properties": {
1041
1549
  "params": {
1042
1550
  "type": "object",
1043
1551
  "properties": {
1044
- "address": {
1552
+ "orgId": {
1045
1553
  "type": "string",
1046
- "description": "Lowercase Ethereum address (no EIP-55 mixed-case checksum). The client derives this from the public key via keccak-256 of the uncompressed pubkey minus the `0x04` prefix, taking the last 20 bytes. The server re-validates the format on insert but does not re-derive from the public key — that match is the client's responsibility.",
1047
- "pattern": "^0x[0-9a-f]{40}$",
1048
- "minLength": 42,
1049
- "maxLength": 42
1554
+ "format": "uuid"
1050
1555
  }
1051
1556
  },
1052
1557
  "required": [
1053
- "address"
1558
+ "orgId"
1054
1559
  ],
1055
1560
  "additionalProperties": false
1056
1561
  },
@@ -1071,17 +1576,170 @@ export const MCP_TOOLS = {
1071
1576
  "additionalProperties": false
1072
1577
  }),
1073
1578
  },
1074
- "GetMe": {
1075
- description: "Get the authenticated user",
1579
+ "GetOrgCredential": {
1580
+ description: "Get the organization's encryption credential\n\nReturns the organization's single X25519 encryption credential — the public JWK the Builder uses to JWE-encrypt delivered results — or `404` when none is set (delivery is plaintext in that case). Authenticated by the org's `OrgToken` or a human `BearerAuth` session for an active member of the org.",
1076
1581
  inputSchema: toZod({
1077
1582
  "type": "object",
1078
1583
  "properties": {
1079
1584
  "params": {
1585
+ "type": "object",
1586
+ "properties": {
1587
+ "orgId": {
1588
+ "type": "string",
1589
+ "format": "uuid"
1590
+ }
1591
+ },
1592
+ "required": [
1593
+ "orgId"
1594
+ ],
1595
+ "additionalProperties": false
1596
+ },
1597
+ "query": {
1080
1598
  "type": "object",
1081
1599
  "properties": {
1082
1600
 
1083
1601
  }
1084
1602
  },
1603
+ "body": {
1604
+ "type": "object"
1605
+ }
1606
+ },
1607
+ "required": [
1608
+ "params",
1609
+ "query"
1610
+ ],
1611
+ "additionalProperties": false
1612
+ }),
1613
+ },
1614
+ "GetOrgToken": {
1615
+ description: "Get the organization's API token metadata\n\nReturns metadata about the organization's current API token — its last four characters, when it was created, and when it was last used — never the token itself. The caller must be an active **OWNER** of the organization. Returns `404` when no token has been issued.",
1616
+ inputSchema: toZod({
1617
+ "type": "object",
1618
+ "properties": {
1619
+ "params": {
1620
+ "type": "object",
1621
+ "properties": {
1622
+ "orgId": {
1623
+ "type": "string",
1624
+ "format": "uuid"
1625
+ }
1626
+ },
1627
+ "required": [
1628
+ "orgId"
1629
+ ],
1630
+ "additionalProperties": false
1631
+ },
1632
+ "query": {
1633
+ "type": "object",
1634
+ "properties": {
1635
+
1636
+ }
1637
+ },
1638
+ "body": {
1639
+ "type": "object"
1640
+ }
1641
+ },
1642
+ "required": [
1643
+ "params",
1644
+ "query"
1645
+ ],
1646
+ "additionalProperties": false
1647
+ }),
1648
+ },
1649
+ "GetProvider": {
1650
+ description: "Get a verification\n\nFetch a single Reclaim verification by id. Returns every field needed\nto integrate it into a flow: domain, the live version (initialUrl + requests),\nand the data points it can prove. Use `providers` first if you only\nhave a query string.\n\nReturns the verification record.\n\n**Canonical URL.** For SEO and stable sharing, the canonical\nHTML URL for a verification is `/providers/{providerId}/{slug}`\n(see `GetProviderBySlug`). HTML callers (`Accept: text/html`)\nthat hit this route — which omits the slug — receive a `301`\nredirect to the slugged URL. JSON callers\n(`Accept: application/json`) receive the body directly without\nredirect; the slug is on the response.\n",
1651
+ inputSchema: toZod({
1652
+ "type": "object",
1653
+ "properties": {
1654
+ "params": {
1655
+ "type": "object",
1656
+ "properties": {
1657
+ "providerId": {
1658
+ "type": "string",
1659
+ "format": "uuid"
1660
+ }
1661
+ },
1662
+ "required": [
1663
+ "providerId"
1664
+ ],
1665
+ "additionalProperties": false
1666
+ },
1667
+ "query": {
1668
+ "type": "object",
1669
+ "properties": {
1670
+
1671
+ }
1672
+ },
1673
+ "body": {
1674
+ "type": "object"
1675
+ }
1676
+ },
1677
+ "required": [
1678
+ "params",
1679
+ "query"
1680
+ ],
1681
+ "additionalProperties": false
1682
+ }),
1683
+ },
1684
+ "GetProviderVersion": {
1685
+ description: "Get a specific verification version",
1686
+ inputSchema: toZod({
1687
+ "type": "object",
1688
+ "properties": {
1689
+ "params": {
1690
+ "type": "object",
1691
+ "properties": {
1692
+ "providerId": {
1693
+ "type": "string",
1694
+ "format": "uuid"
1695
+ },
1696
+ "version": {
1697
+ "type": "string",
1698
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[a-zA-Z0-9_-]+(?:\\.[0-9]+)?)?$",
1699
+ "maxLength": 32
1700
+ }
1701
+ },
1702
+ "required": [
1703
+ "providerId",
1704
+ "version"
1705
+ ],
1706
+ "additionalProperties": false
1707
+ },
1708
+ "query": {
1709
+ "type": "object",
1710
+ "properties": {
1711
+
1712
+ }
1713
+ },
1714
+ "body": {
1715
+ "type": "object"
1716
+ }
1717
+ },
1718
+ "required": [
1719
+ "params",
1720
+ "query"
1721
+ ],
1722
+ "additionalProperties": false
1723
+ }),
1724
+ },
1725
+ "GetUser": {
1726
+ description: "Get a user's profile\n\nReturns a user record. Visible to: the user themselves, or any member of an organization the subject also belongs to.",
1727
+ inputSchema: toZod({
1728
+ "type": "object",
1729
+ "properties": {
1730
+ "params": {
1731
+ "type": "object",
1732
+ "properties": {
1733
+ "userId": {
1734
+ "type": "string",
1735
+ "format": "uuid"
1736
+ }
1737
+ },
1738
+ "required": [
1739
+ "userId"
1740
+ ],
1741
+ "additionalProperties": false
1742
+ },
1085
1743
  "query": {
1086
1744
  "type": "object",
1087
1745
  "properties": {
@@ -1099,21 +1757,22 @@ export const MCP_TOOLS = {
1099
1757
  "additionalProperties": false
1100
1758
  }),
1101
1759
  },
1102
- "GetOrg": {
1103
- description: "Get an organization",
1760
+ "GetVerificationSession": {
1761
+ description: "Get a verification session\n\nReturns the session. Authenticated by the consumer's `OrgToken` (or the\nVC service token); the resolved org must match the session's.\n\nReading `status`:\n- `pending` — created, not yet finished; the end-user can still\n complete it until `expiresAt`.\n- `success` / `rejected` / `error` — terminal outcomes (the matching\n `verification_*` event was recorded). Only after a terminal status is\n a result delivered to callbacks.\n- `expired` — `expiresAt` passed before a terminal event. A `pending`\n session whose `expiresAt` is in the past has effectively expired and\n flips to `expired` on the next sweep; the end-user can no longer\n complete it — issue a fresh session/link.\n\n`callbackDeliveryStatus` aggregates the session's callback deliveries\nand is only meaningful once the session is terminal. To investigate a\nstuck or failed session, pair this with `list_verification_events` (the\nper-stage lifecycle log) and `list_verification_deliveries` (callback\nhealth).\n",
1104
1762
  inputSchema: toZod({
1105
1763
  "type": "object",
1106
1764
  "properties": {
1107
1765
  "params": {
1108
1766
  "type": "object",
1109
1767
  "properties": {
1110
- "orgId": {
1768
+ "sessionId": {
1111
1769
  "type": "string",
1112
- "format": "uuid"
1770
+ "format": "uuid",
1771
+ "description": "Verification session id (UUID v7 when supported). Also echoed in the result payload as `reclaimSessionId`."
1113
1772
  }
1114
1773
  },
1115
1774
  "required": [
1116
- "orgId"
1775
+ "sessionId"
1117
1776
  ],
1118
1777
  "additionalProperties": false
1119
1778
  },
@@ -1134,8 +1793,8 @@ export const MCP_TOOLS = {
1134
1793
  "additionalProperties": false
1135
1794
  }),
1136
1795
  },
1137
- "GetOrgBilling": {
1138
- description: "Get the billing record for an organization\n\nOwner only. Returns `404` when no billing has been set; presence of the row is what promotes the org's credentials out of sandbox mode (see `Credential.mode`).",
1796
+ "IssueOrgToken": {
1797
+ description: "Issue (or regenerate) the organization's API token\n\nIssues a fresh per-organization API token (`rorg_…`). The caller must be an active **OWNER** of the organization. A successful call invalidates any previously issued token for the org. The plaintext token is returned **only once** in this response (the server stores only its HMAC); treat it like a password and store it securely.",
1139
1798
  inputSchema: toZod({
1140
1799
  "type": "object",
1141
1800
  "properties": {
@@ -1169,23 +1828,16 @@ export const MCP_TOOLS = {
1169
1828
  "additionalProperties": false
1170
1829
  }),
1171
1830
  },
1172
- "GetProvider": {
1173
- description: "Get a verification\n\nFetch a single Reclaim verification by id. Returns every field needed\nto integrate it into a flow: domain, the live version (initialUrl + requests),\nand the data points it can prove. Use `providers` first if you only\nhave a query string.\n\nReturns the verification record.\n\n**Canonical URL.** For SEO and stable sharing, the canonical\nHTML URL for a verification is `/providers/{providerId}/{slug}`\n(see `GetProviderBySlug`). HTML callers (`Accept: text/html`)\nthat hit this route — which omits the slug — receive a `301`\nredirect to the slugged URL. JSON callers\n(`Accept: application/json`) receive the body directly without\nredirect; the slug is on the response.\n",
1831
+ "ListCallbackDlq": {
1832
+ description: "List dead-lettered callbacks (admin-only)\n\nAdmin only. Lists callback deliveries whose retries were exhausted and moved to the DLQ for manual recovery.",
1174
1833
  inputSchema: toZod({
1175
1834
  "type": "object",
1176
1835
  "properties": {
1177
1836
  "params": {
1178
1837
  "type": "object",
1179
1838
  "properties": {
1180
- "providerId": {
1181
- "type": "string",
1182
- "format": "uuid"
1183
- }
1184
- },
1185
- "required": [
1186
- "providerId"
1187
- ],
1188
- "additionalProperties": false
1839
+
1840
+ }
1189
1841
  },
1190
1842
  "query": {
1191
1843
  "type": "object",
@@ -1204,29 +1856,16 @@ export const MCP_TOOLS = {
1204
1856
  "additionalProperties": false
1205
1857
  }),
1206
1858
  },
1207
- "GetProviderVersion": {
1208
- description: "Get a specific verification version",
1859
+ "ListCallbackSubscriptions": {
1860
+ description: "List callback subscriptions for the organization\n\nReturns every callback subscription owned by the organization the presented `OrgToken` resolves to.",
1209
1861
  inputSchema: toZod({
1210
1862
  "type": "object",
1211
1863
  "properties": {
1212
1864
  "params": {
1213
1865
  "type": "object",
1214
1866
  "properties": {
1215
- "providerId": {
1216
- "type": "string",
1217
- "format": "uuid"
1218
- },
1219
- "version": {
1220
- "type": "string",
1221
- "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[a-zA-Z0-9_-]+(?:\\.[0-9]+)?)?$",
1222
- "maxLength": 32
1223
- }
1224
- },
1225
- "required": [
1226
- "providerId",
1227
- "version"
1228
- ],
1229
- "additionalProperties": false
1867
+
1868
+ }
1230
1869
  },
1231
1870
  "query": {
1232
1871
  "type": "object",
@@ -1245,21 +1884,21 @@ export const MCP_TOOLS = {
1245
1884
  "additionalProperties": false
1246
1885
  }),
1247
1886
  },
1248
- "GetUser": {
1249
- description: "Get a user's profile\n\nReturns a user record. Visible to: the user themselves, or any member of an organization the subject also belongs to.",
1887
+ "ListOrgCallbackSubscriptions": {
1888
+ description: "List an organization's callback subscriptions\n\nReturns every callback subscription owned by the organization. Caller must be an active member of the org.",
1250
1889
  inputSchema: toZod({
1251
1890
  "type": "object",
1252
1891
  "properties": {
1253
1892
  "params": {
1254
1893
  "type": "object",
1255
1894
  "properties": {
1256
- "userId": {
1895
+ "orgId": {
1257
1896
  "type": "string",
1258
1897
  "format": "uuid"
1259
1898
  }
1260
1899
  },
1261
1900
  "required": [
1262
- "userId"
1901
+ "orgId"
1263
1902
  ],
1264
1903
  "additionalProperties": false
1265
1904
  },
@@ -1280,8 +1919,8 @@ export const MCP_TOOLS = {
1280
1919
  "additionalProperties": false
1281
1920
  }),
1282
1921
  },
1283
- "LinkCredential": {
1284
- description: "Link a credential to an organization\n\nLinks an ETH credential to an organization — registering it directly, or attaching an already-known one (matched by `address`). The private key MUST NOT leave the client — only the derived address and uncompressed public key are sent. `orgId` is required and the caller must be allowed to edit it. Idempotent for the same `(address, orgId)`. (Anonymous credentials live client-side; they are only stored here once linked.)",
1922
+ "ListOrgs": {
1923
+ description: "List organizations the caller belongs to",
1285
1924
  inputSchema: toZod({
1286
1925
  "type": "object",
1287
1926
  "properties": {
@@ -1294,68 +1933,117 @@ export const MCP_TOOLS = {
1294
1933
  "query": {
1295
1934
  "type": "object",
1296
1935
  "properties": {
1297
-
1936
+ "cursor": {
1937
+ "type": "string",
1938
+ "maxLength": 500
1939
+ }
1298
1940
  }
1299
1941
  },
1300
1942
  "body": {
1943
+ "type": "object"
1944
+ }
1945
+ },
1946
+ "required": [
1947
+ "params",
1948
+ "query"
1949
+ ],
1950
+ "additionalProperties": false
1951
+ }),
1952
+ },
1953
+ "ListOrgVerificationSessions": {
1954
+ description: "List an organization's verification sessions\n\nReturns verification sessions created under the organization, newest first. Optionally filter by `providerId`, `status`, `resolvedVersion`, `claimantClientId`, and a `createdAfter`/`createdBefore` time range. Caller must be an active member of the org. Opaque cursor pagination.\n\nNote: `status` filters on the stored column. A session that has passed `expiresAt` but has not yet been swept is reported as `expired` in its body while still stored as `pending`, so `status=expired` may not match such sessions until the sweep runs.",
1955
+ inputSchema: toZod({
1956
+ "type": "object",
1957
+ "properties": {
1958
+ "params": {
1301
1959
  "type": "object",
1302
- "additionalProperties": false,
1303
- "description": "Body for `POST /credentials`. Only the lowercase ETH `address` is sent — the private key MUST NOT leave the client, and the public key is not sent (the client derives the address from the key: keccak-256 of the uncompressed pubkey minus its `0x04` prefix, last 20 bytes, lowercase hex).",
1960
+ "properties": {
1961
+ "orgId": {
1962
+ "type": "string",
1963
+ "format": "uuid"
1964
+ }
1965
+ },
1304
1966
  "required": [
1305
- "address",
1306
1967
  "orgId"
1307
1968
  ],
1969
+ "additionalProperties": false
1970
+ },
1971
+ "query": {
1972
+ "type": "object",
1308
1973
  "properties": {
1309
- "address": {
1974
+ "providerId": {
1310
1975
  "type": "string",
1311
- "description": "Lowercase Ethereum address (no EIP-55 mixed-case checksum). The client derives this from the public key via keccak-256 of the uncompressed pubkey minus the `0x04` prefix, taking the last 20 bytes. The server re-validates the format on insert but does not re-derive from the public key — that match is the client's responsibility.",
1312
- "pattern": "^0x[0-9a-f]{40}$",
1313
- "minLength": 42,
1314
- "maxLength": 42
1976
+ "format": "uuid"
1315
1977
  },
1316
- "orgId": {
1978
+ "status": {
1979
+ "type": "string",
1980
+ "description": "Status of a verification session, derived from its events. New values\nmay be added over time; clients MUST tolerate unknown values in\nresponses.\n\n- `pending`: Created, not yet finished; completable until `expiresAt`.\n\n- `success`: Terminal — `verification_success` recorded.\n\n- `rejected`: Terminal — `verification_rejected` recorded.\n\n- `error`: Terminal — `verification_error` recorded.\n\n- `expired`: `expiresAt` passed before a terminal event; the end-user\n can no longer complete it.",
1981
+ "enum": [
1982
+ "pending",
1983
+ "success",
1984
+ "rejected",
1985
+ "error",
1986
+ "expired"
1987
+ ]
1988
+ },
1989
+ "resolvedVersion": {
1990
+ "type": "string",
1991
+ "maxLength": 64
1992
+ },
1993
+ "claimantClientId": {
1317
1994
  "type": "string",
1318
1995
  "format": "uuid"
1319
1996
  },
1320
- "label": {
1997
+ "createdAfter": {
1321
1998
  "type": "string",
1322
- "description": "Optional human-readable label.",
1323
- "minLength": 1,
1324
- "maxLength": 100
1999
+ "format": "date-time"
2000
+ },
2001
+ "createdBefore": {
2002
+ "type": "string",
2003
+ "format": "date-time"
2004
+ },
2005
+ "cursor": {
2006
+ "type": "string",
2007
+ "maxLength": 500
1325
2008
  }
1326
2009
  }
2010
+ },
2011
+ "body": {
2012
+ "type": "object"
1327
2013
  }
1328
2014
  },
1329
2015
  "required": [
1330
2016
  "params",
1331
- "query",
1332
- "body"
2017
+ "query"
1333
2018
  ],
1334
2019
  "additionalProperties": false
1335
2020
  }),
1336
2021
  },
1337
- "ListOrgCredentials": {
1338
- description: "List credentials linked to an organization\n\nReturns every credential whose `orgId` equals the path parameter. Caller must be an active member of the org.",
2022
+ "ListProviderVersions": {
2023
+ description: "List a verification's versions\n\nLists versions visible to the caller. Non-public branches (`ai`, `draft`, `in_review`, `rejected`) are only visible to members of the verification's owning organization.",
1339
2024
  inputSchema: toZod({
1340
2025
  "type": "object",
1341
2026
  "properties": {
1342
2027
  "params": {
1343
2028
  "type": "object",
1344
2029
  "properties": {
1345
- "orgId": {
2030
+ "providerId": {
1346
2031
  "type": "string",
1347
2032
  "format": "uuid"
1348
2033
  }
1349
2034
  },
1350
2035
  "required": [
1351
- "orgId"
2036
+ "providerId"
1352
2037
  ],
1353
2038
  "additionalProperties": false
1354
2039
  },
1355
2040
  "query": {
1356
2041
  "type": "object",
1357
2042
  "properties": {
1358
-
2043
+ "cursor": {
2044
+ "type": "string",
2045
+ "maxLength": 500
2046
+ }
1359
2047
  }
1360
2048
  },
1361
2049
  "body": {
@@ -1369,24 +2057,29 @@ export const MCP_TOOLS = {
1369
2057
  "additionalProperties": false
1370
2058
  }),
1371
2059
  },
1372
- "ListOrgs": {
1373
- description: "List organizations the caller belongs to",
2060
+ "ListVerificationDeliveries": {
2061
+ description: "Get the callback delivery status for a session\n\nDiagnostic view of the session's callback deliveries: one entry per\n(subscription, terminal event) with its delivery state, attempt\ncount, last error, and whether it was dead-lettered. Lets a consumer\n(or the agent) answer \"did my callback arrive, and if not, why?\"\nwithout org-dashboard access. Only meaningful after the session\nreaches a terminal status (no deliveries exist before then). Auth\nmirrors the events GET: the Verification Client service token, or the\nconsumer's `OrgToken` (the resolved org must match the session).\n\nReading `deliveryStatus` per entry:\n- `delivered` — the callback POST succeeded; nothing to do.\n- `pending` — queued, not yet attempted (or between retries).\n- `attempt_failed` — a delivery attempt failed but retries remain;\n `lastError` holds the reason and `attempts` the count so far.\n- `failed` — all retries exhausted. When `deadLettered` is also true\n the delivery sits in the DLQ.\n\nTo recover a failed/dead-lettered delivery: confirm the `callbackUrl`\nis reachable and answers 2xx, then call `retry_verification_callback`\nto re-enqueue it (an org admin can also retry from the Callback DLQ).\n",
1374
2062
  inputSchema: toZod({
1375
2063
  "type": "object",
1376
2064
  "properties": {
1377
2065
  "params": {
1378
2066
  "type": "object",
1379
2067
  "properties": {
1380
-
1381
- }
2068
+ "sessionId": {
2069
+ "type": "string",
2070
+ "format": "uuid",
2071
+ "description": "Verification session id (UUID v7 when supported). Also echoed in the result payload as `reclaimSessionId`."
2072
+ }
2073
+ },
2074
+ "required": [
2075
+ "sessionId"
2076
+ ],
2077
+ "additionalProperties": false
1382
2078
  },
1383
2079
  "query": {
1384
2080
  "type": "object",
1385
2081
  "properties": {
1386
- "cursor": {
1387
- "type": "string",
1388
- "maxLength": 500
1389
- }
2082
+
1390
2083
  }
1391
2084
  },
1392
2085
  "body": {
@@ -1400,31 +2093,29 @@ export const MCP_TOOLS = {
1400
2093
  "additionalProperties": false
1401
2094
  }),
1402
2095
  },
1403
- "ListProviderVersions": {
1404
- description: "List a verification's versions\n\nLists versions visible to the caller. Non-public branches (`ai`, `draft`, `in_review`, `rejected`) are only visible to members of the verification's owning organization.",
2096
+ "ListVerificationEvents": {
2097
+ description: "Get the event log for a session\n\nReturns the append-only event log. Readable by the Verification Client\n(`X-VC-Token`) or the session creator (authenticated by the consumer's\n`OrgToken`; the resolved org must match the session).\n\nThis log is the primary tool for diagnosing a stuck or failed session.\nA healthy run proceeds through this lifecycle (in order):\n\n`session_pending` → `verification_client_opened` →\n`verification_client_ready` → `request_matched` →\n`request_claim_created` → `request_claim_completed` → terminal\n(`verification_success` | `verification_rejected` | `verification_error`),\nor `session_expired` if `expiresAt` passes first.\n\nRead the gaps to locate where the flow stalled:\n- no `verification_client_opened` → the end-user never opened the link.\n- opened but no `request_matched` → the user opened the page but didn't\n complete the login/journey on the provider site, so the target\n request was never captured.\n- `request_matched` but no terminal event → the proof run is still in\n progress (or stalled mid-claim).\n\nFailure detail lives in `eventData` on `request_claim_failed`,\n`request_claim_rejected`, `verification_error`, and\n`verification_rejected` — inspect it for the reason. Request-level\nevents also carry a `request_id` in `eventData`. Pair with\n`get_verification_session` (status/expiry) and\n`list_verification_deliveries` (callback health) for the full picture.\n",
1405
2098
  inputSchema: toZod({
1406
2099
  "type": "object",
1407
2100
  "properties": {
1408
2101
  "params": {
1409
2102
  "type": "object",
1410
2103
  "properties": {
1411
- "providerId": {
2104
+ "sessionId": {
1412
2105
  "type": "string",
1413
- "format": "uuid"
2106
+ "format": "uuid",
2107
+ "description": "Verification session id (UUID v7 when supported). Also echoed in the result payload as `reclaimSessionId`."
1414
2108
  }
1415
2109
  },
1416
2110
  "required": [
1417
- "providerId"
2111
+ "sessionId"
1418
2112
  ],
1419
2113
  "additionalProperties": false
1420
2114
  },
1421
2115
  "query": {
1422
2116
  "type": "object",
1423
2117
  "properties": {
1424
- "cursor": {
1425
- "type": "string",
1426
- "maxLength": 500
1427
- }
2118
+
1428
2119
  }
1429
2120
  },
1430
2121
  "body": {
@@ -1626,22 +2317,22 @@ export const MCP_TOOLS = {
1626
2317
  "additionalProperties": false
1627
2318
  }),
1628
2319
  },
1629
- "RevokeCredential": {
1630
- description: "Revoke a credential\n\nSoft-revokes the credential (sets `revokedAt`). Allowed for the creating user (anonymous credentials), an active OWNER of the owning org (linked credentials), or a Reclaim admin. Revoked credentials cannot be used for verification and cannot be re-linked.",
2320
+ "RetryVerificationCallback": {
2321
+ description: "Re-enqueue callback delivery for a session\n\nRe-enqueues delivery of a session's stored result to its callback subscriptions. Use this after `list_verification_deliveries` shows a `failed` or dead-lettered delivery, once the consumer's callback endpoint is reachable again and answers 2xx — it re-attempts every not-yet-delivered callback for the session. Usable by the session creator (authenticated by the consumer's `OrgToken`) to recover from a transient consumer-side outage.",
1631
2322
  inputSchema: toZod({
1632
2323
  "type": "object",
1633
2324
  "properties": {
1634
2325
  "params": {
1635
2326
  "type": "object",
1636
2327
  "properties": {
1637
- "credentialId": {
2328
+ "sessionId": {
1638
2329
  "type": "string",
1639
2330
  "format": "uuid",
1640
- "description": "Stable id for a `Credential` row."
2331
+ "description": "Verification session id (UUID v7 when supported). Also echoed in the result payload as `reclaimSessionId`."
1641
2332
  }
1642
2333
  },
1643
2334
  "required": [
1644
- "credentialId"
2335
+ "sessionId"
1645
2336
  ],
1646
2337
  "additionalProperties": false
1647
2338
  },
@@ -1662,6 +2353,84 @@ export const MCP_TOOLS = {
1662
2353
  "additionalProperties": false
1663
2354
  }),
1664
2355
  },
2356
+ "SetOrgCredential": {
2357
+ description: "Set (or replace) the organization's encryption credential\n\nUpserts the organization's single X25519 encryption credential. The body carries the org's **encryption public JWK** (`{kty:'OKP', crv:'X25519', x}`); the matching private key never leaves the consumer. Replacing overwrites the single row. Once set, terminal results are delivered as a compact JWE encrypted to this key; clear it to revert to plaintext delivery. Authenticated by the org's `OrgToken` or a human `BearerAuth` session for an active member of the org.",
2358
+ inputSchema: toZod({
2359
+ "type": "object",
2360
+ "properties": {
2361
+ "params": {
2362
+ "type": "object",
2363
+ "properties": {
2364
+ "orgId": {
2365
+ "type": "string",
2366
+ "format": "uuid"
2367
+ }
2368
+ },
2369
+ "required": [
2370
+ "orgId"
2371
+ ],
2372
+ "additionalProperties": false
2373
+ },
2374
+ "query": {
2375
+ "type": "object",
2376
+ "properties": {
2377
+
2378
+ }
2379
+ },
2380
+ "body": {
2381
+ "type": "object",
2382
+ "additionalProperties": false,
2383
+ "description": "Body for `PUT /orgs/{orgId}/credential`.",
2384
+ "required": [
2385
+ "publicKeyJwk"
2386
+ ],
2387
+ "properties": {
2388
+ "publicKeyJwk": {
2389
+ "type": "object",
2390
+ "additionalProperties": false,
2391
+ "description": "An X25519 public key in JWK form (RFC 8037 OKP), used to JWE-encrypt delivered verification results. The matching private key never leaves the consumer.",
2392
+ "required": [
2393
+ "kty",
2394
+ "crv",
2395
+ "x"
2396
+ ],
2397
+ "properties": {
2398
+ "kty": {
2399
+ "type": "string",
2400
+ "enum": [
2401
+ "OKP"
2402
+ ]
2403
+ },
2404
+ "crv": {
2405
+ "type": "string",
2406
+ "enum": [
2407
+ "X25519"
2408
+ ]
2409
+ },
2410
+ "x": {
2411
+ "type": "string",
2412
+ "description": "base64url-encoded public key bytes.",
2413
+ "minLength": 1,
2414
+ "maxLength": 128
2415
+ }
2416
+ }
2417
+ },
2418
+ "label": {
2419
+ "type": "string",
2420
+ "minLength": 1,
2421
+ "maxLength": 100
2422
+ }
2423
+ }
2424
+ }
2425
+ },
2426
+ "required": [
2427
+ "params",
2428
+ "query",
2429
+ "body"
2430
+ ],
2431
+ "additionalProperties": false
2432
+ }),
2433
+ },
1665
2434
  "SubmitProviderVersionForReview": {
1666
2435
  description: "Submit a verification version for review\n\nSubmits a verification version (currently on the `draft` or `rejected` branch) for admin review. On success the version's branch transitions to `in_review`. Callable by any authenticated member of the verification's owning org. Meaningful only on `PUBLIC` verifications — on `PRIVATE` verifications new versions go to the live channel directly and never need review.",
1667
2436
  inputSchema: toZod({
@@ -2249,7 +3018,143 @@ export const MCP_TOOLS = {
2249
3018
  "description": "A template for selecting request",
2250
3019
  "allOf": [
2251
3020
  {
2252
- "$ref": "#/components/schemas/RequestSelection"
3021
+ "type": "object",
3022
+ "additionalProperties": false,
3023
+ "description": "A matcher for one HTTP request in observed traffic, together with the response constraints that must hold for a Reclaim proof over that request to be valid. Used by interceptors, in-page injections, and LLM agents.",
3024
+ "required": [
3025
+ "url",
3026
+ "method"
3027
+ ],
3028
+ "properties": {
3029
+ "url": {
3030
+ "type": "string",
3031
+ "description": "The URL or generic path of the HTTP request."
3032
+ },
3033
+ "method": {
3034
+ "type": "string",
3035
+ "description": "The HTTP method used for the request.",
3036
+ "enum": [
3037
+ "GET",
3038
+ "POST",
3039
+ "PUT",
3040
+ "PATCH",
3041
+ "DELETE"
3042
+ ]
3043
+ },
3044
+ "requestBodyTemplate": {
3045
+ "type": "string",
3046
+ "description": "Template used to match or capture an outgoing request body. Template can use regex templates as placeholders. For example, to match an outgoing request body that contains a request ID, you can use the following template: `(?<requestId>.*)`.",
3047
+ "maxLength": 100000
3048
+ },
3049
+ "credentials": {
3050
+ "type": "string",
3051
+ "description": "Mirrors the Fetch API `RequestCredentials` value used when issuing the request — controls whether cookies and auth headers are sent.",
3052
+ "enum": [
3053
+ "omit",
3054
+ "same-origin",
3055
+ "include"
3056
+ ]
3057
+ },
3058
+ "writeRedactionMode": {
3059
+ "type": "string",
3060
+ "description": "How the matched portion of the response should be redacted before the transcript is handed to the attestor.\n- `zk`: redact using a zero-knowledge proof over the original\n bytes.\n\n- `key-update`: redact by performing a TLS key update so the\n attestor never observes the matched bytes in cleartext.",
3061
+ "enum": [
3062
+ "zk",
3063
+ "key-update"
3064
+ ]
3065
+ },
3066
+ "additionalClientOptions": {
3067
+ "type": "object",
3068
+ "additionalProperties": false,
3069
+ "description": "Apply TLS configuration when creating the tunnel to the attestor.",
3070
+ "properties": {
3071
+ "supportedProtocolVersions": {
3072
+ "type": "array",
3073
+ "description": "TLS protocol versions the client is allowed to negotiate.",
3074
+ "minItems": 1,
3075
+ "uniqueItems": true,
3076
+ "items": {
3077
+ "type": "string",
3078
+ "enum": [
3079
+ "TLS1_2",
3080
+ "TLS1_3"
3081
+ ]
3082
+ }
3083
+ }
3084
+ }
3085
+ },
3086
+ "matches": {
3087
+ "type": "array",
3088
+ "description": "A list of match conditions for the response.",
3089
+ "minItems": 1,
3090
+ "items": {
3091
+ "type": "object",
3092
+ "additionalProperties": false,
3093
+ "description": "Specifies a rule to match against a string in response to validate proof content.",
3094
+ "required": [
3095
+ "type",
3096
+ "value"
3097
+ ],
3098
+ "properties": {
3099
+ "isOptional": {
3100
+ "type": "boolean",
3101
+ "description": "If true, the match condition is optional and won't fail if absent",
3102
+ "default": false
3103
+ },
3104
+ "description": {
3105
+ "type": "string",
3106
+ "description": "The description of the field that is extracted using this match rule",
3107
+ "minLength": 1,
3108
+ "maxLength": 1000
3109
+ },
3110
+ "order": {
3111
+ "type": "integer",
3112
+ "description": "The order in which the field should be displayed to user in UI",
3113
+ "minimum": 0
3114
+ },
3115
+ "type": {
3116
+ "type": "string",
3117
+ "description": "The matching mechanism to use value as against response. Typically regex or simple string containment",
3118
+ "enum": [
3119
+ "regex",
3120
+ "contains"
3121
+ ]
3122
+ },
3123
+ "value": {
3124
+ "type": "string",
3125
+ "description": "The pattern or value to look for in the response. When `type` is 'contains', supports template variable declaration using `{{variable}}` syntax. When `type` is 'regex', can be used to extract variables using regex named groups."
3126
+ },
3127
+ "extract": {
3128
+ "type": "object",
3129
+ "description": "Which portions to select from a response. These are selected in order, xpath => jsonPath => regex * These redactions are done client side and only the selected portions are sent to the attestor. The attestor will only be able to see the selected portions alongside the first line of the HTTP response (i.e. \"HTTP/1.1 200 OK\")",
3130
+ "properties": {
3131
+ "xPath": {
3132
+ "type": "string",
3133
+ "description": "expect an HTML response, and to contain a certain xpath for eg. \"/html/body/div.a1/div.a2/span.a5\""
3134
+ },
3135
+ "jsonPath": {
3136
+ "type": "string",
3137
+ "description": "expect a JSON response, retrieve the item at this path using dot notation for e.g. 'email.addresses.0'"
3138
+ },
3139
+ "regex": {
3140
+ "type": "string",
3141
+ "description": "select a regex match from the response"
3142
+ },
3143
+ "hash": {
3144
+ "type": "string",
3145
+ "description": "If provided, the value inside will be hashed instead of being redacted. Useful for cases where the data inside is an identifiying piece of information that you don't want to reveal to the attestor, eg. an email address.\nIf the hash function produces more bytes than the original value, the hash will be truncated.\nEg. if hash is enabled, the original value is \"hello\", and hashed is \"a1b2c\", then the attestor will only see \"a1b2c\".\nNote: if a regex with named groups is provided, only the named groups will be hashed.",
3146
+ "enum": [
3147
+ "oprf",
3148
+ "oprf-mpc",
3149
+ "oprf-raw"
3150
+ ]
3151
+ }
3152
+ }
3153
+ }
3154
+ }
3155
+ }
3156
+ }
3157
+ }
2253
3158
  },
2254
3159
  {
2255
3160
  "type": "object",
@@ -2281,7 +3186,8 @@ export const MCP_TOOLS = {
2281
3186
  "geoLocation": {
2282
3187
  "type": "string",
2283
3188
  "description": "Geographic location (e.g. ISO country code or {{DYNAMIC_GEO}} to use user's geo location) the verification should appear to originate from.",
2284
- "maxLength": 15
3189
+ "maxLength": 15,
3190
+ "default": "{{DYNAMIC_GEO}}"
2285
3191
  },
2286
3192
  "clientOptions": {
2287
3193
  "type": "object",
@@ -2296,7 +3202,7 @@ export const MCP_TOOLS = {
2296
3202
  "useProxy": {
2297
3203
  "type": "boolean",
2298
3204
  "description": "When true, network traffic from the portal client and attestation is routed through a proxy.",
2299
- "default": false
3205
+ "default": true
2300
3206
  },
2301
3207
  "userAgent": {
2302
3208
  "type": "string",
@@ -2366,14 +3272,10 @@ export const MCP_TOOLS = {
2366
3272
  }
2367
3273
  }
2368
3274
  },
2369
- "requiredParameters": {
3275
+ "requiredContext": {
2370
3276
  "type": "object",
2371
- "description": "Map of parameter names needed (optional or required) to use this provider to their human-readable descriptions/labels. Values are plain strings shown alongside the field in dashboards and prompts.",
2372
- "maxProperties": 50,
2373
- "additionalProperties": {
2374
- "type": "string",
2375
- "maxLength": 500
2376
- }
3277
+ "description": "Optional JSON Schema describing the `context` a Consumer must supply when creating a verification session for this provider version. Only needed when the recipe expects Consumer-supplied values: those are referenced as `{{context.<key>}}` in recipe requests. Bare `{{parameterName}}` placeholders are provider parameters (extracted / not Consumer-supplied) and need no declaration here. The Builder validates `CreateVerificationSessionRequest.context` against this schema and rejects the request (400) on mismatch. Extra context fields are always allowed regardless of the schema (a root-level `additionalProperties: false` is ignored). Empty/absent accepts any context.",
3278
+ "additionalProperties": true
2377
3279
  },
2378
3280
  "notes": {
2379
3281
  "type": "string",