@noresponse/mcp 0.10.4 → 0.11.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,116 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.1
4
+
5
+ * `SDK.assessments.create()`: `response.code` **Changed** (Breaking ⚠️)
6
+ * `SDK.assessments.get()`: `response.code` **Changed** (Breaking ⚠️)
7
+ * `SDK.assessments.delete()`: `response.code` **Changed** (Breaking ⚠️)
8
+ * `SDK.assessments.recordOutcome()`: `response.code` **Changed** (Breaking ⚠️)
9
+ * `SDK.assessments.query()`: `response.code` **Changed** (Breaking ⚠️)
10
+ * `SDK.assessments.aggregate()`: `response.code` **Changed** (Breaking ⚠️)
11
+ * `SDK.assessments.search()`: `response.code` **Changed** (Breaking ⚠️)
12
+ * `SDK.assessments.retrieveVersion()`: `response.code` **Changed** (Breaking ⚠️)
13
+ * `SDK.assessments.bindAccount()`: `response.code` **Changed** (Breaking ⚠️)
14
+ * `SDK.accounts.listChanged()`: `response.code` **Changed** (Breaking ⚠️)
15
+ * `SDK.accounts.get()`: `response.code` **Changed** (Breaking ⚠️)
16
+ * `SDK.accounts.delete()`: `response.code` **Changed** (Breaking ⚠️)
17
+ * `SDK.accounts.listAssessments()`: `response.code` **Changed** (Breaking ⚠️)
18
+ * `SDK.accounts.listEnforcements()`: `response.code` **Changed** (Breaking ⚠️)
19
+ * `SDK.accounts.recordEnforcement()`: `response.code` **Changed** (Breaking ⚠️)
20
+ * `SDK.accounts.listOutcomes()`: `response.code` **Changed** (Breaking ⚠️)
21
+ * `SDK.accounts.recordOutcome()`: `response.code` **Changed** (Breaking ⚠️)
22
+ * `SDK.accounts.retrieveDecision()`: `response.code` **Changed** (Breaking ⚠️)
23
+ * `SDK.accounts.listCredentials()`: `response.code` **Changed** (Breaking ⚠️)
24
+ * `SDK.accounts.associateCredential()`: `response.code` **Changed** (Breaking ⚠️)
25
+ * `SDK.accounts.retireCredential()`: `response.code` **Changed** (Breaking ⚠️)
26
+ * `SDK.accounts.export()`: `response.code` **Changed** (Breaking ⚠️)
27
+ * `SDK.accounts.listDecisions()`: `response.code` **Changed** (Breaking ⚠️)
28
+ * `SDK.accounts.search()`: `response.code` **Changed** (Breaking ⚠️)
29
+ * `SDK.keyUsage.record()`: `response.code` **Changed** (Breaking ⚠️)
30
+ * `SDK.keys.rotate()`: `response.code` **Changed** (Breaking ⚠️)
31
+ * `SDK.keys.list()`: `response.code` **Changed** (Breaking ⚠️)
32
+ * `SDK.keys.create()`: `response.code` **Changed** (Breaking ⚠️)
33
+ * `SDK.keys.revoke()`: `response.code` **Changed** (Breaking ⚠️)
34
+ * `SDK.integrations.list()`: `response.code` **Changed** (Breaking ⚠️)
35
+ * `SDK.integrations.create()`: `response.code` **Changed** (Breaking ⚠️)
36
+ * `SDK.integrations.delete()`: `response.code` **Changed** (Breaking ⚠️)
37
+ * `SDK.integrations.rotate()`: `response.code` **Changed** (Breaking ⚠️)
38
+ * `SDK.webhookEndpoints.list()`: `response.code` **Changed** (Breaking ⚠️)
39
+ * `SDK.webhookEndpoints.create()`: `response.code` **Changed** (Breaking ⚠️)
40
+ * `SDK.webhookEndpoints.delete()`: `response.code` **Changed** (Breaking ⚠️)
41
+ * `SDK.webhookEndpoints.rotateSigningKey()`: `response.code` **Changed** (Breaking ⚠️)
42
+ * `SDK.webhookEndpoints.sendTestEvent()`: `response.code` **Changed** (Breaking ⚠️)
43
+ * `SDK.webhookEndpoints.listDeliveries()`: `response.code` **Changed** (Breaking ⚠️)
44
+ * `SDK.webhookEndpoints.replayDelivery()`: `response.code` **Changed** (Breaking ⚠️)
45
+ * `SDK.webhookEndpoints.aggregate()`: `response.code` **Changed** (Breaking ⚠️)
46
+ * `SDK.members.list()`: `response.code` **Changed** (Breaking ⚠️)
47
+ * `SDK.members.remove()`: `response.code` **Changed** (Breaking ⚠️)
48
+ * `SDK.members.update()`: `response.code` **Changed** (Breaking ⚠️)
49
+ * `SDK.audit.list()`: `response.code` **Changed** (Breaking ⚠️)
50
+ * `SDK.audit.getRetention()`: `response.code` **Changed** (Breaking ⚠️)
51
+ * `SDK.audit.updateRetention()`: `response.code` **Changed** (Breaking ⚠️)
52
+ * `SDK.audit.listStreams()`: `response.code` **Changed** (Breaking ⚠️)
53
+ * `SDK.audit.configureStream()`: `response.code` **Changed** (Breaking ⚠️)
54
+ * `SDK.audit.removeStream()`: `response.code` **Changed** (Breaking ⚠️)
55
+ * `SDK.audit.replayStream()`: `response.code` **Changed** (Breaking ⚠️)
56
+ * `SDK.usage.get()`: `response.code` **Changed** (Breaking ⚠️)
57
+ * `SDK.invites.list()`: `response.code` **Changed** (Breaking ⚠️)
58
+ * `SDK.invites.create()`: `response.code` **Changed** (Breaking ⚠️)
59
+ * `SDK.invites.revoke()`: `response.code` **Changed** (Breaking ⚠️)
60
+ * `SDK.invites.resend()`: `response.code` **Changed** (Breaking ⚠️)
61
+ * `SDK.settings.get()`: `response.code` **Changed** (Breaking ⚠️)
62
+ * `SDK.settings.update()`: `response.code` **Changed** (Breaking ⚠️)
63
+ * `SDK.settings.listHistory()`: `response.code` **Changed** (Breaking ⚠️)
64
+ * `SDK.settings.restore()`: `response.code` **Changed** (Breaking ⚠️)
65
+ * `SDK.settings.preview()`: `response.code` **Changed** (Breaking ⚠️)
66
+ * `SDK.requests.list()`: `response.code` **Changed** (Breaking ⚠️)
67
+ * `SDK.requests.aggregate()`: `response.code` **Changed** (Breaking ⚠️)
68
+ * `SDK.lists.list()`: `response.code` **Changed** (Breaking ⚠️)
69
+ * `SDK.lists.create()`: `response.code` **Changed** (Breaking ⚠️)
70
+ * `SDK.lists.delete()`: `response.code` **Changed** (Breaking ⚠️)
71
+ * `SDK.lists.preview()`: `response.code` **Changed** (Breaking ⚠️)
72
+ * `SDK.lists.change()`: `response.code` **Changed** (Breaking ⚠️)
73
+ * `SDK.lists.getChange()`: `response.code` **Changed** (Breaking ⚠️)
74
+ * `SDK.reviews.list()`: `response.code` **Changed** (Breaking ⚠️)
75
+ * `SDK.reviews.create()`: `response.code` **Changed** (Breaking ⚠️)
76
+ * `SDK.reviews.get()`: `response.code` **Changed** (Breaking ⚠️)
77
+ * `SDK.reviews.update()`: `response.code` **Changed** (Breaking ⚠️)
78
+ * `SDK.reviews.resolve()`: `response.code` **Changed** (Breaking ⚠️)
79
+ * `SDK.reviews.listComments()`: `response.code` **Changed** (Breaking ⚠️)
80
+ * `SDK.reviews.comment()`: `response.code` **Changed** (Breaking ⚠️)
81
+ * `SDK.reviews.listResolutions()`: `response.code` **Changed** (Breaking ⚠️)
82
+ * `SDK.reviews.listViews()`: `response.code` **Changed** (Breaking ⚠️)
83
+ * `SDK.reviews.createView()`: `response.code` **Changed** (Breaking ⚠️)
84
+ * `SDK.reviews.deleteView()`: `response.code` **Changed** (Breaking ⚠️)
85
+ * `SDK.reviews.updateView()`: `response.code` **Changed** (Breaking ⚠️)
86
+ * `SDK.reviews.export()`: `response.code` **Changed** (Breaking ⚠️)
87
+ * `SDK.reviews.listSubjects()`: `response.code` **Changed** (Breaking ⚠️)
88
+ * `SDK.reviews.addSubject()`: `response.code` **Changed** (Breaking ⚠️)
89
+ * `SDK.reviews.deleteSubject()`: `response.code` **Changed** (Breaking ⚠️)
90
+ * `SDK.erasures.get()`: `response.code` **Changed** (Breaking ⚠️)
91
+ * `SDK.exports.list()`: `response.code` **Changed** (Breaking ⚠️)
92
+ * `SDK.exports.create()`: `response.code` **Changed** (Breaking ⚠️)
93
+ * `SDK.exports.get()`: `response.code` **Changed** (Breaking ⚠️)
94
+ * `SDK.exports.cancel()`: `response.code` **Changed** (Breaking ⚠️)
95
+ * `SDK.exports.retry()`: `response.code` **Changed** (Breaking ⚠️)
96
+ * `SDK.exports.downloadChunk()`: `response.code` **Changed** (Breaking ⚠️)
97
+ * `SDK.evaluations.list()`: `response.code` **Changed** (Breaking ⚠️)
98
+ * `SDK.evaluations.create()`: `response.code` **Changed** (Breaking ⚠️)
99
+ * `SDK.evaluations.get()`: `response.code` **Changed** (Breaking ⚠️)
100
+ * `SDK.evaluations.getResult()`: `response.code` **Changed** (Breaking ⚠️)
101
+ * `SDK.evaluations.cancel()`: `response.code` **Changed** (Breaking ⚠️)
102
+ * `SDK.evaluations.publish()`: `response.code` **Changed** (Breaking ⚠️)
103
+ * `SDK.operations.summarize()`: `response.code` **Changed** (Breaking ⚠️)
104
+
105
+ ## 0.11.0
106
+
107
+ * `SDK.assessments.search()`:
108
+ * `request.identifier_expression` **Added**
109
+ * `response.items[].matched_identifiers` **Added**
110
+ * `SDK.accounts.search()`:
111
+ * `request.identifier_expression` **Added**
112
+ * `response.items[].matched_identifiers` **Added**
113
+
3
114
  ## 0.10.4
4
115
 
5
116
  * `SDK.assessments.search()`:
package/README.md CHANGED
@@ -87,3 +87,21 @@ Each [release](https://github.com/noresponsehq/mcp/releases) attaches `norespons
87
87
  ## Licence
88
88
 
89
89
  Apache-2.0. See [LICENSE](LICENSE).
90
+
91
+
92
+ ## Combine submitted identifiers
93
+
94
+ Search accounts and assessments with explicit AND/OR combinations of submitted
95
+ email, phone and customer-namespace username terms. Use `IdentifierExpression`
96
+ and its required `scope`: `assessment` requires one submission to satisfy the
97
+ whole expression; `account` can combine different retained submissions of the
98
+ same account and is accepted only by account search. Pass the wire shape under `request.identifier_expression` to `search_accounts` or `search_assessments`.
99
+
100
+ Expressions have at most eight raw terms and three group levels. The original
101
+ exact, canonical and explicit mailbox matching rules still apply to each term.
102
+ Expression results contain indexed `IdentifierTermMatch` records with the
103
+ original submitted value and originating assessment, separate from current
104
+ account risk. Single-identifier and legacy email filters retain their behavior.
105
+
106
+ See the [combined-search contract and examples](https://docs.noresponse.org/reference/investigation#combine-submitted-identifiers)
107
+ for the expression shape, scope differences, permissions and pagination.
package/bin/mcp-server.js CHANGED
@@ -48136,9 +48136,9 @@ var init_config = __esm(() => {
48136
48136
  SDK_METADATA = {
48137
48137
  language: "typescript",
48138
48138
  openapiDocVersion: "1",
48139
- sdkVersion: "0.10.4",
48139
+ sdkVersion: "0.11.1",
48140
48140
  genVersion: "internal",
48141
- userAgent: "noresponse-sdk/mcp-typescript 0.10.4 internal 1 @noresponse/mcp"
48141
+ userAgent: "noresponse-sdk/mcp-typescript 0.11.1 internal 1 @noresponse/mcp"
48142
48142
  };
48143
48143
  });
48144
48144
 
@@ -51493,7 +51493,10 @@ var init_permissiondeniederrorcode = __esm(() => {
51493
51493
  init_zod();
51494
51494
  PermissionDeniedErrorCode$zodSchema = _enum([
51495
51495
  "workspace_forbidden",
51496
- "role_forbidden"
51496
+ "role_forbidden",
51497
+ "email_unverified",
51498
+ "onboarding_in_review",
51499
+ "onboarding_refused"
51497
51500
  ]).describe("Machine codes an HTTP 403 answer can carry.");
51498
51501
  });
51499
51502
 
@@ -54894,19 +54897,92 @@ var init_identifiersearch = __esm(() => {
54894
54897
  }).describe("One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.");
54895
54898
  });
54896
54899
 
54900
+ // src/models/identifierexpressionleaf.ts
54901
+ var IdentifierExpressionLeaf$zodSchema;
54902
+ var init_identifierexpressionleaf = __esm(() => {
54903
+ init_zod();
54904
+ init_identifiersearch();
54905
+ IdentifierExpressionLeaf$zodSchema = object({
54906
+ term: IdentifierSearch$zodSchema.describe("One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.")
54907
+ });
54908
+ });
54909
+
54910
+ // src/models/identifierexpressionnodelevelone.ts
54911
+ var IdentifierExpressionNodeLevelOne$zodSchema;
54912
+ var init_identifierexpressionnodelevelone = __esm(() => {
54913
+ init_zod();
54914
+ init_identifierexpressionleaf();
54915
+ init_identifiersearch();
54916
+ IdentifierExpressionNodeLevelOne$zodSchema = object({
54917
+ and: array(IdentifierExpressionLeaf$zodSchema).optional(),
54918
+ or: array(IdentifierExpressionLeaf$zodSchema).optional(),
54919
+ term: IdentifierSearch$zodSchema.optional().describe("One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.")
54920
+ });
54921
+ });
54922
+
54923
+ // src/models/identifierexpressionnodeleveltwo.ts
54924
+ var IdentifierExpressionNodeLevelTwo$zodSchema;
54925
+ var init_identifierexpressionnodeleveltwo = __esm(() => {
54926
+ init_zod();
54927
+ init_identifierexpressionnodelevelone();
54928
+ init_identifiersearch();
54929
+ IdentifierExpressionNodeLevelTwo$zodSchema = object({
54930
+ and: array(IdentifierExpressionNodeLevelOne$zodSchema).optional(),
54931
+ or: array(IdentifierExpressionNodeLevelOne$zodSchema).optional(),
54932
+ term: IdentifierSearch$zodSchema.optional().describe("One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.")
54933
+ });
54934
+ });
54935
+
54936
+ // src/models/identifierexpressionnode.ts
54937
+ var IdentifierExpressionNode$zodSchema;
54938
+ var init_identifierexpressionnode = __esm(() => {
54939
+ init_zod();
54940
+ init_identifierexpressionnodeleveltwo();
54941
+ init_identifiersearch();
54942
+ IdentifierExpressionNode$zodSchema = object({
54943
+ and: array(IdentifierExpressionNodeLevelTwo$zodSchema).optional(),
54944
+ or: array(IdentifierExpressionNodeLevelTwo$zodSchema).optional(),
54945
+ term: IdentifierSearch$zodSchema.optional().describe("One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts.")
54946
+ });
54947
+ });
54948
+
54949
+ // src/models/scopeenum.ts
54950
+ var ScopeEnum$zodSchema;
54951
+ var init_scopeenum = __esm(() => {
54952
+ init_zod();
54953
+ ScopeEnum$zodSchema = _enum([
54954
+ "assessment",
54955
+ "account"
54956
+ ]).describe("assessment requires one submission to satisfy the complete expression. account permits witnesses across retained submissions of one account and is supported only by POST /v1/accounts/search. No default: select scope explicitly.");
54957
+ });
54958
+
54959
+ // src/models/identifierexpression.ts
54960
+ var IdentifierExpression$zodSchema;
54961
+ var init_identifierexpression = __esm(() => {
54962
+ init_zod();
54963
+ init_identifierexpressionnode();
54964
+ init_scopeenum();
54965
+ IdentifierExpression$zodSchema = object({
54966
+ expression: IdentifierExpressionNode$zodSchema,
54967
+ scope: ScopeEnum$zodSchema.describe("assessment requires one submission to satisfy the complete expression. account permits witnesses across retained submissions of one account and is supported only by POST /v1/accounts/search. No default: select scope explicitly.")
54968
+ }).describe("A bounded AND/OR expression over submitted identifiers. Required scope assessment means the entire expression must match one retained assessment. Scope account permits each term to match a different retained assessment of the same account and is accepted only by account search. Exactly one of term, and or or is allowed at every node. Groups contain 2 to 8 operands, with at most 3 nested group levels and 8 raw term occurrences over the entire expression. A root term is allowed. Duplicate terms with the same kind, match rule, namespace and normalized comparison are idempotent, but count toward the raw limit. Match rules default to exact and preserve the existing identifier contract. Only retained submitted identifiers can satisfy a term. Unknown fields, unsupported scopes and malformed or oversized expressions return 400 invalid_request.");
54969
+ });
54970
+
54897
54971
  // src/models/accountdirectorysearchrequest.ts
54898
54972
  var AccountDirectorySearchRequest$zodSchema;
54899
54973
  var init_accountdirectorysearchrequest = __esm(() => {
54900
54974
  init_zod();
54975
+ init_identifierexpression();
54901
54976
  init_identifiersearch();
54902
54977
  AccountDirectorySearchRequest$zodSchema = object({
54903
54978
  account_id: string2().optional().describe("Your own opaque identifier for the account being checked, scoped to your workspace. Use an id you mint, with no direct identifier (email, phone, name or national id) in it. '|' is accepted so an Auth0 user id such as 'auth0|64abc' passes unchanged; '@', '+', '$' and whitespace are refused by the pattern, as is an exact-shape JWT; a hex digest such as a SHA-256 is allowed, because hashing an internal id is a common pseudonymous scheme. A value such as '07700900123' or 'jane.doe.gmail.com' cannot be told apart from an opaque id. It travels in bodies, and in a URL only as the path segment of GET /v1/accounts/{account_id} and its /assessments. An assessment requested by a provider hook at pre_registration, which has no account yet, carries the server-issued account_id pre: followed by its assessment_id."),
54904
- cursor: string2().optional().describe("Opaque, expiring cursor bound to this environment, operation and every filter. Keep the filters unchanged."),
54979
+ cursor: string2().optional().describe("Opaque, expiring cursor bound to workspace, environment, operation and all filters, including expression scope, ordered structure and original term values. Keep grouping, operand order, matching modes and values unchanged; an omitted match is equivalent to exact. The page limit may change."),
54905
54980
  email: string2().optional().describe("Assessments of every account that one of its retained admitted assessments sent this mailbox as identifiers.email, matched as lists match an email entry: case-insensitive, a +tag removed and, at gmail.com and googlemail.com, the dots of the local part ignored. Only assessments stored since email list matching began carry the mailbox. An address that is not a valid mailbox is refused with 400."),
54906
54981
  identifier: IdentifierSearch$zodSchema.optional().describe("One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts."),
54982
+ identifier_expression: IdentifierExpression$zodSchema.optional().describe("A bounded AND/OR expression over submitted identifiers. Required scope assessment means the entire expression must match one retained assessment. Scope account permits each term to match a different retained assessment of the same account and is accepted only by account search. Exactly one of term, and or or is allowed at every node. Groups contain 2 to 8 operands, with at most 3 nested group levels and 8 raw term occurrences over the entire expression. A root term is allowed. Duplicate terms with the same kind, match rule, namespace and normalized comparison are idempotent, but count toward the raw limit. Match rules default to exact and preserve the existing identifier contract. Only retained submitted identifiers can satisfy a term. Unknown fields, unsupported scopes and malformed or oversized expressions return 400 invalid_request."),
54907
54983
  limit: int().default(25),
54908
54984
  needs_action: boolean2().default(false).describe("Select accounts with a retained open or in-progress review, or a current review/block account decision with no retained effective account outcome. The server applies this filter before counting and pagination. Requires reviews.read as well as history.read for console members; API keys additionally require management.")
54909
- }).describe("Bounded distinct-account search for one authenticated workspace/environment. identifier matches any retained admitted assessment of an account, including historical submitted values. email preserves the legacy canonical-mailbox filter. identifier and email cannot be combined. All other filters combine using AND. Typed identifier search uses stable opaque account order; ordinary and legacy email searches retain newest-seen ordering. Pages are live, not a cross-page snapshot. Requires history or investigate authority and identifier-read permission for identifier or email filtering.");
54985
+ }).describe("Bounded distinct-account search for one authenticated workspace/environment. identifier matches any retained admitted assessment of an account, including historical submitted values. email preserves the legacy canonical-mailbox filter. identifier and email cannot be combined. All other filters combine using AND. Typed identifier search uses stable opaque account order; ordinary and legacy email searches retain newest-seen ordering. Pages are live, not a cross-page snapshot. Requires history or investigate authority and identifier-read permission for identifier, identifier_expression or email filtering. identifier_expression explicitly chooses scope assessment (one whole matching submission) or account (terms may match different retained submissions of one account). At most 8 raw terms and 3 group levels. Mutually exclusive with identifier and email. Expression search uses the same stable opaque account order as typed identifier search.");
54910
54986
  });
54911
54987
 
54912
54988
  // src/funcs/accountsSearch.ts
@@ -55002,7 +55078,7 @@ var init_accountsSearch2 = __esm(() => {
55002
55078
  name: "search_accounts",
55003
55079
  description: `Search distinct accounts by submitted identifier or account ID
55004
55080
 
55005
- Search distinct accounts observed in retained assessments in this environment. identifier matches an exact, canonical or explicitly selected mailbox form of a submitted email, phone or customer-namespace username. It matches historical retained inputs and returns matched_identifier with the original value and matching assessment. Each row has its newest retained assessment, current account decision when available, retained assessment count, and total distinct-account count. identifier and legacy email are mutually exclusive; account_id and needs_action combine with either using AND. Set needs_action to select accounts with a retained open or in-progress review, or a current review/block account decision without an effective retained account outcome. This filter applies before counting and pagination and adds waiting_for reasons. Current decisions include account list overrides and shared-key scoring and preserve admission holds. Typed identifier search uses stable opaque account order; ordinary and legacy email searches retain newest-seen order. Results are live across pages; each page's items and total share a database snapshot, while current account risk is read separately. Cursors are expiring and bound to scope, operation and filters. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier or email filtering. needs_action additionally requires management scope. Source-discovered associations are not searched and equality is not verified ownership.`,
55081
+ Search distinct accounts observed in retained assessments in this environment. identifier matches an exact, canonical or explicitly selected mailbox form of a submitted email, phone or customer-namespace username. It matches historical retained inputs and returns matched_identifier with the original value and matching assessment. Each row has its newest retained assessment, current account decision when available, retained assessment count, and total distinct-account count. identifier and legacy email are mutually exclusive; account_id and needs_action combine with either using AND. Set needs_action to select accounts with a retained open or in-progress review, or a current review/block account decision without an effective retained account outcome. This filter applies before counting and pagination and adds waiting_for reasons. Current decisions include account list overrides and shared-key scoring and preserve admission holds. Typed identifier search uses stable opaque account order; ordinary and legacy email searches retain newest-seen order. Results are live across pages; each page's items and total share a database snapshot, while current account risk is read separately. Cursors are expiring and bound to scope, operation and filters. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier, identifier_expression or email filtering. needs_action additionally requires management scope. Source-discovered associations are not searched and equality is not verified ownership. identifier_expression combines submitted terms with bounded AND/OR, at most 8 raw terms and 3 group levels. Each node selects exactly one of term, and, or. Groups have 2 to 8 operands. Duplicate normalized terms are idempotent and still count toward the limit. identifier_expression, identifier and email are mutually exclusive. Expression results use matched_identifiers with original submitted witnesses and zero-based depth-first term_index. All satisfied unique terms are returned in first-occurrence order. Cursors bind scope, ordered structure, original values, matching modes and all other filters; changing only page limit is allowed. Required expression scope assessment evaluates the whole expression in one retained submission; scope account allows different retained submissions of the same account to satisfy different terms. Both use stable opaque account ordering and distinct-account counting before pagination.`,
55006
55082
  annotations: {
55007
55083
  title: "Search retained accounts by identifier",
55008
55084
  destructiveHint: false,
@@ -56439,6 +56515,7 @@ var init_assessmentsearchrequest = __esm(() => {
56439
56515
  init_band();
56440
56516
  init_decision();
56441
56517
  init_flow();
56518
+ init_identifierexpression();
56442
56519
  init_identifiersearch();
56443
56520
  init_impact();
56444
56521
  init_lane();
@@ -56453,12 +56530,13 @@ var init_assessmentsearchrequest = __esm(() => {
56453
56530
  band: Band$zodSchema.optional(),
56454
56531
  changed: boolean2().optional().describe("true returns only assessments whose latest stored revision's decision differs from their first answer's decision (see decision); false only the others. An assessment whose first answer or latest revision has no decision yet is not changed. Cannot be combined with revision first."),
56455
56532
  country: string2().optional(),
56456
- cursor: string2().optional().describe("Opaque, expiring cursor bound to this environment, operation and every filter. Keep the filters unchanged."),
56533
+ cursor: string2().optional().describe("Opaque, expiring cursor bound to workspace, environment, operation and all filters, including expression scope, ordered structure and original term values. Keep grouping, operand order, matching modes and values unchanged; an omitted match is equivalent to exact. The page limit may change."),
56457
56534
  decision: Decision$zodSchema.optional().describe("An assessment's own decision: block when its stored risk.block is true, otherwise its recommendation. It is not the account's decision or held-admission state."),
56458
56535
  email: string2().optional().describe("Assessments of every account that one of its retained admitted assessments sent this mailbox as identifiers.email, matched as lists match an email entry: case-insensitive, a +tag removed and, at gmail.com and googlemail.com, the dots of the local part ignored. Only assessments stored since email list matching began carry the mailbox. An address that is not a valid mailbox is refused with 400."),
56459
56536
  flow: Flow$zodSchema.optional().describe("The event an assessment is made for: account_creation (a user creates an account), login (a user returns to an existing account) or purchase (a payment or a credit grant). The account's risk is reported with the decision for this flow."),
56460
56537
  from: string2(),
56461
56538
  identifier: IdentifierSearch$zodSchema.optional().describe("One customer-submitted identifier. Defaults to exact comparison of the original submitted value. canonical uses the supported identifier normalisation without an ownership claim: email preserves local-part case, NFC-normalises it and lowercases the domain without removing dots or tags; phone uses international E.164 without extensions or an inferred region; username uses NFC and Unicode case folding within the customer namespace. mailbox is email-only and explicitly selects existing list rules: case-insensitive, remove +tag, and ignore local-part dots at gmail.com and googlemail.com; googlemail.com maps to gmail.com. Username requires namespace customer. Email and phone forbid namespace. Source-discovered identifiers and platform handles are not searched. Unsupported kinds, namespaces, modes and invalid values return 400. Search equality does not establish verified ownership or merge accounts."),
56539
+ identifier_expression: IdentifierExpression$zodSchema.optional().describe("A bounded AND/OR expression over submitted identifiers. Required scope assessment means the entire expression must match one retained assessment. Scope account permits each term to match a different retained assessment of the same account and is accepted only by account search. Exactly one of term, and or or is allowed at every node. Groups contain 2 to 8 operands, with at most 3 nested group levels and 8 raw term occurrences over the entire expression. A root term is allowed. Duplicate terms with the same kind, match rule, namespace and normalized comparison are idempotent, but count toward the raw limit. Match rules default to exact and preserve the existing identifier contract. Only retained submitted identifiers can satisfy a term. Unknown fields, unsupported scopes and malformed or oversized expressions return 400 invalid_request."),
56462
56540
  impact: Impact$zodSchema.optional().describe("The selected reason's served impact band. Requires reason."),
56463
56541
  lane: Lane$zodSchema.optional().describe("An evidence lane: accounts (account presence for email and username), phone, breach, domain (the email domain's registration) and ip."),
56464
56542
  limit: int().default(20),
@@ -56471,7 +56549,7 @@ var init_assessmentsearchrequest = __esm(() => {
56471
56549
  score_min: int().optional().describe("Inclusive lower score bound. Pending answers without a score do not match."),
56472
56550
  status: Status$zodSchema.optional().describe("Processing state, separate from evidence coverage. complete: final; nothing is still running, but unsupported, failed or unanswered lanes remain in incomplete_sources. partial: a recommendation exists and evidence is incomplete; assessment_url identifies continuing work when present. pending: no recommendation yet; poll or wait for the webhook. Finished processing does not mean all sources answered."),
56473
56551
  to: string2()
56474
- }).describe("Search retained assessments created in [from,to), at most 366 days. identifier matches the submitted value of each returned assessment directly. The legacy email filter keeps its account-wide mailbox semantics and cannot be combined with identifier. Other filters combine using AND and describe assessment decisions, separate from current account decisions. Results use newest-created order with an assessment-ID tie break and are live, not a snapshot across pages. Requires history or investigate authority; identifier/email filtering also requires identifier-read permission. Detailed response mode additionally requires detailed permission. No Idempotency-Key.");
56552
+ }).describe("Search retained assessments created in [from,to), at most 366 days. identifier matches the submitted value of each returned assessment directly. The legacy email filter keeps its account-wide mailbox semantics and cannot be combined with identifier. Other filters combine using AND and describe assessment decisions, separate from current account decisions. Results use newest-created order with an assessment-ID tie break and are live, not a snapshot across pages. Requires history or investigate authority; identifier, identifier_expression and email filtering also require identifier-read permission. Detailed response mode additionally requires detailed permission. No Idempotency-Key. identifier_expression requires scope assessment and matches the complete expression within each returned submission; account scope returns 400 invalid_request. At most 8 raw terms and 3 group levels. Mutually exclusive with identifier and email.");
56475
56553
  });
56476
56554
 
56477
56555
  // src/funcs/assessmentsSearch.ts
@@ -56567,7 +56645,7 @@ var init_assessmentsSearch2 = __esm(() => {
56567
56645
  name: "search_assessments",
56568
56646
  description: `Search assessments across this environment
56569
56647
 
56570
- Search retained assessments created in [from,to), at most 366 days. identifier directly matches that assessment's submitted email, phone or customer-namespace username using exact, canonical or explicitly selected email mailbox matching. matched_identifier explains the original value and match basis. Legacy email keeps its account-wide mailbox semantics and cannot be combined with identifier. Other filters combine using AND and describe assessment decisions, separate from current account decisions. Each item carries the original submitted identifiers and its first_decision when available. Newest-created order has an assessment-ID tie break. Results are live across pages; each page's total and items use one database snapshot. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier/email filters; detailed mode also requires detailed permission. No Idempotency-Key.`,
56648
+ Search retained assessments created in [from,to), at most 366 days. identifier directly matches that assessment's submitted email, phone or customer-namespace username using exact, canonical or explicitly selected email mailbox matching. matched_identifier explains the original value and match basis. Legacy email keeps its account-wide mailbox semantics and cannot be combined with identifier. Other filters combine using AND and describe assessment decisions, separate from current account decisions. Each item carries the original submitted identifiers and its first_decision when available. Newest-created order has an assessment-ID tie break. Results are live across pages; each page's total and items use one database snapshot. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier, identifier_expression or email filters; detailed mode also requires detailed permission. No Idempotency-Key. identifier_expression combines submitted terms with bounded AND/OR, at most 8 raw terms and 3 group levels. Each node selects exactly one of term, and, or. Groups have 2 to 8 operands. Duplicate normalized terms are idempotent and still count toward the limit. identifier_expression, identifier and email are mutually exclusive. Expression results use matched_identifiers with original submitted witnesses and zero-based depth-first term_index. All satisfied unique terms are returned in first-occurrence order. Cursors bind scope, ordered structure, original values, matching modes and all other filters; changing only page limit is allowed. Expression scope must be assessment: each returned assessment itself satisfies the complete expression. Scope account is rejected with 400 invalid_request; use account search for historical combinations.`,
56571
56649
  annotations: {
56572
56650
  title: "Search assessments in this environment",
56573
56651
  destructiveHint: false,
@@ -69744,7 +69822,7 @@ endpoint.verification sends a signed challenge now and answers whether the endpo
69744
69822
  function createMCPServer(deps) {
69745
69823
  const server = new McpServer({
69746
69824
  name: "NoResponse",
69747
- version: "0.10.4"
69825
+ version: "0.11.1"
69748
69826
  });
69749
69827
  const getClient = deps.getSDK || (() => new NoResponseCore({
69750
69828
  security: deps.security,
@@ -70010,7 +70088,7 @@ Count this environment's assessments created in [from,to) by UTC hour, or by day
70010
70088
  name: "search_assessments",
70011
70089
  description: `Search assessments across this environment
70012
70090
 
70013
- Search retained assessments created in [from,to), at most 366 days. identifier directly matches that assessment's submitted email, phone or customer-namespace username using exact, canonical or explicitly selected email mailbox matching. matched_identifier explains the original value and match basis. Legacy email keeps its account-wide mailbox semantics and cannot be combined with identifier. Other filters combine using AND and describe assessment decisions, separate from current account decisions. Each item carries the original submitted identifiers and its first_decision when available. Newest-created order has an assessment-ID tie break. Results are live across pages; each page's total and items use one database snapshot. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier/email filters; detailed mode also requires detailed permission. No Idempotency-Key.`
70091
+ Search retained assessments created in [from,to), at most 366 days. identifier directly matches that assessment's submitted email, phone or customer-namespace username using exact, canonical or explicitly selected email mailbox matching. matched_identifier explains the original value and match basis. Legacy email keeps its account-wide mailbox semantics and cannot be combined with identifier. Other filters combine using AND and describe assessment decisions, separate from current account decisions. Each item carries the original submitted identifiers and its first_decision when available. Newest-created order has an assessment-ID tie break. Results are live across pages; each page's total and items use one database snapshot. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier, identifier_expression or email filters; detailed mode also requires detailed permission. No Idempotency-Key. identifier_expression combines submitted terms with bounded AND/OR, at most 8 raw terms and 3 group levels. Each node selects exactly one of term, and, or. Groups have 2 to 8 operands. Duplicate normalized terms are idempotent and still count toward the limit. identifier_expression, identifier and email are mutually exclusive. Expression results use matched_identifiers with original submitted witnesses and zero-based depth-first term_index. All satisfied unique terms are returned in first-occurrence order. Cursors bind scope, ordered structure, original values, matching modes and all other filters; changing only page limit is allowed. Expression scope must be assessment: each returned assessment itself satisfies the complete expression. Scope account is rejected with 400 invalid_request; use account search for historical combinations.`
70014
70092
  },
70015
70093
  {
70016
70094
  name: "get_assessment_version",
@@ -70112,7 +70190,7 @@ List retained immutable risk decisions for one account with an authenticated cur
70112
70190
  name: "search_accounts",
70113
70191
  description: `Search distinct accounts by submitted identifier or account ID
70114
70192
 
70115
- Search distinct accounts observed in retained assessments in this environment. identifier matches an exact, canonical or explicitly selected mailbox form of a submitted email, phone or customer-namespace username. It matches historical retained inputs and returns matched_identifier with the original value and matching assessment. Each row has its newest retained assessment, current account decision when available, retained assessment count, and total distinct-account count. identifier and legacy email are mutually exclusive; account_id and needs_action combine with either using AND. Set needs_action to select accounts with a retained open or in-progress review, or a current review/block account decision without an effective retained account outcome. This filter applies before counting and pagination and adds waiting_for reasons. Current decisions include account list overrides and shared-key scoring and preserve admission holds. Typed identifier search uses stable opaque account order; ordinary and legacy email searches retain newest-seen order. Results are live across pages; each page's items and total share a database snapshot, while current account risk is read separately. Cursors are expiring and bound to scope, operation and filters. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier or email filtering. needs_action additionally requires management scope. Source-discovered associations are not searched and equality is not verified ownership.`
70193
+ Search distinct accounts observed in retained assessments in this environment. identifier matches an exact, canonical or explicitly selected mailbox form of a submitted email, phone or customer-namespace username. It matches historical retained inputs and returns matched_identifier with the original value and matching assessment. Each row has its newest retained assessment, current account decision when available, retained assessment count, and total distinct-account count. identifier and legacy email are mutually exclusive; account_id and needs_action combine with either using AND. Set needs_action to select accounts with a retained open or in-progress review, or a current review/block account decision without an effective retained account outcome. This filter applies before counting and pagination and adds waiting_for reasons. Current decisions include account list overrides and shared-key scoring and preserve admission holds. Typed identifier search uses stable opaque account order; ordinary and legacy email searches retain newest-seen order. Results are live across pages; each page's items and total share a database snapshot, while current account risk is read separately. Cursors are expiring and bound to scope, operation and filters. Totals are exact below 10000 and capped at 10000. Requires history or investigate authority and identifier-read permission for identifier, identifier_expression or email filtering. needs_action additionally requires management scope. Source-discovered associations are not searched and equality is not verified ownership. identifier_expression combines submitted terms with bounded AND/OR, at most 8 raw terms and 3 group levels. Each node selects exactly one of term, and, or. Groups have 2 to 8 operands. Duplicate normalized terms are idempotent and still count toward the limit. identifier_expression, identifier and email are mutually exclusive. Expression results use matched_identifiers with original submitted witnesses and zero-based depth-first term_index. All satisfied unique terms are returned in first-occurrence order. Cursors bind scope, ordered structure, original values, matching modes and all other filters; changing only page limit is allowed. Required expression scope assessment evaluates the whole expression in one retained submission; scope account allows different retained submissions of the same account to satisfy different terms. Both use stable opaque account ordering and distinct-account counting before pagination.`
70116
70194
  },
70117
70195
  {
70118
70196
  name: "list_keys",
@@ -79033,7 +79111,7 @@ var routes = buildRouteMap({
79033
79111
  var app = buildApplication(routes, {
79034
79112
  name: "mcp",
79035
79113
  versionInfo: {
79036
- currentVersion: "0.10.4"
79114
+ currentVersion: "0.11.1"
79037
79115
  }
79038
79116
  });
79039
79117
  run(app, process3.argv.slice(2), buildContext(process3));
@@ -79041,5 +79119,5 @@ export {
79041
79119
  app
79042
79120
  };
79043
79121
 
79044
- //# debugId=5019228518CA43EA64756E2164756E21
79122
+ //# debugId=13945951AFF63AF964756E2164756E21
79045
79123
  //# sourceMappingURL=mcp-server.js.map