@reclaimprotocol/agent 0.1.14 → 0.1.17
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.
- package/lib/authoring/index.d.ts +1 -1
- package/lib/authoring/index.js +1 -1
- package/lib/authoring/util.js +3 -0
- package/lib/config/store.d.ts +7 -0
- package/lib/consts.d.ts +8 -0
- package/lib/consts.js +20 -0
- package/lib/index.js +1 -1
- package/lib/mcp/api/operations.gen.d.ts +8 -16
- package/lib/mcp/api/operations.gen.js +428 -479
- package/lib/mcp/remap_errors.js +7 -14
- package/lib/mcp/start.js +10 -3
- package/lib/mcp/tools/agent/proof.js +3 -3
- package/lib/mcp/tools/authenticate/authenticate.js +178 -93
- package/lib/mcp/tools/authenticate/eth-key.js +2 -3
- package/lib/mcp/tools/index.d.ts +1 -0
- package/lib/mcp/tools/index.js +1 -0
- package/lib/mcp/tools/mode/index.d.ts +1 -0
- package/lib/mcp/tools/mode/index.js +3 -0
- package/lib/mcp/tools/mode/mode.d.ts +16 -0
- package/lib/mcp/tools/mode/mode.js +49 -0
- package/lib/old/tools/publish.js +75 -4
- package/lib/provider/to-version.js +4 -0
- package/lib/tools/registry.d.ts +6 -13
- package/lib/tools/registry.js +29 -0
- package/package.json +5 -8
- package/scripts/prepend-shebang.js +1 -1
- package/skill/injection-api.md +98 -7
- package/src/authoring/index.ts +1 -0
- package/src/authoring/util.ts +3 -0
- package/src/cdp/launcher.ts +1 -1
- package/src/config/store.ts +8 -0
- package/src/consts.ts +24 -0
- package/src/index.ts +1 -1
- package/src/mcp/api/operations.gen.ts +430 -487
- package/src/mcp/remap_errors.ts +8 -15
- package/src/mcp/start.ts +11 -2
- package/src/mcp/tools/agent/proof.ts +3 -3
- package/src/mcp/tools/authenticate/authenticate.ts +238 -108
- package/src/mcp/tools/authenticate/eth-key.ts +7 -5
- package/src/mcp/tools/index.ts +1 -0
- package/src/mcp/tools/mode/index.ts +3 -0
- package/src/mcp/tools/mode/mode.ts +58 -0
- package/src/old/tools/publish.ts +78 -4
- package/src/proof/debug-response-dump.ts +1 -1
- package/src/proof/proof-core.ts +1 -1
- package/src/proof/zk-files.ts +2 -2
- package/src/provider/dom-xpath.ts +1 -1
- package/src/provider/draft.ts +3 -3
- package/src/provider/to-version.ts +4 -0
- package/src/tools/registry.ts +19 -0
- package/src/cli/args.ts +0 -20
- package/src/cli/commands.ts +0 -27
- package/src/cli.ts +0 -7
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { toZod } from "./to-zod.js";
|
|
7
7
|
export const MCP_TOOLS = {
|
|
8
8
|
"AddOrgMember": {
|
|
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`
|
|
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 invite email with an accept link is dispatched. The new row is returned with `status: PENDING`; it flips to `ACTIVE` only when the invitee explicitly accepts via `POST /orgs/{orgId}/invite`. `PERSONAL` organizations reject this call (409).",
|
|
10
10
|
inputSchema: toZod({
|
|
11
11
|
"type": "object",
|
|
12
12
|
"properties": {
|
|
@@ -249,30 +249,6 @@ export const MCP_TOOLS = {
|
|
|
249
249
|
"additionalProperties": false
|
|
250
250
|
}),
|
|
251
251
|
},
|
|
252
|
-
"CreateAttachSession": {
|
|
253
|
-
description: "Open a device-pairing session to authorize a device\n\nOpens a short-lived (15-minute) device-pairing session. The CLI / MCP needs a bearer token to make authenticated API calls: the human opens `attachUrl`, signs in, and taps \"Authorize this device\". On confirmation the CLI receives a 2-day auth token via `GetAttachSession` polling. Linking a credential to an org is a separate step (`POST /credentials`) and is not part of pairing.",
|
|
254
|
-
inputSchema: toZod({
|
|
255
|
-
"type": "object",
|
|
256
|
-
"properties": {
|
|
257
|
-
"params": {
|
|
258
|
-
"type": "object",
|
|
259
|
-
"properties": {}
|
|
260
|
-
},
|
|
261
|
-
"query": {
|
|
262
|
-
"type": "object",
|
|
263
|
-
"properties": {}
|
|
264
|
-
},
|
|
265
|
-
"body": {
|
|
266
|
-
"type": "object"
|
|
267
|
-
}
|
|
268
|
-
},
|
|
269
|
-
"required": [
|
|
270
|
-
"params",
|
|
271
|
-
"query"
|
|
272
|
-
],
|
|
273
|
-
"additionalProperties": false
|
|
274
|
-
}),
|
|
275
|
-
},
|
|
276
252
|
"CreateCallbackSubscription": {
|
|
277
253
|
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 ECIES-encrypted to the org's eth public key when its\n`canEncryptResult` is enabled (see `PUT /orgs/{orgId}/keypair`), else\ndelivered as plaintext.\n",
|
|
278
254
|
inputSchema: toZod({
|
|
@@ -351,26 +327,15 @@ export const MCP_TOOLS = {
|
|
|
351
327
|
"body": {
|
|
352
328
|
"type": "object",
|
|
353
329
|
"additionalProperties": false,
|
|
354
|
-
"description": "Body for `POST /orgs
|
|
330
|
+
"description": "Body for `POST /orgs` — just a name. Every org is created keyless, like auto-provisioned personal orgs; its Ethereum (secp256k1) key pair is published separately via `PUT /orgs/{orgId}/keypair`, which is also where `canEncryptResult` is set. Creation deliberately collects nothing else so it never blocks on generating and safeguarding a private key.",
|
|
355
331
|
"required": [
|
|
356
|
-
"name"
|
|
357
|
-
"publicKey"
|
|
332
|
+
"name"
|
|
358
333
|
],
|
|
359
334
|
"properties": {
|
|
360
335
|
"name": {
|
|
361
336
|
"type": "string",
|
|
362
337
|
"minLength": 1,
|
|
363
338
|
"maxLength": 200
|
|
364
|
-
},
|
|
365
|
-
"publicKey": {
|
|
366
|
-
"type": "string",
|
|
367
|
-
"description": "The org's eth public key, uncompressed hex (`0x04` + 128 hex) — the eth-native form wallets/ethers emit. The matching private key never leaves the consumer.",
|
|
368
|
-
"pattern": "^0x04[0-9a-fA-F]{128}$"
|
|
369
|
-
},
|
|
370
|
-
"canEncryptResult": {
|
|
371
|
-
"type": "boolean",
|
|
372
|
-
"description": "When true, terminal results are ECIES-encrypted to this key; when false (the default), they are delivered as plaintext.",
|
|
373
|
-
"default": false
|
|
374
339
|
}
|
|
375
340
|
}
|
|
376
341
|
}
|
|
@@ -668,8 +633,7 @@ export const MCP_TOOLS = {
|
|
|
668
633
|
},
|
|
669
634
|
"initialUrl": {
|
|
670
635
|
"type": "string",
|
|
671
|
-
"format": "uri"
|
|
672
|
-
"maxLength": 300
|
|
636
|
+
"format": "uri"
|
|
673
637
|
},
|
|
674
638
|
"requests": {
|
|
675
639
|
"type": "array",
|
|
@@ -827,172 +791,177 @@ export const MCP_TOOLS = {
|
|
|
827
791
|
"items": {
|
|
828
792
|
"type": "object",
|
|
829
793
|
"additionalProperties": false,
|
|
830
|
-
"description": "A template for selecting
|
|
831
|
-
"
|
|
832
|
-
|
|
794
|
+
"description": "A template for selecting requests. Same matcher shape as `RequestSelection`, plus template flags (`multiple`/`required`) and optional `templateParams` expansion.",
|
|
795
|
+
"required": [
|
|
796
|
+
"url",
|
|
797
|
+
"method",
|
|
798
|
+
"multiple",
|
|
799
|
+
"required"
|
|
800
|
+
],
|
|
801
|
+
"properties": {
|
|
802
|
+
"url": {
|
|
803
|
+
"type": "string",
|
|
804
|
+
"description": "The URL or generic path of the HTTP request."
|
|
805
|
+
},
|
|
806
|
+
"method": {
|
|
807
|
+
"type": "string",
|
|
808
|
+
"description": "The HTTP method used for the request.",
|
|
809
|
+
"enum": [
|
|
810
|
+
"GET",
|
|
811
|
+
"POST",
|
|
812
|
+
"PUT",
|
|
813
|
+
"PATCH",
|
|
814
|
+
"DELETE"
|
|
815
|
+
]
|
|
816
|
+
},
|
|
817
|
+
"requestBodyTemplate": {
|
|
818
|
+
"type": "string",
|
|
819
|
+
"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>.*)`.",
|
|
820
|
+
"maxLength": 100000
|
|
821
|
+
},
|
|
822
|
+
"credentials": {
|
|
823
|
+
"type": "string",
|
|
824
|
+
"description": "Mirrors the Fetch API `RequestCredentials` value used when issuing the request — controls whether cookies and auth headers are sent.",
|
|
825
|
+
"enum": [
|
|
826
|
+
"omit",
|
|
827
|
+
"same-origin",
|
|
828
|
+
"include"
|
|
829
|
+
]
|
|
830
|
+
},
|
|
831
|
+
"writeRedactionMode": {
|
|
832
|
+
"type": "string",
|
|
833
|
+
"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.",
|
|
834
|
+
"enum": [
|
|
835
|
+
"zk",
|
|
836
|
+
"key-update"
|
|
837
|
+
]
|
|
838
|
+
},
|
|
839
|
+
"additionalClientOptions": {
|
|
833
840
|
"type": "object",
|
|
834
841
|
"additionalProperties": false,
|
|
835
|
-
"description": "
|
|
836
|
-
"required": [
|
|
837
|
-
"url",
|
|
838
|
-
"method"
|
|
839
|
-
],
|
|
842
|
+
"description": "Apply TLS configuration when creating the tunnel to the attestor.",
|
|
840
843
|
"properties": {
|
|
841
|
-
"
|
|
842
|
-
"type": "string",
|
|
843
|
-
"description": "The URL or generic path of the HTTP request."
|
|
844
|
-
},
|
|
845
|
-
"method": {
|
|
846
|
-
"type": "string",
|
|
847
|
-
"description": "The HTTP method used for the request.",
|
|
848
|
-
"enum": [
|
|
849
|
-
"GET",
|
|
850
|
-
"POST",
|
|
851
|
-
"PUT",
|
|
852
|
-
"PATCH",
|
|
853
|
-
"DELETE"
|
|
854
|
-
]
|
|
855
|
-
},
|
|
856
|
-
"requestBodyTemplate": {
|
|
857
|
-
"type": "string",
|
|
858
|
-
"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>.*)`.",
|
|
859
|
-
"maxLength": 100000
|
|
860
|
-
},
|
|
861
|
-
"credentials": {
|
|
862
|
-
"type": "string",
|
|
863
|
-
"description": "Mirrors the Fetch API `RequestCredentials` value used when issuing the request — controls whether cookies and auth headers are sent.",
|
|
864
|
-
"enum": [
|
|
865
|
-
"omit",
|
|
866
|
-
"same-origin",
|
|
867
|
-
"include"
|
|
868
|
-
]
|
|
869
|
-
},
|
|
870
|
-
"writeRedactionMode": {
|
|
871
|
-
"type": "string",
|
|
872
|
-
"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.",
|
|
873
|
-
"enum": [
|
|
874
|
-
"zk",
|
|
875
|
-
"key-update"
|
|
876
|
-
]
|
|
877
|
-
},
|
|
878
|
-
"additionalClientOptions": {
|
|
879
|
-
"type": "object",
|
|
880
|
-
"additionalProperties": false,
|
|
881
|
-
"description": "Apply TLS configuration when creating the tunnel to the attestor.",
|
|
882
|
-
"properties": {
|
|
883
|
-
"supportedProtocolVersions": {
|
|
884
|
-
"type": "array",
|
|
885
|
-
"description": "TLS protocol versions the client is allowed to negotiate.",
|
|
886
|
-
"minItems": 1,
|
|
887
|
-
"uniqueItems": true,
|
|
888
|
-
"items": {
|
|
889
|
-
"type": "string",
|
|
890
|
-
"enum": [
|
|
891
|
-
"TLS1_2",
|
|
892
|
-
"TLS1_3"
|
|
893
|
-
]
|
|
894
|
-
}
|
|
895
|
-
}
|
|
896
|
-
}
|
|
897
|
-
},
|
|
898
|
-
"responseMatches": {
|
|
844
|
+
"supportedProtocolVersions": {
|
|
899
845
|
"type": "array",
|
|
900
|
-
"description": "
|
|
846
|
+
"description": "TLS protocol versions the client is allowed to negotiate.",
|
|
901
847
|
"minItems": 1,
|
|
848
|
+
"uniqueItems": true,
|
|
902
849
|
"items": {
|
|
903
|
-
"type": "
|
|
904
|
-
"
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
"value"
|
|
909
|
-
],
|
|
910
|
-
"properties": {
|
|
911
|
-
"isOptional": {
|
|
912
|
-
"type": "boolean",
|
|
913
|
-
"description": "If true, the match condition is optional and won't fail if absent",
|
|
914
|
-
"default": false
|
|
915
|
-
},
|
|
916
|
-
"description": {
|
|
917
|
-
"type": "string",
|
|
918
|
-
"description": "The description of the field that is extracted using this match rule",
|
|
919
|
-
"minLength": 1,
|
|
920
|
-
"maxLength": 1000
|
|
921
|
-
},
|
|
922
|
-
"order": {
|
|
923
|
-
"type": "integer",
|
|
924
|
-
"description": "The order in which the field should be displayed to user in UI",
|
|
925
|
-
"minimum": 0
|
|
926
|
-
},
|
|
927
|
-
"type": {
|
|
928
|
-
"type": "string",
|
|
929
|
-
"description": "The matching mechanism to use value as against response. Typically regex or simple string containment",
|
|
930
|
-
"enum": [
|
|
931
|
-
"regex",
|
|
932
|
-
"contains"
|
|
933
|
-
]
|
|
934
|
-
},
|
|
935
|
-
"value": {
|
|
936
|
-
"type": "string",
|
|
937
|
-
"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."
|
|
938
|
-
}
|
|
939
|
-
}
|
|
850
|
+
"type": "string",
|
|
851
|
+
"enum": [
|
|
852
|
+
"TLS1_2",
|
|
853
|
+
"TLS1_3"
|
|
854
|
+
]
|
|
940
855
|
}
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
},
|
|
859
|
+
"responseMatches": {
|
|
860
|
+
"type": "array",
|
|
861
|
+
"description": "Conditions the (redacted) response must satisfy for the proof to be valid. Each runs against the union of the portions revealed by `responseRedactions` (or the whole response when there are none). Mirrors attestor-core `responseMatches`.",
|
|
862
|
+
"minItems": 1,
|
|
863
|
+
"items": {
|
|
864
|
+
"type": "object",
|
|
865
|
+
"additionalProperties": false,
|
|
866
|
+
"description": "Specifies a rule to match against a string in response to validate proof content.",
|
|
867
|
+
"required": [
|
|
868
|
+
"type",
|
|
869
|
+
"value"
|
|
870
|
+
],
|
|
871
|
+
"properties": {
|
|
872
|
+
"isOptional": {
|
|
873
|
+
"type": "boolean",
|
|
874
|
+
"description": "If true, the match condition is optional and won't fail if absent",
|
|
875
|
+
"default": false
|
|
876
|
+
},
|
|
877
|
+
"description": {
|
|
878
|
+
"type": "string",
|
|
879
|
+
"description": "The description of the field that is extracted using this match rule",
|
|
880
|
+
"minLength": 1,
|
|
881
|
+
"maxLength": 1000
|
|
882
|
+
},
|
|
883
|
+
"order": {
|
|
884
|
+
"type": "integer",
|
|
885
|
+
"description": "The order in which the field should be displayed to user in UI",
|
|
886
|
+
"minimum": 0
|
|
887
|
+
},
|
|
888
|
+
"type": {
|
|
889
|
+
"type": "string",
|
|
890
|
+
"description": "The matching mechanism to use value as against response. Typically regex or simple string containment",
|
|
891
|
+
"enum": [
|
|
892
|
+
"regex",
|
|
893
|
+
"contains"
|
|
894
|
+
]
|
|
895
|
+
},
|
|
896
|
+
"value": {
|
|
897
|
+
"type": "string",
|
|
898
|
+
"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."
|
|
972
899
|
}
|
|
973
900
|
}
|
|
974
901
|
}
|
|
975
902
|
},
|
|
976
|
-
{
|
|
977
|
-
"type": "
|
|
978
|
-
"
|
|
979
|
-
|
|
980
|
-
"
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
"
|
|
984
|
-
"
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
903
|
+
"responseRedactions": {
|
|
904
|
+
"type": "array",
|
|
905
|
+
"description": "Portions to select/reveal from the response, applied in order (xPath => jsonPath => regex). Done client-side; only the selected portions (plus the first response line) are sent to the attestor. An independent ordered list — NOT paired 1:1 with `responseMatches`. Mirrors attestor-core `responseRedactions`.",
|
|
906
|
+
"items": {
|
|
907
|
+
"type": "object",
|
|
908
|
+
"additionalProperties": false,
|
|
909
|
+
"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\")",
|
|
910
|
+
"properties": {
|
|
911
|
+
"xPath": {
|
|
912
|
+
"type": "string",
|
|
913
|
+
"description": "expect an HTML response, and to contain a certain xpath for eg. \"/html/body/div.a1/div.a2/span.a5\""
|
|
914
|
+
},
|
|
915
|
+
"jsonPath": {
|
|
916
|
+
"type": "string",
|
|
917
|
+
"description": "expect a JSON response, retrieve the item at this path using dot notation for e.g. 'email.addresses.0'"
|
|
918
|
+
},
|
|
919
|
+
"regex": {
|
|
920
|
+
"type": "string",
|
|
921
|
+
"description": "select a regex match from the response"
|
|
922
|
+
},
|
|
923
|
+
"hash": {
|
|
924
|
+
"type": "string",
|
|
925
|
+
"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.",
|
|
926
|
+
"enum": [
|
|
927
|
+
"oprf",
|
|
928
|
+
"oprf-mpc",
|
|
929
|
+
"oprf-raw"
|
|
930
|
+
]
|
|
931
|
+
}
|
|
992
932
|
}
|
|
993
933
|
}
|
|
934
|
+
},
|
|
935
|
+
"multiple": {
|
|
936
|
+
"type": "boolean",
|
|
937
|
+
"description": "If true, the template is allowed for multiple requests. Useful for requests like paginated API calls.",
|
|
938
|
+
"default": true
|
|
939
|
+
},
|
|
940
|
+
"required": {
|
|
941
|
+
"type": "boolean",
|
|
942
|
+
"description": "If true, a request is required to match with this template. If not requests matches this template in proof, then validation fails.",
|
|
943
|
+
"default": true
|
|
944
|
+
},
|
|
945
|
+
"templateParams": {
|
|
946
|
+
"type": "array",
|
|
947
|
+
"description": "Names of `${param}` placeholders used in this template's `responseMatches` / `responseRedactions`, substituted at verification time from array-valued extracted parameters (each name must resolve to an array of values; all named arrays must have the same length). Absent or empty means the template is used as-is with no expansion.",
|
|
948
|
+
"maxItems": 50,
|
|
949
|
+
"items": {
|
|
950
|
+
"type": "string",
|
|
951
|
+
"minLength": 1,
|
|
952
|
+
"maxLength": 100
|
|
953
|
+
}
|
|
954
|
+
},
|
|
955
|
+
"templateParamsMode": {
|
|
956
|
+
"type": "string",
|
|
957
|
+
"description": "How array values of `templateParams` expand the template: `separate` (default) emits one expanded request — its own claim — per value; `merge` emits a single request whose `responseMatches`/`responseRedactions` contain all substituted entries, proven by one claim.",
|
|
958
|
+
"enum": [
|
|
959
|
+
"separate",
|
|
960
|
+
"merge"
|
|
961
|
+
],
|
|
962
|
+
"default": "separate"
|
|
994
963
|
}
|
|
995
|
-
|
|
964
|
+
}
|
|
996
965
|
}
|
|
997
966
|
},
|
|
998
967
|
"webSettings": {
|
|
@@ -1079,6 +1048,12 @@ export const MCP_TOOLS = {
|
|
|
1079
1048
|
}
|
|
1080
1049
|
}
|
|
1081
1050
|
}
|
|
1051
|
+
},
|
|
1052
|
+
"extension": {
|
|
1053
|
+
"type": "object",
|
|
1054
|
+
"description": "Free-form key-value configuration for the browser-extension verification client. Keys and value shapes are defined by the extension client; values may be any JSON. Absent by default.",
|
|
1055
|
+
"maxProperties": 100,
|
|
1056
|
+
"additionalProperties": true
|
|
1082
1057
|
}
|
|
1083
1058
|
}
|
|
1084
1059
|
},
|
|
@@ -1129,8 +1104,7 @@ export const MCP_TOOLS = {
|
|
|
1129
1104
|
"description": "Body for `POST /verifications/sessions`. Authenticated by the consumer's `OrgToken`. Carries no callback URLs — they come from the org's callback subscriptions. The one shared `context` is validated against every provider's `requiredContext`.",
|
|
1130
1105
|
"required": [
|
|
1131
1106
|
"providers",
|
|
1132
|
-
"context"
|
|
1133
|
-
"verificationClientUrl"
|
|
1107
|
+
"context"
|
|
1134
1108
|
],
|
|
1135
1109
|
"properties": {
|
|
1136
1110
|
"providers": {
|
|
@@ -1164,8 +1138,13 @@ export const MCP_TOOLS = {
|
|
|
1164
1138
|
},
|
|
1165
1139
|
"verificationClientUrl": {
|
|
1166
1140
|
"type": "string",
|
|
1167
|
-
"description": "Must
|
|
1168
|
-
"maxLength": 2000
|
|
1141
|
+
"description": "Optional. Must exactly equal the base URL of a registered verification client (see the `verification_clients` registry / `/admin/verification-clients`). Omit to use the default (`builder`) client. The Builder attaches the session id — into a `{sessionId}` placeholder if the registered base has one, otherwise as a `?sessionId=…` query parameter — and returns the ready-to-share result as `verificationUrl`. A URL that is not a registered client's base is rejected with 400.",
|
|
1142
|
+
"maxLength": 2000,
|
|
1143
|
+
"pattern": "^https?://"
|
|
1144
|
+
},
|
|
1145
|
+
"preferAiAgent": {
|
|
1146
|
+
"type": "boolean",
|
|
1147
|
+
"description": "Optional. Whether the Verification Client is preferred (allowed) to run this session's providers with an LLM/AI agent instead of the structured recipe. Omit to default per provider from its `verificationType` (`llm` → agent preferred, `structured` → not). The recipe endpoint exposes the effective per-provider value as `preferAiAgent`. A preference, not a hard gate — clients without agent support run the structured recipe regardless."
|
|
1169
1148
|
}
|
|
1170
1149
|
}
|
|
1171
1150
|
}
|
|
@@ -1504,10 +1483,12 @@ export const MCP_TOOLS = {
|
|
|
1504
1483
|
},
|
|
1505
1484
|
"mode": {
|
|
1506
1485
|
"type": "string",
|
|
1486
|
+
"description": "How the resolver picks providers. `combine` (default) minimizes to the fewest providers (set-cover); `ai` is a forward-compat alias that currently resolves like combine.",
|
|
1507
1487
|
"enum": [
|
|
1508
1488
|
"combine",
|
|
1509
1489
|
"ai"
|
|
1510
|
-
]
|
|
1490
|
+
],
|
|
1491
|
+
"default": "combine"
|
|
1511
1492
|
}
|
|
1512
1493
|
},
|
|
1513
1494
|
"required": [
|
|
@@ -1527,42 +1508,6 @@ export const MCP_TOOLS = {
|
|
|
1527
1508
|
"additionalProperties": false
|
|
1528
1509
|
}),
|
|
1529
1510
|
},
|
|
1530
|
-
"GetAttachSession": {
|
|
1531
|
-
description: "Poll a pairing session\n\nAnonymous poll endpoint used by the CLI / MCP while it waits for the human to complete the dashboard step. Once `status` is `LINKED`, the response includes a `token` (2-day bearer token) the CLI / MCP can use for authenticated API calls. Expired or unknown codes return `404`.",
|
|
1532
|
-
inputSchema: toZod({
|
|
1533
|
-
"type": "object",
|
|
1534
|
-
"properties": {
|
|
1535
|
-
"params": {
|
|
1536
|
-
"type": "object",
|
|
1537
|
-
"properties": {
|
|
1538
|
-
"code": {
|
|
1539
|
-
"type": "string",
|
|
1540
|
-
"description": "Five-character device-pairing code. The CLI / MCP shows this to the user, who types it into the dashboard's `/attach` page to confirm the link. Always uppercase alphanumeric; chars `O`/`0` and `I`/`1` are excluded to avoid ambiguity when copied from a terminal.",
|
|
1541
|
-
"pattern": "^[A-HJ-NP-Z2-9]{5}$",
|
|
1542
|
-
"minLength": 5,
|
|
1543
|
-
"maxLength": 5
|
|
1544
|
-
}
|
|
1545
|
-
},
|
|
1546
|
-
"required": [
|
|
1547
|
-
"code"
|
|
1548
|
-
],
|
|
1549
|
-
"additionalProperties": false
|
|
1550
|
-
},
|
|
1551
|
-
"query": {
|
|
1552
|
-
"type": "object",
|
|
1553
|
-
"properties": {}
|
|
1554
|
-
},
|
|
1555
|
-
"body": {
|
|
1556
|
-
"type": "object"
|
|
1557
|
-
}
|
|
1558
|
-
},
|
|
1559
|
-
"required": [
|
|
1560
|
-
"params",
|
|
1561
|
-
"query"
|
|
1562
|
-
],
|
|
1563
|
-
"additionalProperties": false
|
|
1564
|
-
}),
|
|
1565
|
-
},
|
|
1566
1511
|
"GetMe": {
|
|
1567
1512
|
description: "Get the authenticated user",
|
|
1568
1513
|
inputSchema: toZod({
|
|
@@ -1618,6 +1563,15 @@ export const MCP_TOOLS = {
|
|
|
1618
1563
|
"sessions",
|
|
1619
1564
|
"billing"
|
|
1620
1565
|
]
|
|
1566
|
+
},
|
|
1567
|
+
"billing": {
|
|
1568
|
+
"type": "string",
|
|
1569
|
+
"enum": [
|
|
1570
|
+
"success",
|
|
1571
|
+
"cancelled",
|
|
1572
|
+
"changed",
|
|
1573
|
+
"credits"
|
|
1574
|
+
]
|
|
1621
1575
|
}
|
|
1622
1576
|
}
|
|
1623
1577
|
},
|
|
@@ -1698,54 +1652,21 @@ export const MCP_TOOLS = {
|
|
|
1698
1652
|
"additionalProperties": false
|
|
1699
1653
|
}),
|
|
1700
1654
|
},
|
|
1701
|
-
"
|
|
1702
|
-
description: "Get the
|
|
1655
|
+
"GetProvider": {
|
|
1656
|
+
description: "Get a provider\n\nFetch a single Reclaim provider 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 provider record.\n\n**Canonical URL.** For SEO and stable sharing, the canonical\nHTML URL for a provider 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",
|
|
1703
1657
|
inputSchema: toZod({
|
|
1704
1658
|
"type": "object",
|
|
1705
1659
|
"properties": {
|
|
1706
1660
|
"params": {
|
|
1707
1661
|
"type": "object",
|
|
1708
1662
|
"properties": {
|
|
1709
|
-
"
|
|
1663
|
+
"providerId": {
|
|
1710
1664
|
"type": "string",
|
|
1711
1665
|
"format": "uuid"
|
|
1712
1666
|
}
|
|
1713
1667
|
},
|
|
1714
1668
|
"required": [
|
|
1715
|
-
"
|
|
1716
|
-
],
|
|
1717
|
-
"additionalProperties": false
|
|
1718
|
-
},
|
|
1719
|
-
"query": {
|
|
1720
|
-
"type": "object",
|
|
1721
|
-
"properties": {}
|
|
1722
|
-
},
|
|
1723
|
-
"body": {
|
|
1724
|
-
"type": "object"
|
|
1725
|
-
}
|
|
1726
|
-
},
|
|
1727
|
-
"required": [
|
|
1728
|
-
"params",
|
|
1729
|
-
"query"
|
|
1730
|
-
],
|
|
1731
|
-
"additionalProperties": false
|
|
1732
|
-
}),
|
|
1733
|
-
},
|
|
1734
|
-
"GetProvider": {
|
|
1735
|
-
description: "Get a provider\n\nFetch a single Reclaim provider 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 provider record.\n\n**Canonical URL.** For SEO and stable sharing, the canonical\nHTML URL for a provider 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",
|
|
1736
|
-
inputSchema: toZod({
|
|
1737
|
-
"type": "object",
|
|
1738
|
-
"properties": {
|
|
1739
|
-
"params": {
|
|
1740
|
-
"type": "object",
|
|
1741
|
-
"properties": {
|
|
1742
|
-
"providerId": {
|
|
1743
|
-
"type": "string",
|
|
1744
|
-
"format": "uuid"
|
|
1745
|
-
}
|
|
1746
|
-
},
|
|
1747
|
-
"required": [
|
|
1748
|
-
"providerId"
|
|
1669
|
+
"providerId"
|
|
1749
1670
|
],
|
|
1750
1671
|
"additionalProperties": false
|
|
1751
1672
|
},
|
|
@@ -1804,7 +1725,7 @@ export const MCP_TOOLS = {
|
|
|
1804
1725
|
}),
|
|
1805
1726
|
},
|
|
1806
1727
|
"GetUser": {
|
|
1807
|
-
description: "Get a user's profile\n\nReturns a user record. Visible to
|
|
1728
|
+
description: "Get a user's profile\n\nReturns a user record. Visible to the user themselves, any member of an organization the subject also belongs to, and staff.",
|
|
1808
1729
|
inputSchema: toZod({
|
|
1809
1730
|
"type": "object",
|
|
1810
1731
|
"properties": {
|
|
@@ -1871,7 +1792,7 @@ export const MCP_TOOLS = {
|
|
|
1871
1792
|
}),
|
|
1872
1793
|
},
|
|
1873
1794
|
"IssueOrgToken": {
|
|
1874
|
-
description: "Issue
|
|
1795
|
+
description: "Issue a new organization API key\n\nIssues a fresh per-organization API key (`rorg_…`). The caller must be an active **OWNER** of the organization. An org may hold several keys; issuing a new one does **not** invalidate existing keys (revoke those explicitly). The plaintext key is returned **only once** in this response (the server stores only its HMAC); treat it like a password.",
|
|
1875
1796
|
inputSchema: toZod({
|
|
1876
1797
|
"type": "object",
|
|
1877
1798
|
"properties": {
|
|
@@ -2013,6 +1934,39 @@ export const MCP_TOOLS = {
|
|
|
2013
1934
|
"additionalProperties": false
|
|
2014
1935
|
}),
|
|
2015
1936
|
},
|
|
1937
|
+
"ListOrgTokens": {
|
|
1938
|
+
description: "List the organization's API keys\n\nLists metadata for every API key the organization holds — id, last four characters, when issued, and when last used — never the keys themselves. The caller must be an active **OWNER** of the organization.",
|
|
1939
|
+
inputSchema: toZod({
|
|
1940
|
+
"type": "object",
|
|
1941
|
+
"properties": {
|
|
1942
|
+
"params": {
|
|
1943
|
+
"type": "object",
|
|
1944
|
+
"properties": {
|
|
1945
|
+
"orgId": {
|
|
1946
|
+
"type": "string",
|
|
1947
|
+
"format": "uuid"
|
|
1948
|
+
}
|
|
1949
|
+
},
|
|
1950
|
+
"required": [
|
|
1951
|
+
"orgId"
|
|
1952
|
+
],
|
|
1953
|
+
"additionalProperties": false
|
|
1954
|
+
},
|
|
1955
|
+
"query": {
|
|
1956
|
+
"type": "object",
|
|
1957
|
+
"properties": {}
|
|
1958
|
+
},
|
|
1959
|
+
"body": {
|
|
1960
|
+
"type": "object"
|
|
1961
|
+
}
|
|
1962
|
+
},
|
|
1963
|
+
"required": [
|
|
1964
|
+
"params",
|
|
1965
|
+
"query"
|
|
1966
|
+
],
|
|
1967
|
+
"additionalProperties": false
|
|
1968
|
+
}),
|
|
1969
|
+
},
|
|
2016
1970
|
"ListOrgVerificationSessions": {
|
|
2017
1971
|
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.",
|
|
2018
1972
|
inputSchema: toZod({
|
|
@@ -2401,6 +2355,44 @@ export const MCP_TOOLS = {
|
|
|
2401
2355
|
"additionalProperties": false
|
|
2402
2356
|
}),
|
|
2403
2357
|
},
|
|
2358
|
+
"RevokeOrgToken": {
|
|
2359
|
+
description: "Revoke one of the organization's API keys\n\nRevokes a single API key by id (leaving the org's other keys intact). The caller must be an active **OWNER** of the organization. The key stops authenticating immediately.",
|
|
2360
|
+
inputSchema: toZod({
|
|
2361
|
+
"type": "object",
|
|
2362
|
+
"properties": {
|
|
2363
|
+
"params": {
|
|
2364
|
+
"type": "object",
|
|
2365
|
+
"properties": {
|
|
2366
|
+
"orgId": {
|
|
2367
|
+
"type": "string",
|
|
2368
|
+
"format": "uuid"
|
|
2369
|
+
},
|
|
2370
|
+
"tokenId": {
|
|
2371
|
+
"type": "string",
|
|
2372
|
+
"format": "uuid"
|
|
2373
|
+
}
|
|
2374
|
+
},
|
|
2375
|
+
"required": [
|
|
2376
|
+
"orgId",
|
|
2377
|
+
"tokenId"
|
|
2378
|
+
],
|
|
2379
|
+
"additionalProperties": false
|
|
2380
|
+
},
|
|
2381
|
+
"query": {
|
|
2382
|
+
"type": "object",
|
|
2383
|
+
"properties": {}
|
|
2384
|
+
},
|
|
2385
|
+
"body": {
|
|
2386
|
+
"type": "object"
|
|
2387
|
+
}
|
|
2388
|
+
},
|
|
2389
|
+
"required": [
|
|
2390
|
+
"params",
|
|
2391
|
+
"query"
|
|
2392
|
+
],
|
|
2393
|
+
"additionalProperties": false
|
|
2394
|
+
}),
|
|
2395
|
+
},
|
|
2404
2396
|
"SetOrgKeypair": {
|
|
2405
2397
|
description: "Set (or rotate) the organization's encryption keypair\n\nUpserts the organization's single Ethereum (secp256k1) encryption keypair. The body carries the org's **eth public key** — as an uncompressed hex string (`0x04`+128 hex) or a secp256k1 public JWK (`{kty:'EC', crv:'secp256k1', x, y}`) — and `canEncryptResult`. The matching private key never leaves the consumer. Setting overwrites the single row (and creates it for a keyless org). When `canEncryptResult` is true, terminal results are delivered as an ECIES ciphertext encrypted to this key; otherwise plaintext. Authenticated by the org's `OrgToken` or a human `BearerAuth` session for an active member of the org.",
|
|
2406
2398
|
inputSchema: toZod({
|
|
@@ -2665,59 +2657,6 @@ export const MCP_TOOLS = {
|
|
|
2665
2657
|
"additionalProperties": false
|
|
2666
2658
|
}),
|
|
2667
2659
|
},
|
|
2668
|
-
"UpdateOrgBilling": {
|
|
2669
|
-
description: "Add or update billing details for an organization\n\nOwner only. Upserts the billing row. The first successful call flips every credential linked to this org from `SANDBOX` to `PRODUCTION` (see `Credential.mode`). Subsequent calls update the contact fields without affecting credential mode.",
|
|
2670
|
-
inputSchema: toZod({
|
|
2671
|
-
"type": "object",
|
|
2672
|
-
"properties": {
|
|
2673
|
-
"params": {
|
|
2674
|
-
"type": "object",
|
|
2675
|
-
"properties": {
|
|
2676
|
-
"orgId": {
|
|
2677
|
-
"type": "string",
|
|
2678
|
-
"format": "uuid"
|
|
2679
|
-
}
|
|
2680
|
-
},
|
|
2681
|
-
"required": [
|
|
2682
|
-
"orgId"
|
|
2683
|
-
],
|
|
2684
|
-
"additionalProperties": false
|
|
2685
|
-
},
|
|
2686
|
-
"query": {
|
|
2687
|
-
"type": "object",
|
|
2688
|
-
"properties": {}
|
|
2689
|
-
},
|
|
2690
|
-
"body": {
|
|
2691
|
-
"type": "object",
|
|
2692
|
-
"additionalProperties": false,
|
|
2693
|
-
"description": "Body for `PUT /orgs/{orgId}/billing`.",
|
|
2694
|
-
"required": [
|
|
2695
|
-
"contactEmail",
|
|
2696
|
-
"contactName"
|
|
2697
|
-
],
|
|
2698
|
-
"properties": {
|
|
2699
|
-
"contactEmail": {
|
|
2700
|
-
"type": "string",
|
|
2701
|
-
"format": "email",
|
|
2702
|
-
"minLength": 3,
|
|
2703
|
-
"maxLength": 320
|
|
2704
|
-
},
|
|
2705
|
-
"contactName": {
|
|
2706
|
-
"type": "string",
|
|
2707
|
-
"minLength": 1,
|
|
2708
|
-
"maxLength": 200
|
|
2709
|
-
}
|
|
2710
|
-
}
|
|
2711
|
-
}
|
|
2712
|
-
},
|
|
2713
|
-
"required": [
|
|
2714
|
-
"params",
|
|
2715
|
-
"query",
|
|
2716
|
-
"body"
|
|
2717
|
-
],
|
|
2718
|
-
"additionalProperties": false
|
|
2719
|
-
}),
|
|
2720
|
-
},
|
|
2721
2660
|
"UpdateProvider": {
|
|
2722
2661
|
description: "Update a provider\n\nUpdate a Reclaim provider's metadata. Partial PATCH — pass only fields you want to change. The caller must be an active member of the owning organization. To change the provider's recipe (initialUrl, requests, …) cut a new version via the dashboard. Use `seo` to control how the provider appears in search results and social shares; omit a subfield to keep the server default.\nCaller must be a member of the provider's owning organization. `id`, `orgId`, and `slug` are immutable. Supports optimistic concurrency via `If-Match`.",
|
|
2723
2662
|
inputSchema: toZod({
|
|
@@ -2898,8 +2837,7 @@ export const MCP_TOOLS = {
|
|
|
2898
2837
|
"properties": {
|
|
2899
2838
|
"initialUrl": {
|
|
2900
2839
|
"type": "string",
|
|
2901
|
-
"format": "uri"
|
|
2902
|
-
"maxLength": 300
|
|
2840
|
+
"format": "uri"
|
|
2903
2841
|
},
|
|
2904
2842
|
"verificationType": {
|
|
2905
2843
|
"type": "string",
|
|
@@ -3069,172 +3007,177 @@ export const MCP_TOOLS = {
|
|
|
3069
3007
|
"items": {
|
|
3070
3008
|
"type": "object",
|
|
3071
3009
|
"additionalProperties": false,
|
|
3072
|
-
"description": "A template for selecting
|
|
3073
|
-
"
|
|
3074
|
-
|
|
3010
|
+
"description": "A template for selecting requests. Same matcher shape as `RequestSelection`, plus template flags (`multiple`/`required`) and optional `templateParams` expansion.",
|
|
3011
|
+
"required": [
|
|
3012
|
+
"url",
|
|
3013
|
+
"method",
|
|
3014
|
+
"multiple",
|
|
3015
|
+
"required"
|
|
3016
|
+
],
|
|
3017
|
+
"properties": {
|
|
3018
|
+
"url": {
|
|
3019
|
+
"type": "string",
|
|
3020
|
+
"description": "The URL or generic path of the HTTP request."
|
|
3021
|
+
},
|
|
3022
|
+
"method": {
|
|
3023
|
+
"type": "string",
|
|
3024
|
+
"description": "The HTTP method used for the request.",
|
|
3025
|
+
"enum": [
|
|
3026
|
+
"GET",
|
|
3027
|
+
"POST",
|
|
3028
|
+
"PUT",
|
|
3029
|
+
"PATCH",
|
|
3030
|
+
"DELETE"
|
|
3031
|
+
]
|
|
3032
|
+
},
|
|
3033
|
+
"requestBodyTemplate": {
|
|
3034
|
+
"type": "string",
|
|
3035
|
+
"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>.*)`.",
|
|
3036
|
+
"maxLength": 100000
|
|
3037
|
+
},
|
|
3038
|
+
"credentials": {
|
|
3039
|
+
"type": "string",
|
|
3040
|
+
"description": "Mirrors the Fetch API `RequestCredentials` value used when issuing the request — controls whether cookies and auth headers are sent.",
|
|
3041
|
+
"enum": [
|
|
3042
|
+
"omit",
|
|
3043
|
+
"same-origin",
|
|
3044
|
+
"include"
|
|
3045
|
+
]
|
|
3046
|
+
},
|
|
3047
|
+
"writeRedactionMode": {
|
|
3048
|
+
"type": "string",
|
|
3049
|
+
"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.",
|
|
3050
|
+
"enum": [
|
|
3051
|
+
"zk",
|
|
3052
|
+
"key-update"
|
|
3053
|
+
]
|
|
3054
|
+
},
|
|
3055
|
+
"additionalClientOptions": {
|
|
3075
3056
|
"type": "object",
|
|
3076
3057
|
"additionalProperties": false,
|
|
3077
|
-
"description": "
|
|
3078
|
-
"required": [
|
|
3079
|
-
"url",
|
|
3080
|
-
"method"
|
|
3081
|
-
],
|
|
3058
|
+
"description": "Apply TLS configuration when creating the tunnel to the attestor.",
|
|
3082
3059
|
"properties": {
|
|
3083
|
-
"
|
|
3084
|
-
"type": "string",
|
|
3085
|
-
"description": "The URL or generic path of the HTTP request."
|
|
3086
|
-
},
|
|
3087
|
-
"method": {
|
|
3088
|
-
"type": "string",
|
|
3089
|
-
"description": "The HTTP method used for the request.",
|
|
3090
|
-
"enum": [
|
|
3091
|
-
"GET",
|
|
3092
|
-
"POST",
|
|
3093
|
-
"PUT",
|
|
3094
|
-
"PATCH",
|
|
3095
|
-
"DELETE"
|
|
3096
|
-
]
|
|
3097
|
-
},
|
|
3098
|
-
"requestBodyTemplate": {
|
|
3099
|
-
"type": "string",
|
|
3100
|
-
"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>.*)`.",
|
|
3101
|
-
"maxLength": 100000
|
|
3102
|
-
},
|
|
3103
|
-
"credentials": {
|
|
3104
|
-
"type": "string",
|
|
3105
|
-
"description": "Mirrors the Fetch API `RequestCredentials` value used when issuing the request — controls whether cookies and auth headers are sent.",
|
|
3106
|
-
"enum": [
|
|
3107
|
-
"omit",
|
|
3108
|
-
"same-origin",
|
|
3109
|
-
"include"
|
|
3110
|
-
]
|
|
3111
|
-
},
|
|
3112
|
-
"writeRedactionMode": {
|
|
3113
|
-
"type": "string",
|
|
3114
|
-
"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.",
|
|
3115
|
-
"enum": [
|
|
3116
|
-
"zk",
|
|
3117
|
-
"key-update"
|
|
3118
|
-
]
|
|
3119
|
-
},
|
|
3120
|
-
"additionalClientOptions": {
|
|
3121
|
-
"type": "object",
|
|
3122
|
-
"additionalProperties": false,
|
|
3123
|
-
"description": "Apply TLS configuration when creating the tunnel to the attestor.",
|
|
3124
|
-
"properties": {
|
|
3125
|
-
"supportedProtocolVersions": {
|
|
3126
|
-
"type": "array",
|
|
3127
|
-
"description": "TLS protocol versions the client is allowed to negotiate.",
|
|
3128
|
-
"minItems": 1,
|
|
3129
|
-
"uniqueItems": true,
|
|
3130
|
-
"items": {
|
|
3131
|
-
"type": "string",
|
|
3132
|
-
"enum": [
|
|
3133
|
-
"TLS1_2",
|
|
3134
|
-
"TLS1_3"
|
|
3135
|
-
]
|
|
3136
|
-
}
|
|
3137
|
-
}
|
|
3138
|
-
}
|
|
3139
|
-
},
|
|
3140
|
-
"responseMatches": {
|
|
3060
|
+
"supportedProtocolVersions": {
|
|
3141
3061
|
"type": "array",
|
|
3142
|
-
"description": "
|
|
3062
|
+
"description": "TLS protocol versions the client is allowed to negotiate.",
|
|
3143
3063
|
"minItems": 1,
|
|
3064
|
+
"uniqueItems": true,
|
|
3144
3065
|
"items": {
|
|
3145
|
-
"type": "
|
|
3146
|
-
"
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
"value"
|
|
3151
|
-
],
|
|
3152
|
-
"properties": {
|
|
3153
|
-
"isOptional": {
|
|
3154
|
-
"type": "boolean",
|
|
3155
|
-
"description": "If true, the match condition is optional and won't fail if absent",
|
|
3156
|
-
"default": false
|
|
3157
|
-
},
|
|
3158
|
-
"description": {
|
|
3159
|
-
"type": "string",
|
|
3160
|
-
"description": "The description of the field that is extracted using this match rule",
|
|
3161
|
-
"minLength": 1,
|
|
3162
|
-
"maxLength": 1000
|
|
3163
|
-
},
|
|
3164
|
-
"order": {
|
|
3165
|
-
"type": "integer",
|
|
3166
|
-
"description": "The order in which the field should be displayed to user in UI",
|
|
3167
|
-
"minimum": 0
|
|
3168
|
-
},
|
|
3169
|
-
"type": {
|
|
3170
|
-
"type": "string",
|
|
3171
|
-
"description": "The matching mechanism to use value as against response. Typically regex or simple string containment",
|
|
3172
|
-
"enum": [
|
|
3173
|
-
"regex",
|
|
3174
|
-
"contains"
|
|
3175
|
-
]
|
|
3176
|
-
},
|
|
3177
|
-
"value": {
|
|
3178
|
-
"type": "string",
|
|
3179
|
-
"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."
|
|
3180
|
-
}
|
|
3181
|
-
}
|
|
3066
|
+
"type": "string",
|
|
3067
|
+
"enum": [
|
|
3068
|
+
"TLS1_2",
|
|
3069
|
+
"TLS1_3"
|
|
3070
|
+
]
|
|
3182
3071
|
}
|
|
3183
|
-
}
|
|
3184
|
-
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
|
|
3209
|
-
|
|
3210
|
-
|
|
3211
|
-
|
|
3212
|
-
|
|
3213
|
-
|
|
3072
|
+
}
|
|
3073
|
+
}
|
|
3074
|
+
},
|
|
3075
|
+
"responseMatches": {
|
|
3076
|
+
"type": "array",
|
|
3077
|
+
"description": "Conditions the (redacted) response must satisfy for the proof to be valid. Each runs against the union of the portions revealed by `responseRedactions` (or the whole response when there are none). Mirrors attestor-core `responseMatches`.",
|
|
3078
|
+
"minItems": 1,
|
|
3079
|
+
"items": {
|
|
3080
|
+
"type": "object",
|
|
3081
|
+
"additionalProperties": false,
|
|
3082
|
+
"description": "Specifies a rule to match against a string in response to validate proof content.",
|
|
3083
|
+
"required": [
|
|
3084
|
+
"type",
|
|
3085
|
+
"value"
|
|
3086
|
+
],
|
|
3087
|
+
"properties": {
|
|
3088
|
+
"isOptional": {
|
|
3089
|
+
"type": "boolean",
|
|
3090
|
+
"description": "If true, the match condition is optional and won't fail if absent",
|
|
3091
|
+
"default": false
|
|
3092
|
+
},
|
|
3093
|
+
"description": {
|
|
3094
|
+
"type": "string",
|
|
3095
|
+
"description": "The description of the field that is extracted using this match rule",
|
|
3096
|
+
"minLength": 1,
|
|
3097
|
+
"maxLength": 1000
|
|
3098
|
+
},
|
|
3099
|
+
"order": {
|
|
3100
|
+
"type": "integer",
|
|
3101
|
+
"description": "The order in which the field should be displayed to user in UI",
|
|
3102
|
+
"minimum": 0
|
|
3103
|
+
},
|
|
3104
|
+
"type": {
|
|
3105
|
+
"type": "string",
|
|
3106
|
+
"description": "The matching mechanism to use value as against response. Typically regex or simple string containment",
|
|
3107
|
+
"enum": [
|
|
3108
|
+
"regex",
|
|
3109
|
+
"contains"
|
|
3110
|
+
]
|
|
3111
|
+
},
|
|
3112
|
+
"value": {
|
|
3113
|
+
"type": "string",
|
|
3114
|
+
"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."
|
|
3214
3115
|
}
|
|
3215
3116
|
}
|
|
3216
3117
|
}
|
|
3217
3118
|
},
|
|
3218
|
-
{
|
|
3219
|
-
"type": "
|
|
3220
|
-
"
|
|
3221
|
-
|
|
3222
|
-
"
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
"
|
|
3226
|
-
"
|
|
3227
|
-
|
|
3228
|
-
|
|
3229
|
-
|
|
3230
|
-
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
|
|
3119
|
+
"responseRedactions": {
|
|
3120
|
+
"type": "array",
|
|
3121
|
+
"description": "Portions to select/reveal from the response, applied in order (xPath => jsonPath => regex). Done client-side; only the selected portions (plus the first response line) are sent to the attestor. An independent ordered list — NOT paired 1:1 with `responseMatches`. Mirrors attestor-core `responseRedactions`.",
|
|
3122
|
+
"items": {
|
|
3123
|
+
"type": "object",
|
|
3124
|
+
"additionalProperties": false,
|
|
3125
|
+
"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\")",
|
|
3126
|
+
"properties": {
|
|
3127
|
+
"xPath": {
|
|
3128
|
+
"type": "string",
|
|
3129
|
+
"description": "expect an HTML response, and to contain a certain xpath for eg. \"/html/body/div.a1/div.a2/span.a5\""
|
|
3130
|
+
},
|
|
3131
|
+
"jsonPath": {
|
|
3132
|
+
"type": "string",
|
|
3133
|
+
"description": "expect a JSON response, retrieve the item at this path using dot notation for e.g. 'email.addresses.0'"
|
|
3134
|
+
},
|
|
3135
|
+
"regex": {
|
|
3136
|
+
"type": "string",
|
|
3137
|
+
"description": "select a regex match from the response"
|
|
3138
|
+
},
|
|
3139
|
+
"hash": {
|
|
3140
|
+
"type": "string",
|
|
3141
|
+
"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.",
|
|
3142
|
+
"enum": [
|
|
3143
|
+
"oprf",
|
|
3144
|
+
"oprf-mpc",
|
|
3145
|
+
"oprf-raw"
|
|
3146
|
+
]
|
|
3147
|
+
}
|
|
3234
3148
|
}
|
|
3235
3149
|
}
|
|
3150
|
+
},
|
|
3151
|
+
"multiple": {
|
|
3152
|
+
"type": "boolean",
|
|
3153
|
+
"description": "If true, the template is allowed for multiple requests. Useful for requests like paginated API calls.",
|
|
3154
|
+
"default": true
|
|
3155
|
+
},
|
|
3156
|
+
"required": {
|
|
3157
|
+
"type": "boolean",
|
|
3158
|
+
"description": "If true, a request is required to match with this template. If not requests matches this template in proof, then validation fails.",
|
|
3159
|
+
"default": true
|
|
3160
|
+
},
|
|
3161
|
+
"templateParams": {
|
|
3162
|
+
"type": "array",
|
|
3163
|
+
"description": "Names of `${param}` placeholders used in this template's `responseMatches` / `responseRedactions`, substituted at verification time from array-valued extracted parameters (each name must resolve to an array of values; all named arrays must have the same length). Absent or empty means the template is used as-is with no expansion.",
|
|
3164
|
+
"maxItems": 50,
|
|
3165
|
+
"items": {
|
|
3166
|
+
"type": "string",
|
|
3167
|
+
"minLength": 1,
|
|
3168
|
+
"maxLength": 100
|
|
3169
|
+
}
|
|
3170
|
+
},
|
|
3171
|
+
"templateParamsMode": {
|
|
3172
|
+
"type": "string",
|
|
3173
|
+
"description": "How array values of `templateParams` expand the template: `separate` (default) emits one expanded request — its own claim — per value; `merge` emits a single request whose `responseMatches`/`responseRedactions` contain all substituted entries, proven by one claim.",
|
|
3174
|
+
"enum": [
|
|
3175
|
+
"separate",
|
|
3176
|
+
"merge"
|
|
3177
|
+
],
|
|
3178
|
+
"default": "separate"
|
|
3236
3179
|
}
|
|
3237
|
-
|
|
3180
|
+
}
|
|
3238
3181
|
}
|
|
3239
3182
|
},
|
|
3240
3183
|
"webSettings": {
|
|
@@ -3321,6 +3264,12 @@ export const MCP_TOOLS = {
|
|
|
3321
3264
|
}
|
|
3322
3265
|
}
|
|
3323
3266
|
}
|
|
3267
|
+
},
|
|
3268
|
+
"extension": {
|
|
3269
|
+
"type": "object",
|
|
3270
|
+
"description": "Free-form key-value configuration for the browser-extension verification client. Keys and value shapes are defined by the extension client; values may be any JSON. Absent by default.",
|
|
3271
|
+
"maxProperties": 100,
|
|
3272
|
+
"additionalProperties": true
|
|
3324
3273
|
}
|
|
3325
3274
|
}
|
|
3326
3275
|
},
|