@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
@@ -3,7 +3,7 @@
3
3
  // Run `npm run openapi:typegen --workspace=packages/agent`
4
4
  // to regenerate. Do not edit by hand.
5
5
  // @ts-nocheck
6
- import { convertJsonSchemaToZod as toZod } from 'zod-from-json-schema';
6
+ import { toZod } from "./to-zod.js";
7
7
  export const MCP_TOOLS = {
8
8
  "AddOrgMember": {
9
9
  description: "Invite a member to an organization\n\nOwner only. Invites a user to the organization by email. The invitee does **not** need to be a registered user — an invite is created in either case, and an email is dispatched. The new row is returned with `status: PENDING`; it flips to `ACTIVE` on first sign-in by the invited email. `PERSONAL` organizations reject this call (409). In the current milestone the email is not actually dispatched — the invite is auto-claimed when the invitee next signs in.",
@@ -160,6 +160,46 @@ export const MCP_TOOLS = {
160
160
  "additionalProperties": false
161
161
  }),
162
162
  },
163
+ "AdminSessions": {
164
+ 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.",
165
+ inputSchema: toZod({
166
+ "type": "object",
167
+ "properties": {
168
+ "params": {
169
+ "type": "object",
170
+ "properties": {}
171
+ },
172
+ "query": {
173
+ "type": "object",
174
+ "properties": {
175
+ "q": {
176
+ "type": "string",
177
+ "maxLength": 100
178
+ },
179
+ "status": {
180
+ "type": "string",
181
+ "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.",
182
+ "enum": [
183
+ "pending",
184
+ "success",
185
+ "rejected",
186
+ "error",
187
+ "expired"
188
+ ]
189
+ }
190
+ }
191
+ },
192
+ "body": {
193
+ "type": "object"
194
+ }
195
+ },
196
+ "required": [
197
+ "params",
198
+ "query"
199
+ ],
200
+ "additionalProperties": false
201
+ }),
202
+ },
163
203
  "CancelPublicListingRequest": {
164
204
  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.",
165
205
  inputSchema: toZod({
@@ -233,6 +273,67 @@ export const MCP_TOOLS = {
233
273
  "additionalProperties": false
234
274
  }),
235
275
  },
276
+ "CreateCallbackSubscription": {
277
+ 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",
278
+ inputSchema: toZod({
279
+ "type": "object",
280
+ "properties": {
281
+ "params": {
282
+ "type": "object",
283
+ "properties": {}
284
+ },
285
+ "query": {
286
+ "type": "object",
287
+ "properties": {}
288
+ },
289
+ "body": {
290
+ "type": "object",
291
+ "additionalProperties": false,
292
+ "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.",
293
+ "required": [
294
+ "callbackUrl",
295
+ "events"
296
+ ],
297
+ "properties": {
298
+ "callbackUrl": {
299
+ "type": "string",
300
+ "format": "uri",
301
+ "maxLength": 2000
302
+ },
303
+ "events": {
304
+ "type": "array",
305
+ "minItems": 1,
306
+ "maxItems": 12,
307
+ "items": {
308
+ "type": "string",
309
+ "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.",
310
+ "enum": [
311
+ "session_pending",
312
+ "verification_client_opened",
313
+ "verification_client_ready",
314
+ "request_matched",
315
+ "request_claim_created",
316
+ "request_claim_completed",
317
+ "request_claim_rejected",
318
+ "request_claim_failed",
319
+ "verification_success",
320
+ "verification_rejected",
321
+ "verification_error",
322
+ "session_expired"
323
+ ]
324
+ }
325
+ }
326
+ }
327
+ }
328
+ },
329
+ "required": [
330
+ "params",
331
+ "query",
332
+ "body"
333
+ ],
334
+ "additionalProperties": false
335
+ }),
336
+ },
236
337
  "CreateOrg": {
237
338
  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.",
238
339
  inputSchema: toZod({
@@ -269,6 +370,76 @@ export const MCP_TOOLS = {
269
370
  "additionalProperties": false
270
371
  }),
271
372
  },
373
+ "CreateOrgCallbackSubscription": {
374
+ 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.",
375
+ inputSchema: toZod({
376
+ "type": "object",
377
+ "properties": {
378
+ "params": {
379
+ "type": "object",
380
+ "properties": {
381
+ "orgId": {
382
+ "type": "string",
383
+ "format": "uuid"
384
+ }
385
+ },
386
+ "required": [
387
+ "orgId"
388
+ ],
389
+ "additionalProperties": false
390
+ },
391
+ "query": {
392
+ "type": "object",
393
+ "properties": {}
394
+ },
395
+ "body": {
396
+ "type": "object",
397
+ "additionalProperties": false,
398
+ "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.",
399
+ "required": [
400
+ "callbackUrl",
401
+ "events"
402
+ ],
403
+ "properties": {
404
+ "callbackUrl": {
405
+ "type": "string",
406
+ "format": "uri",
407
+ "maxLength": 2000
408
+ },
409
+ "events": {
410
+ "type": "array",
411
+ "minItems": 1,
412
+ "maxItems": 12,
413
+ "items": {
414
+ "type": "string",
415
+ "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.",
416
+ "enum": [
417
+ "session_pending",
418
+ "verification_client_opened",
419
+ "verification_client_ready",
420
+ "request_matched",
421
+ "request_claim_created",
422
+ "request_claim_completed",
423
+ "request_claim_rejected",
424
+ "request_claim_failed",
425
+ "verification_success",
426
+ "verification_rejected",
427
+ "verification_error",
428
+ "session_expired"
429
+ ]
430
+ }
431
+ }
432
+ }
433
+ }
434
+ },
435
+ "required": [
436
+ "params",
437
+ "query",
438
+ "body"
439
+ ],
440
+ "additionalProperties": false
441
+ }),
442
+ },
272
443
  "CreateProvider": {
273
444
  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.",
274
445
  inputSchema: toZod({
@@ -626,7 +797,143 @@ export const MCP_TOOLS = {
626
797
  "description": "A template for selecting request",
627
798
  "allOf": [
628
799
  {
629
- "$ref": "#/components/schemas/RequestSelection"
800
+ "type": "object",
801
+ "additionalProperties": false,
802
+ "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.",
803
+ "required": [
804
+ "url",
805
+ "method"
806
+ ],
807
+ "properties": {
808
+ "url": {
809
+ "type": "string",
810
+ "description": "The URL or generic path of the HTTP request."
811
+ },
812
+ "method": {
813
+ "type": "string",
814
+ "description": "The HTTP method used for the request.",
815
+ "enum": [
816
+ "GET",
817
+ "POST",
818
+ "PUT",
819
+ "PATCH",
820
+ "DELETE"
821
+ ]
822
+ },
823
+ "requestBodyTemplate": {
824
+ "type": "string",
825
+ "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>.*)`.",
826
+ "maxLength": 100000
827
+ },
828
+ "credentials": {
829
+ "type": "string",
830
+ "description": "Mirrors the Fetch API `RequestCredentials` value used when issuing the request — controls whether cookies and auth headers are sent.",
831
+ "enum": [
832
+ "omit",
833
+ "same-origin",
834
+ "include"
835
+ ]
836
+ },
837
+ "writeRedactionMode": {
838
+ "type": "string",
839
+ "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.",
840
+ "enum": [
841
+ "zk",
842
+ "key-update"
843
+ ]
844
+ },
845
+ "additionalClientOptions": {
846
+ "type": "object",
847
+ "additionalProperties": false,
848
+ "description": "Apply TLS configuration when creating the tunnel to the attestor.",
849
+ "properties": {
850
+ "supportedProtocolVersions": {
851
+ "type": "array",
852
+ "description": "TLS protocol versions the client is allowed to negotiate.",
853
+ "minItems": 1,
854
+ "uniqueItems": true,
855
+ "items": {
856
+ "type": "string",
857
+ "enum": [
858
+ "TLS1_2",
859
+ "TLS1_3"
860
+ ]
861
+ }
862
+ }
863
+ }
864
+ },
865
+ "matches": {
866
+ "type": "array",
867
+ "description": "A list of match conditions for the response.",
868
+ "minItems": 1,
869
+ "items": {
870
+ "type": "object",
871
+ "additionalProperties": false,
872
+ "description": "Specifies a rule to match against a string in response to validate proof content.",
873
+ "required": [
874
+ "type",
875
+ "value"
876
+ ],
877
+ "properties": {
878
+ "isOptional": {
879
+ "type": "boolean",
880
+ "description": "If true, the match condition is optional and won't fail if absent",
881
+ "default": false
882
+ },
883
+ "description": {
884
+ "type": "string",
885
+ "description": "The description of the field that is extracted using this match rule",
886
+ "minLength": 1,
887
+ "maxLength": 1000
888
+ },
889
+ "order": {
890
+ "type": "integer",
891
+ "description": "The order in which the field should be displayed to user in UI",
892
+ "minimum": 0
893
+ },
894
+ "type": {
895
+ "type": "string",
896
+ "description": "The matching mechanism to use value as against response. Typically regex or simple string containment",
897
+ "enum": [
898
+ "regex",
899
+ "contains"
900
+ ]
901
+ },
902
+ "value": {
903
+ "type": "string",
904
+ "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."
905
+ },
906
+ "extract": {
907
+ "type": "object",
908
+ "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\")",
909
+ "properties": {
910
+ "xPath": {
911
+ "type": "string",
912
+ "description": "expect an HTML response, and to contain a certain xpath for eg. \"/html/body/div.a1/div.a2/span.a5\""
913
+ },
914
+ "jsonPath": {
915
+ "type": "string",
916
+ "description": "expect a JSON response, retrieve the item at this path using dot notation for e.g. 'email.addresses.0'"
917
+ },
918
+ "regex": {
919
+ "type": "string",
920
+ "description": "select a regex match from the response"
921
+ },
922
+ "hash": {
923
+ "type": "string",
924
+ "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.",
925
+ "enum": [
926
+ "oprf",
927
+ "oprf-mpc",
928
+ "oprf-raw"
929
+ ]
930
+ }
931
+ }
932
+ }
933
+ }
934
+ }
935
+ }
936
+ }
630
937
  },
631
938
  {
632
939
  "type": "object",
@@ -658,7 +965,8 @@ export const MCP_TOOLS = {
658
965
  "geoLocation": {
659
966
  "type": "string",
660
967
  "description": "Geographic location (e.g. ISO country code or {{DYNAMIC_GEO}} to use user's geo location) the verification should appear to originate from.",
661
- "maxLength": 15
968
+ "maxLength": 15,
969
+ "default": "{{DYNAMIC_GEO}}"
662
970
  },
663
971
  "clientOptions": {
664
972
  "type": "object",
@@ -673,7 +981,7 @@ export const MCP_TOOLS = {
673
981
  "useProxy": {
674
982
  "type": "boolean",
675
983
  "description": "When true, network traffic from the portal client and attestation is routed through a proxy.",
676
- "default": false
984
+ "default": true
677
985
  },
678
986
  "userAgent": {
679
987
  "type": "string",
@@ -743,14 +1051,10 @@ export const MCP_TOOLS = {
743
1051
  }
744
1052
  }
745
1053
  },
746
- "requiredParameters": {
1054
+ "requiredContext": {
747
1055
  "type": "object",
748
- "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.",
749
- "maxProperties": 50,
750
- "additionalProperties": {
751
- "type": "string",
752
- "maxLength": 500
753
- }
1056
+ "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.",
1057
+ "additionalProperties": true
754
1058
  },
755
1059
  "notes": {
756
1060
  "type": "string",
@@ -768,6 +1072,59 @@ export const MCP_TOOLS = {
768
1072
  "additionalProperties": false
769
1073
  }),
770
1074
  },
1075
+ "CreateVerificationSession": {
1076
+ 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",
1077
+ inputSchema: toZod({
1078
+ "type": "object",
1079
+ "properties": {
1080
+ "params": {
1081
+ "type": "object",
1082
+ "properties": {}
1083
+ },
1084
+ "query": {
1085
+ "type": "object",
1086
+ "properties": {}
1087
+ },
1088
+ "body": {
1089
+ "type": "object",
1090
+ "additionalProperties": false,
1091
+ "description": "Body for `POST /verifications/sessions`. Authenticated by the consumer's `OrgToken`. Carries no callback URLs — they come from the org's callback subscriptions.",
1092
+ "required": [
1093
+ "providerId",
1094
+ "context",
1095
+ "verificationClientUrl"
1096
+ ],
1097
+ "properties": {
1098
+ "providerId": {
1099
+ "type": "string",
1100
+ "format": "uuid"
1101
+ },
1102
+ "version": {
1103
+ "type": "string",
1104
+ "description": "Semver constraint; empty resolves to the latest trunk version.",
1105
+ "maxLength": 64
1106
+ },
1107
+ "context": {
1108
+ "type": "object",
1109
+ "additionalProperties": true,
1110
+ "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."
1111
+ },
1112
+ "verificationClientUrl": {
1113
+ "type": "string",
1114
+ "description": "Must contain a `{sessionId}` placeholder.",
1115
+ "maxLength": 2000
1116
+ }
1117
+ }
1118
+ }
1119
+ },
1120
+ "required": [
1121
+ "params",
1122
+ "query",
1123
+ "body"
1124
+ ],
1125
+ "additionalProperties": false
1126
+ }),
1127
+ },
771
1128
  "DecideProviderVersionReview": {
772
1129
  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.",
773
1130
  inputSchema: toZod({
@@ -827,6 +1184,112 @@ export const MCP_TOOLS = {
827
1184
  "additionalProperties": false
828
1185
  }),
829
1186
  },
1187
+ "DeleteCallbackSubscription": {
1188
+ description: "Delete a callback subscription\n\nRemoves a callback subscription. Authenticated by the org's `OrgToken`; the subscription must belong to that organization.",
1189
+ inputSchema: toZod({
1190
+ "type": "object",
1191
+ "properties": {
1192
+ "params": {
1193
+ "type": "object",
1194
+ "properties": {
1195
+ "subscriptionId": {
1196
+ "type": "string",
1197
+ "format": "uuid",
1198
+ "description": "Stable id for a callback subscription."
1199
+ }
1200
+ },
1201
+ "required": [
1202
+ "subscriptionId"
1203
+ ],
1204
+ "additionalProperties": false
1205
+ },
1206
+ "query": {
1207
+ "type": "object",
1208
+ "properties": {}
1209
+ },
1210
+ "body": {
1211
+ "type": "object"
1212
+ }
1213
+ },
1214
+ "required": [
1215
+ "params",
1216
+ "query"
1217
+ ],
1218
+ "additionalProperties": false
1219
+ }),
1220
+ },
1221
+ "DeleteOrgCallbackSubscription": {
1222
+ description: "Delete an organization's callback subscription\n\nRemoves a callback subscription. Caller must be an active member of the owning org.",
1223
+ inputSchema: toZod({
1224
+ "type": "object",
1225
+ "properties": {
1226
+ "params": {
1227
+ "type": "object",
1228
+ "properties": {
1229
+ "orgId": {
1230
+ "type": "string",
1231
+ "format": "uuid"
1232
+ },
1233
+ "subscriptionId": {
1234
+ "type": "string",
1235
+ "format": "uuid",
1236
+ "description": "Stable id for a callback subscription."
1237
+ }
1238
+ },
1239
+ "required": [
1240
+ "orgId",
1241
+ "subscriptionId"
1242
+ ],
1243
+ "additionalProperties": false
1244
+ },
1245
+ "query": {
1246
+ "type": "object",
1247
+ "properties": {}
1248
+ },
1249
+ "body": {
1250
+ "type": "object"
1251
+ }
1252
+ },
1253
+ "required": [
1254
+ "params",
1255
+ "query"
1256
+ ],
1257
+ "additionalProperties": false
1258
+ }),
1259
+ },
1260
+ "DeleteOrgCredential": {
1261
+ 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.",
1262
+ inputSchema: toZod({
1263
+ "type": "object",
1264
+ "properties": {
1265
+ "params": {
1266
+ "type": "object",
1267
+ "properties": {
1268
+ "orgId": {
1269
+ "type": "string",
1270
+ "format": "uuid"
1271
+ }
1272
+ },
1273
+ "required": [
1274
+ "orgId"
1275
+ ],
1276
+ "additionalProperties": false
1277
+ },
1278
+ "query": {
1279
+ "type": "object",
1280
+ "properties": {}
1281
+ },
1282
+ "body": {
1283
+ "type": "object"
1284
+ }
1285
+ },
1286
+ "required": [
1287
+ "params",
1288
+ "query"
1289
+ ],
1290
+ "additionalProperties": false
1291
+ }),
1292
+ },
830
1293
  "DeleteProvider": {
831
1294
  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`.",
832
1295
  inputSchema: toZod({
@@ -955,22 +1418,45 @@ export const MCP_TOOLS = {
955
1418
  "additionalProperties": false
956
1419
  }),
957
1420
  },
958
- "GetCredential": {
959
- 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.",
1421
+ "GetMe": {
1422
+ description: "Get the authenticated user",
1423
+ inputSchema: toZod({
1424
+ "type": "object",
1425
+ "properties": {
1426
+ "params": {
1427
+ "type": "object",
1428
+ "properties": {}
1429
+ },
1430
+ "query": {
1431
+ "type": "object",
1432
+ "properties": {}
1433
+ },
1434
+ "body": {
1435
+ "type": "object"
1436
+ }
1437
+ },
1438
+ "required": [
1439
+ "params",
1440
+ "query"
1441
+ ],
1442
+ "additionalProperties": false
1443
+ }),
1444
+ },
1445
+ "GetOrg": {
1446
+ description: "Get an organization",
960
1447
  inputSchema: toZod({
961
1448
  "type": "object",
962
1449
  "properties": {
963
1450
  "params": {
964
1451
  "type": "object",
965
1452
  "properties": {
966
- "credentialId": {
1453
+ "orgId": {
967
1454
  "type": "string",
968
- "format": "uuid",
969
- "description": "Stable id for a `Credential` row."
1455
+ "format": "uuid"
970
1456
  }
971
1457
  },
972
1458
  "required": [
973
- "credentialId"
1459
+ "orgId"
974
1460
  ],
975
1461
  "additionalProperties": false
976
1462
  },
@@ -989,24 +1475,21 @@ export const MCP_TOOLS = {
989
1475
  "additionalProperties": false
990
1476
  }),
991
1477
  },
992
- "GetCredentialByAddress": {
993
- 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.",
1478
+ "GetOrgBilling": {
1479
+ 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`).",
994
1480
  inputSchema: toZod({
995
1481
  "type": "object",
996
1482
  "properties": {
997
1483
  "params": {
998
1484
  "type": "object",
999
1485
  "properties": {
1000
- "address": {
1486
+ "orgId": {
1001
1487
  "type": "string",
1002
- "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.",
1003
- "pattern": "^0x[0-9a-f]{40}$",
1004
- "minLength": 42,
1005
- "maxLength": 42
1488
+ "format": "uuid"
1006
1489
  }
1007
1490
  },
1008
1491
  "required": [
1009
- "address"
1492
+ "orgId"
1010
1493
  ],
1011
1494
  "additionalProperties": false
1012
1495
  },
@@ -1025,15 +1508,162 @@ export const MCP_TOOLS = {
1025
1508
  "additionalProperties": false
1026
1509
  }),
1027
1510
  },
1028
- "GetMe": {
1029
- description: "Get the authenticated user",
1511
+ "GetOrgCredential": {
1512
+ 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.",
1513
+ inputSchema: toZod({
1514
+ "type": "object",
1515
+ "properties": {
1516
+ "params": {
1517
+ "type": "object",
1518
+ "properties": {
1519
+ "orgId": {
1520
+ "type": "string",
1521
+ "format": "uuid"
1522
+ }
1523
+ },
1524
+ "required": [
1525
+ "orgId"
1526
+ ],
1527
+ "additionalProperties": false
1528
+ },
1529
+ "query": {
1530
+ "type": "object",
1531
+ "properties": {}
1532
+ },
1533
+ "body": {
1534
+ "type": "object"
1535
+ }
1536
+ },
1537
+ "required": [
1538
+ "params",
1539
+ "query"
1540
+ ],
1541
+ "additionalProperties": false
1542
+ }),
1543
+ },
1544
+ "GetOrgToken": {
1545
+ 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.",
1546
+ inputSchema: toZod({
1547
+ "type": "object",
1548
+ "properties": {
1549
+ "params": {
1550
+ "type": "object",
1551
+ "properties": {
1552
+ "orgId": {
1553
+ "type": "string",
1554
+ "format": "uuid"
1555
+ }
1556
+ },
1557
+ "required": [
1558
+ "orgId"
1559
+ ],
1560
+ "additionalProperties": false
1561
+ },
1562
+ "query": {
1563
+ "type": "object",
1564
+ "properties": {}
1565
+ },
1566
+ "body": {
1567
+ "type": "object"
1568
+ }
1569
+ },
1570
+ "required": [
1571
+ "params",
1572
+ "query"
1573
+ ],
1574
+ "additionalProperties": false
1575
+ }),
1576
+ },
1577
+ "GetProvider": {
1578
+ 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",
1030
1579
  inputSchema: toZod({
1031
1580
  "type": "object",
1032
1581
  "properties": {
1033
1582
  "params": {
1583
+ "type": "object",
1584
+ "properties": {
1585
+ "providerId": {
1586
+ "type": "string",
1587
+ "format": "uuid"
1588
+ }
1589
+ },
1590
+ "required": [
1591
+ "providerId"
1592
+ ],
1593
+ "additionalProperties": false
1594
+ },
1595
+ "query": {
1034
1596
  "type": "object",
1035
1597
  "properties": {}
1036
1598
  },
1599
+ "body": {
1600
+ "type": "object"
1601
+ }
1602
+ },
1603
+ "required": [
1604
+ "params",
1605
+ "query"
1606
+ ],
1607
+ "additionalProperties": false
1608
+ }),
1609
+ },
1610
+ "GetProviderVersion": {
1611
+ description: "Get a specific verification version",
1612
+ inputSchema: toZod({
1613
+ "type": "object",
1614
+ "properties": {
1615
+ "params": {
1616
+ "type": "object",
1617
+ "properties": {
1618
+ "providerId": {
1619
+ "type": "string",
1620
+ "format": "uuid"
1621
+ },
1622
+ "version": {
1623
+ "type": "string",
1624
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[a-zA-Z0-9_-]+(?:\\.[0-9]+)?)?$",
1625
+ "maxLength": 32
1626
+ }
1627
+ },
1628
+ "required": [
1629
+ "providerId",
1630
+ "version"
1631
+ ],
1632
+ "additionalProperties": false
1633
+ },
1634
+ "query": {
1635
+ "type": "object",
1636
+ "properties": {}
1637
+ },
1638
+ "body": {
1639
+ "type": "object"
1640
+ }
1641
+ },
1642
+ "required": [
1643
+ "params",
1644
+ "query"
1645
+ ],
1646
+ "additionalProperties": false
1647
+ }),
1648
+ },
1649
+ "GetUser": {
1650
+ 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.",
1651
+ inputSchema: toZod({
1652
+ "type": "object",
1653
+ "properties": {
1654
+ "params": {
1655
+ "type": "object",
1656
+ "properties": {
1657
+ "userId": {
1658
+ "type": "string",
1659
+ "format": "uuid"
1660
+ }
1661
+ },
1662
+ "required": [
1663
+ "userId"
1664
+ ],
1665
+ "additionalProperties": false
1666
+ },
1037
1667
  "query": {
1038
1668
  "type": "object",
1039
1669
  "properties": {}
@@ -1049,21 +1679,22 @@ export const MCP_TOOLS = {
1049
1679
  "additionalProperties": false
1050
1680
  }),
1051
1681
  },
1052
- "GetOrg": {
1053
- description: "Get an organization",
1682
+ "GetVerificationSession": {
1683
+ 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",
1054
1684
  inputSchema: toZod({
1055
1685
  "type": "object",
1056
1686
  "properties": {
1057
1687
  "params": {
1058
1688
  "type": "object",
1059
1689
  "properties": {
1060
- "orgId": {
1690
+ "sessionId": {
1061
1691
  "type": "string",
1062
- "format": "uuid"
1692
+ "format": "uuid",
1693
+ "description": "Verification session id (UUID v7 when supported). Also echoed in the result payload as `reclaimSessionId`."
1063
1694
  }
1064
1695
  },
1065
1696
  "required": [
1066
- "orgId"
1697
+ "sessionId"
1067
1698
  ],
1068
1699
  "additionalProperties": false
1069
1700
  },
@@ -1082,8 +1713,8 @@ export const MCP_TOOLS = {
1082
1713
  "additionalProperties": false
1083
1714
  }),
1084
1715
  },
1085
- "GetOrgBilling": {
1086
- 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`).",
1716
+ "IssueOrgToken": {
1717
+ 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.",
1087
1718
  inputSchema: toZod({
1088
1719
  "type": "object",
1089
1720
  "properties": {
@@ -1115,23 +1746,14 @@ export const MCP_TOOLS = {
1115
1746
  "additionalProperties": false
1116
1747
  }),
1117
1748
  },
1118
- "GetProvider": {
1119
- 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",
1749
+ "ListCallbackDlq": {
1750
+ 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.",
1120
1751
  inputSchema: toZod({
1121
1752
  "type": "object",
1122
1753
  "properties": {
1123
1754
  "params": {
1124
1755
  "type": "object",
1125
- "properties": {
1126
- "providerId": {
1127
- "type": "string",
1128
- "format": "uuid"
1129
- }
1130
- },
1131
- "required": [
1132
- "providerId"
1133
- ],
1134
- "additionalProperties": false
1756
+ "properties": {}
1135
1757
  },
1136
1758
  "query": {
1137
1759
  "type": "object",
@@ -1148,29 +1770,14 @@ export const MCP_TOOLS = {
1148
1770
  "additionalProperties": false
1149
1771
  }),
1150
1772
  },
1151
- "GetProviderVersion": {
1152
- description: "Get a specific verification version",
1773
+ "ListCallbackSubscriptions": {
1774
+ description: "List callback subscriptions for the organization\n\nReturns every callback subscription owned by the organization the presented `OrgToken` resolves to.",
1153
1775
  inputSchema: toZod({
1154
1776
  "type": "object",
1155
1777
  "properties": {
1156
1778
  "params": {
1157
1779
  "type": "object",
1158
- "properties": {
1159
- "providerId": {
1160
- "type": "string",
1161
- "format": "uuid"
1162
- },
1163
- "version": {
1164
- "type": "string",
1165
- "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[a-zA-Z0-9_-]+(?:\\.[0-9]+)?)?$",
1166
- "maxLength": 32
1167
- }
1168
- },
1169
- "required": [
1170
- "providerId",
1171
- "version"
1172
- ],
1173
- "additionalProperties": false
1780
+ "properties": {}
1174
1781
  },
1175
1782
  "query": {
1176
1783
  "type": "object",
@@ -1187,21 +1794,21 @@ export const MCP_TOOLS = {
1187
1794
  "additionalProperties": false
1188
1795
  }),
1189
1796
  },
1190
- "GetUser": {
1191
- 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.",
1797
+ "ListOrgCallbackSubscriptions": {
1798
+ 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.",
1192
1799
  inputSchema: toZod({
1193
1800
  "type": "object",
1194
1801
  "properties": {
1195
1802
  "params": {
1196
1803
  "type": "object",
1197
1804
  "properties": {
1198
- "userId": {
1805
+ "orgId": {
1199
1806
  "type": "string",
1200
1807
  "format": "uuid"
1201
1808
  }
1202
1809
  },
1203
1810
  "required": [
1204
- "userId"
1811
+ "orgId"
1205
1812
  ],
1206
1813
  "additionalProperties": false
1207
1814
  },
@@ -1220,8 +1827,8 @@ export const MCP_TOOLS = {
1220
1827
  "additionalProperties": false
1221
1828
  }),
1222
1829
  },
1223
- "LinkCredential": {
1224
- 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.)",
1830
+ "ListOrgs": {
1831
+ description: "List organizations the caller belongs to",
1225
1832
  inputSchema: toZod({
1226
1833
  "type": "object",
1227
1834
  "properties": {
@@ -1231,47 +1838,26 @@ export const MCP_TOOLS = {
1231
1838
  },
1232
1839
  "query": {
1233
1840
  "type": "object",
1234
- "properties": {}
1235
- },
1236
- "body": {
1237
- "type": "object",
1238
- "additionalProperties": false,
1239
- "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).",
1240
- "required": [
1241
- "address",
1242
- "orgId"
1243
- ],
1244
1841
  "properties": {
1245
- "address": {
1246
- "type": "string",
1247
- "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.",
1248
- "pattern": "^0x[0-9a-f]{40}$",
1249
- "minLength": 42,
1250
- "maxLength": 42
1251
- },
1252
- "orgId": {
1253
- "type": "string",
1254
- "format": "uuid"
1255
- },
1256
- "label": {
1842
+ "cursor": {
1257
1843
  "type": "string",
1258
- "description": "Optional human-readable label.",
1259
- "minLength": 1,
1260
- "maxLength": 100
1844
+ "maxLength": 500
1261
1845
  }
1262
1846
  }
1847
+ },
1848
+ "body": {
1849
+ "type": "object"
1263
1850
  }
1264
1851
  },
1265
1852
  "required": [
1266
1853
  "params",
1267
- "query",
1268
- "body"
1854
+ "query"
1269
1855
  ],
1270
1856
  "additionalProperties": false
1271
1857
  }),
1272
1858
  },
1273
- "ListOrgCredentials": {
1274
- 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.",
1859
+ "ListOrgVerificationSessions": {
1860
+ 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.",
1275
1861
  inputSchema: toZod({
1276
1862
  "type": "object",
1277
1863
  "properties": {
@@ -1290,7 +1876,43 @@ export const MCP_TOOLS = {
1290
1876
  },
1291
1877
  "query": {
1292
1878
  "type": "object",
1293
- "properties": {}
1879
+ "properties": {
1880
+ "providerId": {
1881
+ "type": "string",
1882
+ "format": "uuid"
1883
+ },
1884
+ "status": {
1885
+ "type": "string",
1886
+ "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.",
1887
+ "enum": [
1888
+ "pending",
1889
+ "success",
1890
+ "rejected",
1891
+ "error",
1892
+ "expired"
1893
+ ]
1894
+ },
1895
+ "resolvedVersion": {
1896
+ "type": "string",
1897
+ "maxLength": 64
1898
+ },
1899
+ "claimantClientId": {
1900
+ "type": "string",
1901
+ "format": "uuid"
1902
+ },
1903
+ "createdAfter": {
1904
+ "type": "string",
1905
+ "format": "date-time"
1906
+ },
1907
+ "createdBefore": {
1908
+ "type": "string",
1909
+ "format": "date-time"
1910
+ },
1911
+ "cursor": {
1912
+ "type": "string",
1913
+ "maxLength": 500
1914
+ }
1915
+ }
1294
1916
  },
1295
1917
  "body": {
1296
1918
  "type": "object"
@@ -1303,14 +1925,23 @@ export const MCP_TOOLS = {
1303
1925
  "additionalProperties": false
1304
1926
  }),
1305
1927
  },
1306
- "ListOrgs": {
1307
- description: "List organizations the caller belongs to",
1928
+ "ListProviderVersions": {
1929
+ 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.",
1308
1930
  inputSchema: toZod({
1309
1931
  "type": "object",
1310
1932
  "properties": {
1311
1933
  "params": {
1312
1934
  "type": "object",
1313
- "properties": {}
1935
+ "properties": {
1936
+ "providerId": {
1937
+ "type": "string",
1938
+ "format": "uuid"
1939
+ }
1940
+ },
1941
+ "required": [
1942
+ "providerId"
1943
+ ],
1944
+ "additionalProperties": false
1314
1945
  },
1315
1946
  "query": {
1316
1947
  "type": "object",
@@ -1332,32 +1963,62 @@ export const MCP_TOOLS = {
1332
1963
  "additionalProperties": false
1333
1964
  }),
1334
1965
  },
1335
- "ListProviderVersions": {
1336
- 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.",
1966
+ "ListVerificationDeliveries": {
1967
+ 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",
1337
1968
  inputSchema: toZod({
1338
1969
  "type": "object",
1339
1970
  "properties": {
1340
1971
  "params": {
1341
1972
  "type": "object",
1342
1973
  "properties": {
1343
- "providerId": {
1974
+ "sessionId": {
1344
1975
  "type": "string",
1345
- "format": "uuid"
1976
+ "format": "uuid",
1977
+ "description": "Verification session id (UUID v7 when supported). Also echoed in the result payload as `reclaimSessionId`."
1346
1978
  }
1347
1979
  },
1348
1980
  "required": [
1349
- "providerId"
1981
+ "sessionId"
1350
1982
  ],
1351
1983
  "additionalProperties": false
1352
1984
  },
1353
1985
  "query": {
1986
+ "type": "object",
1987
+ "properties": {}
1988
+ },
1989
+ "body": {
1990
+ "type": "object"
1991
+ }
1992
+ },
1993
+ "required": [
1994
+ "params",
1995
+ "query"
1996
+ ],
1997
+ "additionalProperties": false
1998
+ }),
1999
+ },
2000
+ "ListVerificationEvents": {
2001
+ 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",
2002
+ inputSchema: toZod({
2003
+ "type": "object",
2004
+ "properties": {
2005
+ "params": {
1354
2006
  "type": "object",
1355
2007
  "properties": {
1356
- "cursor": {
2008
+ "sessionId": {
1357
2009
  "type": "string",
1358
- "maxLength": 500
2010
+ "format": "uuid",
2011
+ "description": "Verification session id (UUID v7 when supported). Also echoed in the result payload as `reclaimSessionId`."
1359
2012
  }
1360
- }
2013
+ },
2014
+ "required": [
2015
+ "sessionId"
2016
+ ],
2017
+ "additionalProperties": false
2018
+ },
2019
+ "query": {
2020
+ "type": "object",
2021
+ "properties": {}
1361
2022
  },
1362
2023
  "body": {
1363
2024
  "type": "object"
@@ -1550,22 +2211,22 @@ export const MCP_TOOLS = {
1550
2211
  "additionalProperties": false
1551
2212
  }),
1552
2213
  },
1553
- "RevokeCredential": {
1554
- 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.",
2214
+ "RetryVerificationCallback": {
2215
+ 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.",
1555
2216
  inputSchema: toZod({
1556
2217
  "type": "object",
1557
2218
  "properties": {
1558
2219
  "params": {
1559
2220
  "type": "object",
1560
2221
  "properties": {
1561
- "credentialId": {
2222
+ "sessionId": {
1562
2223
  "type": "string",
1563
2224
  "format": "uuid",
1564
- "description": "Stable id for a `Credential` row."
2225
+ "description": "Verification session id (UUID v7 when supported). Also echoed in the result payload as `reclaimSessionId`."
1565
2226
  }
1566
2227
  },
1567
2228
  "required": [
1568
- "credentialId"
2229
+ "sessionId"
1569
2230
  ],
1570
2231
  "additionalProperties": false
1571
2232
  },
@@ -1584,6 +2245,82 @@ export const MCP_TOOLS = {
1584
2245
  "additionalProperties": false
1585
2246
  }),
1586
2247
  },
2248
+ "SetOrgCredential": {
2249
+ 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.",
2250
+ inputSchema: toZod({
2251
+ "type": "object",
2252
+ "properties": {
2253
+ "params": {
2254
+ "type": "object",
2255
+ "properties": {
2256
+ "orgId": {
2257
+ "type": "string",
2258
+ "format": "uuid"
2259
+ }
2260
+ },
2261
+ "required": [
2262
+ "orgId"
2263
+ ],
2264
+ "additionalProperties": false
2265
+ },
2266
+ "query": {
2267
+ "type": "object",
2268
+ "properties": {}
2269
+ },
2270
+ "body": {
2271
+ "type": "object",
2272
+ "additionalProperties": false,
2273
+ "description": "Body for `PUT /orgs/{orgId}/credential`.",
2274
+ "required": [
2275
+ "publicKeyJwk"
2276
+ ],
2277
+ "properties": {
2278
+ "publicKeyJwk": {
2279
+ "type": "object",
2280
+ "additionalProperties": false,
2281
+ "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.",
2282
+ "required": [
2283
+ "kty",
2284
+ "crv",
2285
+ "x"
2286
+ ],
2287
+ "properties": {
2288
+ "kty": {
2289
+ "type": "string",
2290
+ "enum": [
2291
+ "OKP"
2292
+ ]
2293
+ },
2294
+ "crv": {
2295
+ "type": "string",
2296
+ "enum": [
2297
+ "X25519"
2298
+ ]
2299
+ },
2300
+ "x": {
2301
+ "type": "string",
2302
+ "description": "base64url-encoded public key bytes.",
2303
+ "minLength": 1,
2304
+ "maxLength": 128
2305
+ }
2306
+ }
2307
+ },
2308
+ "label": {
2309
+ "type": "string",
2310
+ "minLength": 1,
2311
+ "maxLength": 100
2312
+ }
2313
+ }
2314
+ }
2315
+ },
2316
+ "required": [
2317
+ "params",
2318
+ "query",
2319
+ "body"
2320
+ ],
2321
+ "additionalProperties": false
2322
+ }),
2323
+ },
1587
2324
  "SubmitProviderVersionForReview": {
1588
2325
  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.",
1589
2326
  inputSchema: toZod({
@@ -2155,7 +2892,143 @@ export const MCP_TOOLS = {
2155
2892
  "description": "A template for selecting request",
2156
2893
  "allOf": [
2157
2894
  {
2158
- "$ref": "#/components/schemas/RequestSelection"
2895
+ "type": "object",
2896
+ "additionalProperties": false,
2897
+ "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.",
2898
+ "required": [
2899
+ "url",
2900
+ "method"
2901
+ ],
2902
+ "properties": {
2903
+ "url": {
2904
+ "type": "string",
2905
+ "description": "The URL or generic path of the HTTP request."
2906
+ },
2907
+ "method": {
2908
+ "type": "string",
2909
+ "description": "The HTTP method used for the request.",
2910
+ "enum": [
2911
+ "GET",
2912
+ "POST",
2913
+ "PUT",
2914
+ "PATCH",
2915
+ "DELETE"
2916
+ ]
2917
+ },
2918
+ "requestBodyTemplate": {
2919
+ "type": "string",
2920
+ "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>.*)`.",
2921
+ "maxLength": 100000
2922
+ },
2923
+ "credentials": {
2924
+ "type": "string",
2925
+ "description": "Mirrors the Fetch API `RequestCredentials` value used when issuing the request — controls whether cookies and auth headers are sent.",
2926
+ "enum": [
2927
+ "omit",
2928
+ "same-origin",
2929
+ "include"
2930
+ ]
2931
+ },
2932
+ "writeRedactionMode": {
2933
+ "type": "string",
2934
+ "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.",
2935
+ "enum": [
2936
+ "zk",
2937
+ "key-update"
2938
+ ]
2939
+ },
2940
+ "additionalClientOptions": {
2941
+ "type": "object",
2942
+ "additionalProperties": false,
2943
+ "description": "Apply TLS configuration when creating the tunnel to the attestor.",
2944
+ "properties": {
2945
+ "supportedProtocolVersions": {
2946
+ "type": "array",
2947
+ "description": "TLS protocol versions the client is allowed to negotiate.",
2948
+ "minItems": 1,
2949
+ "uniqueItems": true,
2950
+ "items": {
2951
+ "type": "string",
2952
+ "enum": [
2953
+ "TLS1_2",
2954
+ "TLS1_3"
2955
+ ]
2956
+ }
2957
+ }
2958
+ }
2959
+ },
2960
+ "matches": {
2961
+ "type": "array",
2962
+ "description": "A list of match conditions for the response.",
2963
+ "minItems": 1,
2964
+ "items": {
2965
+ "type": "object",
2966
+ "additionalProperties": false,
2967
+ "description": "Specifies a rule to match against a string in response to validate proof content.",
2968
+ "required": [
2969
+ "type",
2970
+ "value"
2971
+ ],
2972
+ "properties": {
2973
+ "isOptional": {
2974
+ "type": "boolean",
2975
+ "description": "If true, the match condition is optional and won't fail if absent",
2976
+ "default": false
2977
+ },
2978
+ "description": {
2979
+ "type": "string",
2980
+ "description": "The description of the field that is extracted using this match rule",
2981
+ "minLength": 1,
2982
+ "maxLength": 1000
2983
+ },
2984
+ "order": {
2985
+ "type": "integer",
2986
+ "description": "The order in which the field should be displayed to user in UI",
2987
+ "minimum": 0
2988
+ },
2989
+ "type": {
2990
+ "type": "string",
2991
+ "description": "The matching mechanism to use value as against response. Typically regex or simple string containment",
2992
+ "enum": [
2993
+ "regex",
2994
+ "contains"
2995
+ ]
2996
+ },
2997
+ "value": {
2998
+ "type": "string",
2999
+ "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."
3000
+ },
3001
+ "extract": {
3002
+ "type": "object",
3003
+ "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\")",
3004
+ "properties": {
3005
+ "xPath": {
3006
+ "type": "string",
3007
+ "description": "expect an HTML response, and to contain a certain xpath for eg. \"/html/body/div.a1/div.a2/span.a5\""
3008
+ },
3009
+ "jsonPath": {
3010
+ "type": "string",
3011
+ "description": "expect a JSON response, retrieve the item at this path using dot notation for e.g. 'email.addresses.0'"
3012
+ },
3013
+ "regex": {
3014
+ "type": "string",
3015
+ "description": "select a regex match from the response"
3016
+ },
3017
+ "hash": {
3018
+ "type": "string",
3019
+ "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.",
3020
+ "enum": [
3021
+ "oprf",
3022
+ "oprf-mpc",
3023
+ "oprf-raw"
3024
+ ]
3025
+ }
3026
+ }
3027
+ }
3028
+ }
3029
+ }
3030
+ }
3031
+ }
2159
3032
  },
2160
3033
  {
2161
3034
  "type": "object",
@@ -2187,7 +3060,8 @@ export const MCP_TOOLS = {
2187
3060
  "geoLocation": {
2188
3061
  "type": "string",
2189
3062
  "description": "Geographic location (e.g. ISO country code or {{DYNAMIC_GEO}} to use user's geo location) the verification should appear to originate from.",
2190
- "maxLength": 15
3063
+ "maxLength": 15,
3064
+ "default": "{{DYNAMIC_GEO}}"
2191
3065
  },
2192
3066
  "clientOptions": {
2193
3067
  "type": "object",
@@ -2202,7 +3076,7 @@ export const MCP_TOOLS = {
2202
3076
  "useProxy": {
2203
3077
  "type": "boolean",
2204
3078
  "description": "When true, network traffic from the portal client and attestation is routed through a proxy.",
2205
- "default": false
3079
+ "default": true
2206
3080
  },
2207
3081
  "userAgent": {
2208
3082
  "type": "string",
@@ -2272,14 +3146,10 @@ export const MCP_TOOLS = {
2272
3146
  }
2273
3147
  }
2274
3148
  },
2275
- "requiredParameters": {
3149
+ "requiredContext": {
2276
3150
  "type": "object",
2277
- "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.",
2278
- "maxProperties": 50,
2279
- "additionalProperties": {
2280
- "type": "string",
2281
- "maxLength": 500
2282
- }
3151
+ "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.",
3152
+ "additionalProperties": true
2283
3153
  },
2284
3154
  "notes": {
2285
3155
  "type": "string",