@fourier-labs/harbour-contracts 0.99.0 → 0.100.0
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/contract-release.json +24 -24
- package/dist/gen-ts/app-integrations-declaration.d.ts +59 -2
- package/dist/gen-ts/contract-release.d.ts +6 -6
- package/dist/gen-ts/contract-release.js +6 -6
- package/dist/gen-ts/data-grant-v2.d.ts +64 -14
- package/dist/gen-ts/integration-error-details.d.ts +1 -1
- package/dist/gen-ts/integration-execute-input-rules.d.ts +15 -0
- package/dist/gen-ts/integration-execute-input-rules.js +7 -0
- package/dist/gen-ts/integration-execute-request.d.ts +13 -3
- package/dist/gen-ts/integration-execute-result.d.ts +27 -0
- package/dist/gen-ts/integration-operations.d.ts +8 -0
- package/dist/gen-ts/integration-operations.js +10 -0
- package/dist/gen-ts/saas-connection.d.ts +3 -3
- package/gen-ts/app-integrations-declaration.ts +59 -2
- package/gen-ts/contract-release.ts +6 -6
- package/gen-ts/data-grant-v2.ts +65 -13
- package/gen-ts/integration-error-details.ts +11 -1
- package/gen-ts/integration-execute-input-rules.ts +7 -0
- package/gen-ts/integration-execute-request.ts +14 -3
- package/gen-ts/integration-execute-result.ts +29 -0
- package/gen-ts/integration-operations.ts +10 -0
- package/gen-ts/saas-connection.ts +3 -0
- package/package.json +1 -1
- package/schema/app-integrations-declaration.schema.json +219 -3
- package/schema/data-grant-v2.schema.json +75 -0
- package/schema/integration-error-details.schema.json +11 -1
- package/schema/integration-execute-request.schema.json +65 -2
- package/schema/integration-execute-result.schema.json +97 -0
- package/schema/saas-connection.schema.json +15 -0
package/contract-release.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "harbour.contract-release/1.0",
|
|
3
|
-
"repositoryVersion": "0.
|
|
4
|
-
"publishVersion": "0.
|
|
5
|
-
"publishTag": "v0.
|
|
6
|
-
"schemasDigest": "sha256:
|
|
3
|
+
"repositoryVersion": "0.100.0.0",
|
|
4
|
+
"publishVersion": "0.100.0",
|
|
5
|
+
"publishTag": "v0.100.0",
|
|
6
|
+
"schemasDigest": "sha256:5a49b987a272e49117b6f47b8fb90854b8eb128516aa5409ac8f016c97fb3c1b",
|
|
7
7
|
"aiFixturesDigest": "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6",
|
|
8
|
-
"generatedGoDigest": "sha256:
|
|
9
|
-
"generatedTypeScriptDigest": "sha256:
|
|
8
|
+
"generatedGoDigest": "sha256:7052659c5f2394396b097b4102a5d4b0369c11ddc7aa46a6e839825fee65ad8a",
|
|
9
|
+
"generatedTypeScriptDigest": "sha256:5c9d13b601b1deb027b2518e4471316d72b079a647e99c3e26f0443f57861812",
|
|
10
10
|
"generatedExclusions": {
|
|
11
11
|
"gen-go/contract_release.go": "contains the generated aggregate digests (self-reference)",
|
|
12
12
|
"gen-ts/contract-release.ts": "contains the generated aggregate digests (self-reference)"
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
"schema/ai-transform-result.schema.json": "sha256:244e380a36957ab2dcb526ea22aaecb56b53664ce1fda6934d0021c084c99133",
|
|
32
32
|
"schema/ai-verification-evidence.schema.json": "sha256:bdbc762df256d2a8dd0bdda60d4d13915ce40034cd756af9515871d145f10ad9",
|
|
33
33
|
"schema/api-error-response.schema.json": "sha256:3d43d5bdf0b59c944e20509d832e6776c3ecdba4d6c245a9118bbe52062a8304",
|
|
34
|
-
"schema/app-integrations-declaration.schema.json": "sha256:
|
|
34
|
+
"schema/app-integrations-declaration.schema.json": "sha256:e524977ec920abd106130e5a5bfce05ad131b276bac7d7f5f4f28fd4a45fad40",
|
|
35
35
|
"schema/app-sign-in.schema.json": "sha256:2093740131b84a69757c2e474d16e32ff5d0bf0edd6f6f8de62ede7f82988f29",
|
|
36
36
|
"schema/artifact-contract.schema.json": "sha256:8047b461a1c6d07bbe867a259c57bdf5cc0fdf282cf842ec7b683a9e93713b10",
|
|
37
37
|
"schema/binding-classification-subject.schema.json": "sha256:94028f6914ee7b657824accba27330cf7f5e4e94fd8ed1c2b95521037f49f377",
|
|
38
38
|
"schema/builder-input-proposal.schema.json": "sha256:fe85cffa6d76b1e1effe1f5d75525f8fe0e1eaa3be4a304e491aa23ad72c0e72",
|
|
39
39
|
"schema/data-dependency.schema.json": "sha256:b4cc2b2484e982cfed64c0f56b8f1e9d1363c71854cd71f845b24fbe7d85c971",
|
|
40
|
-
"schema/data-grant-v2.schema.json": "sha256:
|
|
40
|
+
"schema/data-grant-v2.schema.json": "sha256:5018753512a27cf844f465104fee9716e410832f37ac7f01185b81633cd15b5e",
|
|
41
41
|
"schema/data-grant.schema.json": "sha256:e640553831ecc1c01cc9a37fe388b84d0ffeaa0d0050e63712b48f65fa437c8a",
|
|
42
42
|
"schema/data-source.schema.json": "sha256:f32b2b4312bc06e023f4e1da60eed52ddfade59b74c1a1cc8e4b740a6f9c930b",
|
|
43
43
|
"schema/deploy-request.schema.json": "sha256:c978406c273fa430db262888f0a8646b14e3057f64b0633780fcd6cfa646bc67",
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
"schema/file-arrival.schema.json": "sha256:a0adb72951a021b6ec696e2837ea2c25851921ed8f92bfbb59a949ca336c0c8b",
|
|
58
58
|
"schema/identity-context.schema.json": "sha256:a0be3d3499b70f1641887ec66ab5b21ca5ab71063e9209290905738943a36e59",
|
|
59
59
|
"schema/integration-connect-result.schema.json": "sha256:3f254b67ef739dc1fa395bdc8c4dc93359b16d481dba2a2d777aa5b6f34b7af8",
|
|
60
|
-
"schema/integration-error-details.schema.json": "sha256:
|
|
61
|
-
"schema/integration-execute-request.schema.json": "sha256:
|
|
62
|
-
"schema/integration-execute-result.schema.json": "sha256:
|
|
60
|
+
"schema/integration-error-details.schema.json": "sha256:dd997865b6061c37e298a0ad8e7bcee6186422e04e3ccf63d24d64ef860036d3",
|
|
61
|
+
"schema/integration-execute-request.schema.json": "sha256:c65521c33f86a1f32f9b4ba4145a42f3e6b847a25915b36c774c8e89737142ad",
|
|
62
|
+
"schema/integration-execute-result.schema.json": "sha256:057b787c28b5f7339a95184fafa5deb7ce2c6441254ad8423ce3238c7dd6996c",
|
|
63
63
|
"schema/internal-configuration-request.schema.json": "sha256:229d44a3458f68dceddfba802e5c1adcd95523a45af29b93b972706b88461a7d",
|
|
64
64
|
"schema/kit-bundle-manifest.schema.json": "sha256:d8fc6ca9c30d791e785b021687e084e9171c0ea1a3a176d0f1582fcccf2c0e19",
|
|
65
65
|
"schema/kit-lock.schema.json": "sha256:a48154d9471e49a893d928f7b0e1e0bc77708a4a7edce4fdf14073203e0e8987",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"schema/promotion-request.schema.json": "sha256:00e96dfd8ddbdba88ea222941d43f3609ff6c815a79e34f6705cab458101c969",
|
|
69
69
|
"schema/promotion-response.schema.json": "sha256:4129712d2e29d6ef21d93d4bd0bacfd60ada3f2ee0ade852824e64346b817634",
|
|
70
70
|
"schema/resolved-app-serving.schema.json": "sha256:3b49268e189429310c2a5dcfd45e9d2187c80b6dbb9d329a0177e96e065c31c0",
|
|
71
|
-
"schema/saas-connection.schema.json": "sha256:
|
|
71
|
+
"schema/saas-connection.schema.json": "sha256:c7767b6b96f45e914e612912a423ee5bc613bfa308087ebd481f3f2c7d799da7",
|
|
72
72
|
"schema/sanitized-binding-evidence.schema.json": "sha256:8aca62c4955771aa379574d3e7f78267c9c4f8018f637ed3f1feb2e47d1bf31b",
|
|
73
73
|
"schema/secret-reference.schema.json": "sha256:db4e3c2c6a2dbd72d7ea0f9c91cb3b2343a7e67b601996c6818b2ef08e440895",
|
|
74
74
|
"schema/security-scan-input-v2.schema.json": "sha256:0d418342078c9b5046ea6f4bef3c2c57539285dfee99cc0850d4f0d03739ee13",
|
|
@@ -114,11 +114,11 @@
|
|
|
114
114
|
"gen-go/contracts_test.go": "sha256:56376287cb1548be1b35ab4c65d6f0b558c5d34885f7a47cb3d9e8d786607bf5",
|
|
115
115
|
"gen-go/doc.go": "sha256:316d610ce568597a2ce6f38e9782e34fa5920f6f51ab0866e6d061b8a41cd822",
|
|
116
116
|
"gen-go/error_category.go": "sha256:b2ddea22dcfa030f1a45e721e635485b0bd816cf1f38e7654628a653f5ed4583",
|
|
117
|
-
"gen-go/integration_execute_input_rules.go": "sha256:
|
|
118
|
-
"gen-go/integration_execute_input_rules_test.go": "sha256:
|
|
119
|
-
"gen-go/integration_operations.go": "sha256:
|
|
117
|
+
"gen-go/integration_execute_input_rules.go": "sha256:7423e4cf47c1fc6958a833627fe3e1eb939f48ab37dbce449d12a1c049cf9e9c",
|
|
118
|
+
"gen-go/integration_execute_input_rules_test.go": "sha256:0b04eb79d07764796e72fc9f3407f5852d377e636af96f6cc5ee34e2691113ff",
|
|
119
|
+
"gen-go/integration_operations.go": "sha256:391c625030f5e8fbe9365af1273674d989cd67c830c0894fbec44be905eb95ab",
|
|
120
120
|
"gen-go/schema_documents.go": "sha256:c19c0d540f602ee997a84b90e20702d9bc63ed7d27aec267e76c04655fc182e0",
|
|
121
|
-
"gen-go/types.go": "sha256:
|
|
121
|
+
"gen-go/types.go": "sha256:e22cd866bb0ec547eb7324db7ee12994905cf99f63773dce868d6982be07243c",
|
|
122
122
|
"gen-go/version_state.go": "sha256:4ef8abb126414c0025cf2c59bc9c79a74ef4a2ff89e8f316cbf05acc872371c1"
|
|
123
123
|
},
|
|
124
124
|
"generatedTypeScript": {
|
|
@@ -143,14 +143,14 @@
|
|
|
143
143
|
"gen-ts/ai-transform-result.ts": "sha256:208c66b2aeb425c0cbcc18b7191f6e8989443f2b2c1690648e0e06cc1448ce25",
|
|
144
144
|
"gen-ts/ai-verification-evidence.ts": "sha256:979439d77f8b47631d1eb3b6c3c54ea6fec41089d2a51dc815fd370b1c4917fc",
|
|
145
145
|
"gen-ts/api-error-response.ts": "sha256:0fd73be282e7a5d72d6c343a4e64d09c232556b16161167f0cffd6278ed7e3d3",
|
|
146
|
-
"gen-ts/app-integrations-declaration.ts": "sha256:
|
|
146
|
+
"gen-ts/app-integrations-declaration.ts": "sha256:5266682c20f5a3f295e44525fe70f04649b00c61a578491eee4536dfb2b59f73",
|
|
147
147
|
"gen-ts/app-sign-in.ts": "sha256:bf88671c00e9d9badb5ffc961a7e803cf92cee5a98c2f6c9e3172bbf5aaf0424",
|
|
148
148
|
"gen-ts/artifact-contract.ts": "sha256:4a6dc6d2caaeed4bb2066cc8a333e6e09e5a0d4745e0b1038293d54ab9403aeb",
|
|
149
149
|
"gen-ts/binding-classification-digest-helper.ts": "sha256:40fc7d85b4c3f3ffc5caf7d7950c62d013c83ee42058c7453b2100d95817f167",
|
|
150
150
|
"gen-ts/binding-classification-subject.ts": "sha256:69a6a9770f667948f7ac258c61a7c8267b774893a32de38eb00daeb3cc6220af",
|
|
151
151
|
"gen-ts/builder-input-proposal.ts": "sha256:b0108c3787873d3cf1a39f00967379418a6766275d3474cfa55f5a9d93ead174",
|
|
152
152
|
"gen-ts/data-dependency.ts": "sha256:259f19e2759395d72ead90b8ed74a6dcef0c2641124f4f182823138cfd19bedf",
|
|
153
|
-
"gen-ts/data-grant-v2.ts": "sha256:
|
|
153
|
+
"gen-ts/data-grant-v2.ts": "sha256:d03de6b7c3165a8f26ae4d5f0fad8864a5b6ad5506b4b68140191d9bc0cf177f",
|
|
154
154
|
"gen-ts/data-grant.ts": "sha256:2358579d8aa1e57b01a6f2b0eacce5531e7f21ef226404c9809925365e0d6155",
|
|
155
155
|
"gen-ts/data-source.ts": "sha256:2566f0d5c72e44278869f55211cf3d433aeb3552e57ae0ace0ff0b85e769dde6",
|
|
156
156
|
"gen-ts/deploy-request.ts": "sha256:9581295f0955caf443bb94bdbdd79f168856ad1fd61009002a729bc3483b113f",
|
|
@@ -172,11 +172,11 @@
|
|
|
172
172
|
"gen-ts/identity-context.ts": "sha256:4b8151a321e224229250d214ef3e17f2ac986bb54ff0aadbb4509481724f6883",
|
|
173
173
|
"gen-ts/index.ts": "sha256:5e903bb40fbf6599dc0d65171eaef7bc62b52d4cea090124a0c51ef876ad2909",
|
|
174
174
|
"gen-ts/integration-connect-result.ts": "sha256:4b10f169b6e1af364e9b418de21caa9fadbfb77b43cbff77d741cfae0b52180c",
|
|
175
|
-
"gen-ts/integration-error-details.ts": "sha256:
|
|
176
|
-
"gen-ts/integration-execute-input-rules.ts": "sha256:
|
|
177
|
-
"gen-ts/integration-execute-request.ts": "sha256:
|
|
178
|
-
"gen-ts/integration-execute-result.ts": "sha256:
|
|
179
|
-
"gen-ts/integration-operations.ts": "sha256:
|
|
175
|
+
"gen-ts/integration-error-details.ts": "sha256:ec082f2d302c1ef6c0bf768134c2bde4efa5fd5acf9cc0d3ccc4676e857ae43c",
|
|
176
|
+
"gen-ts/integration-execute-input-rules.ts": "sha256:ea64438a14f2665d05a9da315f77a075d4d57ff46d93ed910dd44ff6186940f4",
|
|
177
|
+
"gen-ts/integration-execute-request.ts": "sha256:9796ad64fe891a973c669776e050a07dbf173f1fcb8580b7626dfe2cdb229c62",
|
|
178
|
+
"gen-ts/integration-execute-result.ts": "sha256:e4772c27615de03284f7686aa49f92ff83b79a12587292129783443cf3ca0f80",
|
|
179
|
+
"gen-ts/integration-operations.ts": "sha256:07abf1ad13798132a840aa0b03f36ded5602887a5a205f27e859631b66a93a75",
|
|
180
180
|
"gen-ts/internal-configuration-request.ts": "sha256:7032437797473fa1c581d134adef2f3d4b4f4132f482cd17743e9d47097886bc",
|
|
181
181
|
"gen-ts/kit-bundle-manifest.ts": "sha256:73f5271d2eb3b5ce91e28933c5ab6883615c72a3808aa386f860f58f6df8edf6",
|
|
182
182
|
"gen-ts/kit-lock.ts": "sha256:06bddeaf1e2c449c9cc0dbbc696210355a9005349c604d4050eb22385fb4c22e",
|
|
@@ -185,7 +185,7 @@
|
|
|
185
185
|
"gen-ts/promotion-request.ts": "sha256:ac87da1d4b43cc4418215fd26e154830a78b58dfa9a83ae0e7e073e50ccc871e",
|
|
186
186
|
"gen-ts/promotion-response.ts": "sha256:f1c9cafac96faeb02a443a31786f67714e818f38d90108e7af41958396524d6f",
|
|
187
187
|
"gen-ts/resolved-app-serving.ts": "sha256:3264e85827be47bf391781cb13a1e58318d356f7bee8c2ff3e5b00a062253b23",
|
|
188
|
-
"gen-ts/saas-connection.ts": "sha256:
|
|
188
|
+
"gen-ts/saas-connection.ts": "sha256:c6590d685f23b292de6b29a142f94050145c7a88cf165f554e6fe9ac28142ec4",
|
|
189
189
|
"gen-ts/sanitized-binding-digest-helper.ts": "sha256:c47d7fdc20500e2e72c23fe39ecdd610fc397c47fcba51335ebec3c380fe6872",
|
|
190
190
|
"gen-ts/sanitized-binding-evidence.ts": "sha256:fb3c753ebba1caf71bc85afee13db27172c17208b89258880e46edc7169b2744",
|
|
191
191
|
"gen-ts/secret-reference.ts": "sha256:731fbcde7315cb4128d5b01bdbe6e6f248f13c7ad8dea04a3a4e927ac4890198",
|
|
@@ -97,9 +97,11 @@ export type DeclaredConnection = {
|
|
|
97
97
|
'zohobooks.invoice.markSent'?: UserModeChannelOperation;
|
|
98
98
|
'zohobooks.creditnote.create'?: UserModeChannelOperation;
|
|
99
99
|
'zohobooks.creditnote.read'?: UserModeChannelOperation;
|
|
100
|
+
'mcp.tool.call'?: McpUserOperation;
|
|
100
101
|
};
|
|
102
|
+
mcp?: McpToolSelection;
|
|
101
103
|
};
|
|
102
|
-
export type IntegrationConnectionKind = 'saas' | 'database' | 'service';
|
|
104
|
+
export type IntegrationConnectionKind = 'saas' | 'database' | 'service' | 'mcp';
|
|
103
105
|
/**
|
|
104
106
|
* Whose authority an operation runs under. Fixed per operation, except the declared-mode Slack operations (slack.message.post; since 0.71.0 also slack.channel.history, slack.message.update, slack.message.delete): declared per app for the access request, and named per call among the app's approved modes (execute request `mode`, 0.55.0).
|
|
105
107
|
*/
|
|
@@ -118,7 +120,11 @@ export type ResourceNames = IntegrationAlias[];
|
|
|
118
120
|
*/
|
|
119
121
|
export type ColumnName = string;
|
|
120
122
|
/**
|
|
121
|
-
*
|
|
123
|
+
* Opaque, case-sensitive provider tool name. Never interpreted as a source alias or endpoint.
|
|
124
|
+
*/
|
|
125
|
+
export type McpToolName = string;
|
|
126
|
+
/**
|
|
127
|
+
* Committed `.isomorph/integrations.json`: the app's declared use of tenant-wide integration connections. Keys are logical connection aliases (the governance sourceId); resources are logical names (Slack channel alias, warehouse view name), never IDs, tokens or URLs. The operation set is closed (eighty-one operations since 0.86.0, ADR 0018, ADR 0022, ADR 0024, ADR 0028, ADR 0029 and ADR 0032). Each operation carries a fixed identity mode — slack.dm.send=app, slack.user.lookup=app, every gmail.* operation=user, every basecamp.* operation=user, every sharepoint.* operation=user, every calendar.*, drive.*, docs.*, sheets.*, outlook.*, onedrive.*, excel.* and teams.* operation=user (0.86.0), warehouse.view.read=app, service.request=app — except the declared-mode Slack operations (slack.message.post, and since 0.71.0 slack.channel.history, slack.message.update and slack.message.delete), whose mode the app DECLARES: `app` acts as the company's Slack app (the one audited bot identity; a post goes out under the IT-approved per-app display name when the connection declares `presentation`), `user` acts as the signed-in person after their own consent (reads what they can read, edits what they wrote). The declared mode is the one the app requests access for; an app may hold approved grants for both modes after two requests, and each declared-mode call names which approved mode it runs under (`mode` on the execute request, 0.55.0) — a mode IT did not approve is refused, never swapped for the other. A `saas` connection may declare only the Slack, Gmail, Basecamp, SharePoint, phone, Google Workspace (calendar, drive, docs, sheets) and Microsoft 365 (outlook, onedrive, excel, teams) operations and a `database` connection only warehouse.view.read; `presentation` is a `saas` connection's optional per-app display name and icon for app-mode Slack posts, shown to IT at approval time and applied only from the approved grant. Gmail is user-mode only (reads, one send); its single resource is the fixed `inbox` alias. Basecamp (0.76.0, ADR 0022) is user-mode only too: basecamp.project.list runs on the fixed `account` alias (the company's pinned Basecamp account) and every other basecamp.* operation on a project alias IT mapped in the connection's `channels` map, so Basecamp itself refuses an id outside that project. SharePoint (0.78.0, ADR 0024) is user-mode only as well: every sharepoint.* operation runs on a site alias IT mapped in the connection's `channels` map (a Microsoft Graph site id), so Graph itself refuses a list, item or file outside that site. Google Workspace and Microsoft 365 (0.86.0, ADR 0032) are user-mode only too: every calendar.*, drive.*, docs.*, sheets.*, outlook.*, onedrive.* and excel.* operation runs on the provider's one fixed alias for the signed-in person's own data (governance resolves it, the way Gmail's is `inbox`; the contract does not pin the literal), and every teams.* operation on a channel alias IT mapped in the connection's `channels` map (a Teams team and channel id), so Graph itself refuses a message outside that channel. slack.dm.send and slack.user.lookup address people by email rather than a channel, so their single resource is the fixed `workspace` alias (the connection's installed workspace), the way Gmail's is `inbox`. This file also owns the shared IntegrationOperation / IntegrationIdentityMode / IntegrationEnvironment / IntegrationConnectionKind / IntegrationPresentation definitions referenced by the other integration schemas. Remote MCP connections add one generic user-only mcp.tool.call on server with exact accepted descriptors; an operation alone never authorizes every provider tool.
|
|
122
128
|
*/
|
|
123
129
|
export interface AppIntegrationsDeclaration {
|
|
124
130
|
schema: 'isomorph.app-integrations/2.0';
|
|
@@ -185,3 +191,54 @@ export interface ServiceOperation {
|
|
|
185
191
|
*/
|
|
186
192
|
resources: 'api'[];
|
|
187
193
|
}
|
|
194
|
+
export interface McpUserOperation {
|
|
195
|
+
identity: 'user';
|
|
196
|
+
/**
|
|
197
|
+
* @minItems 1
|
|
198
|
+
* @maxItems 1
|
|
199
|
+
*/
|
|
200
|
+
resources: 'server'[];
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Exact accepted tool selection. Runtime rejects duplicate names and bounds all selected descriptors across the app to 128 KiB serialized.
|
|
204
|
+
*/
|
|
205
|
+
export interface McpToolSelection {
|
|
206
|
+
/**
|
|
207
|
+
* @minItems 1
|
|
208
|
+
* @maxItems 64
|
|
209
|
+
*/
|
|
210
|
+
tools: McpSelectedTool[];
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Runtime verifies name equals descriptor.name and hash is SHA256 of canonical {name,inputSchema,outputSchema?}; annotations and explanatory text are excluded.
|
|
214
|
+
*/
|
|
215
|
+
export interface McpSelectedTool {
|
|
216
|
+
name: McpToolName;
|
|
217
|
+
contractHash: string;
|
|
218
|
+
descriptor: McpToolDescriptor;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Accepted provider descriptor. MCP schema dialect validation, in-document references and 64 KiB serialized descriptor bound are runtime checks; no remote references are fetched.
|
|
222
|
+
*/
|
|
223
|
+
export interface McpToolDescriptor {
|
|
224
|
+
name: McpToolName;
|
|
225
|
+
title?: string;
|
|
226
|
+
description?: string;
|
|
227
|
+
inputSchema: {
|
|
228
|
+
[k: string]: unknown;
|
|
229
|
+
};
|
|
230
|
+
outputSchema?: {
|
|
231
|
+
[k: string]: unknown;
|
|
232
|
+
};
|
|
233
|
+
annotations?: McpToolAnnotations;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Provider hints pinned with the accepted descriptor; never proof of authorization or safety.
|
|
237
|
+
*/
|
|
238
|
+
export interface McpToolAnnotations {
|
|
239
|
+
title?: string;
|
|
240
|
+
readOnlyHint?: boolean;
|
|
241
|
+
destructiveHint?: boolean;
|
|
242
|
+
idempotentHint?: boolean;
|
|
243
|
+
openWorldHint?: boolean;
|
|
244
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare const ContractRepositoryVersion: "0.
|
|
2
|
-
export declare const ContractPublishVersion: "0.
|
|
3
|
-
export declare const ContractPublishTag: "v0.
|
|
4
|
-
export declare const ContractSchemasDigest: "sha256:
|
|
1
|
+
export declare const ContractRepositoryVersion: "0.100.0.0";
|
|
2
|
+
export declare const ContractPublishVersion: "0.100.0";
|
|
3
|
+
export declare const ContractPublishTag: "v0.100.0";
|
|
4
|
+
export declare const ContractSchemasDigest: "sha256:5a49b987a272e49117b6f47b8fb90854b8eb128516aa5409ac8f016c97fb3c1b";
|
|
5
5
|
export declare const ContractAiFixturesDigest: "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
|
|
6
|
-
export declare const ContractGeneratedGoDigest: "sha256:
|
|
7
|
-
export declare const ContractGeneratedTypeScriptDigest: "sha256:
|
|
6
|
+
export declare const ContractGeneratedGoDigest: "sha256:7052659c5f2394396b097b4102a5d4b0369c11ddc7aa46a6e839825fee65ad8a";
|
|
7
|
+
export declare const ContractGeneratedTypeScriptDigest: "sha256:5c9d13b601b1deb027b2518e4471316d72b079a647e99c3e26f0443f57861812";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
|
-
export const ContractRepositoryVersion = "0.
|
|
4
|
-
export const ContractPublishVersion = "0.
|
|
5
|
-
export const ContractPublishTag = "v0.
|
|
6
|
-
export const ContractSchemasDigest = "sha256:
|
|
3
|
+
export const ContractRepositoryVersion = "0.100.0.0";
|
|
4
|
+
export const ContractPublishVersion = "0.100.0";
|
|
5
|
+
export const ContractPublishTag = "v0.100.0";
|
|
6
|
+
export const ContractSchemasDigest = "sha256:5a49b987a272e49117b6f47b8fb90854b8eb128516aa5409ac8f016c97fb3c1b";
|
|
7
7
|
export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
|
|
8
|
-
export const ContractGeneratedGoDigest = "sha256:
|
|
9
|
-
export const ContractGeneratedTypeScriptDigest = "sha256:
|
|
8
|
+
export const ContractGeneratedGoDigest = "sha256:7052659c5f2394396b097b4102a5d4b0369c11ddc7aa46a6e839825fee65ad8a";
|
|
9
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:5c9d13b601b1deb027b2518e4471316d72b079a647e99c3e26f0443f57861812";
|
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Grant lifecycle state. Legal edges live in x-transitions; DENIED and REVOKED are terminal.
|
|
3
|
-
*/
|
|
4
|
-
export type DataGrantV2Status = 'REQUESTED' | 'GRANTED' | 'DENIED' | 'REVOKED';
|
|
5
|
-
/**
|
|
6
|
-
* Provider-side work for the current approved scope (credential mint, cleanup, installation check).
|
|
7
|
-
*/
|
|
8
|
-
export type DataGrantV2ProvisioningStatus = 'NONE' | 'PENDING' | 'FAILED' | 'DONE';
|
|
9
|
-
export type DataGrantV2CleanupStatus = 'PENDING' | 'FAILED' | 'DONE';
|
|
10
1
|
/**
|
|
11
2
|
* An app's integration grant for one connection, environment and identity mode (control table sk APP#<appId>#IGRANT#<environment>#<sourceId>#<mode>; grantId = base64url(JSON ["v2",appId,environment,sourceId,mode])). Additive to the legacy DataGrant (data-grant.schema.json), which is never consulted by v2 paths. A fresh REQUESTED record carries empty `operations`/`resources` until the attached request is approved; approved resources are structured `{name, columns?}` entries (a Slack channel alias, the fixed Gmail `inbox` alias, a Basecamp project alias or the fixed Basecamp `account` alias, a SharePoint site alias, a Google Workspace or Microsoft 365 provider's fixed alias or a Teams channel alias (0.86.0), or a warehouse view alias with its approved columns). Expiry is enforced from UTC time on every call and SDK calls never extend it; `expiredAt` is stamped by the recovery sweep afterwards. Status edges live in x-transitions; DENIED and REVOKED are terminal (a regrant after revocation is a new REQUESTED record once cleanup is DONE). Database grants add credentialRef/mintedPrincipal; both hold references only. An app-mode Slack grant may carry `presentation` (0.53.0): the IT-approved display name and icon the app's posts go out under, copied from the approved request and read by every post — never from the call. `identityMode` and `installation` are the deprecated 0.45.0 spellings: the record carries `mode`, and a SaaS grant runs on the connection's single installation.
|
|
12
3
|
*/
|
|
13
|
-
export
|
|
4
|
+
export type DataGrantV2 = {
|
|
14
5
|
schema: 'harbour.data-grant/2.0';
|
|
15
6
|
tenantId: string;
|
|
16
7
|
appId: string;
|
|
@@ -26,20 +17,21 @@ export interface DataGrantV2 {
|
|
|
26
17
|
* Whose authority an operation runs under. Fixed per operation, except the declared-mode Slack operations (slack.message.post; since 0.71.0 also slack.channel.history, slack.message.update, slack.message.delete): declared per app for the access request, and named per call among the app's approved modes (execute request `mode`, 0.55.0).
|
|
27
18
|
*/
|
|
28
19
|
mode: 'app' | 'user';
|
|
29
|
-
kind: 'saas' | 'database' | 'service';
|
|
20
|
+
kind: 'saas' | 'database' | 'service' | 'mcp';
|
|
30
21
|
status: DataGrantV2Status;
|
|
31
22
|
/**
|
|
32
23
|
* Approved operations; each must match this grant's mode. Empty until the first approval. At most the seventy-eight SaaS operations (0.86.0: eleven Slack and Gmail, eleven Basecamp, nine SharePoint, two phone, forty-five Google Workspace and Microsoft 365); a database grant holds up to two (warehouse.view.read, warehouse.table.append).
|
|
33
24
|
*
|
|
34
25
|
* @maxItems 92
|
|
35
26
|
*/
|
|
36
|
-
operations: ('slack.channel.history' | 'slack.message.post' | 'slack.message.update' | 'slack.message.delete' | 'slack.dm.send' | 'slack.user.lookup' | 'gmail.thread.list' | 'gmail.thread.read' | 'gmail.message.read' | 'gmail.message.send' | 'gmail.attachment.read' | 'basecamp.project.list' | 'basecamp.todolist.list' | 'basecamp.todo.list' | 'basecamp.todo.create' | 'basecamp.todo.complete' | 'basecamp.message.list' | 'basecamp.message.post' | 'basecamp.comment.list' | 'basecamp.comment.post' | 'basecamp.campfire.post' | 'basecamp.people.list' | 'sharepoint.list.list' | 'sharepoint.item.list' | 'sharepoint.item.create' | 'sharepoint.item.update' | 'sharepoint.drive.list' | 'sharepoint.file.list' | 'sharepoint.file.search' | 'sharepoint.file.read' | 'sharepoint.file.upload' | 'phone.sms.list' | 'phone.number.get' | 'calendar.calendar.list' | 'calendar.event.list' | 'calendar.event.read' | 'calendar.event.create' | 'calendar.event.update' | 'calendar.event.cancel' | 'drive.file.list' | 'drive.file.search' | 'drive.file.read' | 'drive.file.upload' | 'drive.folder.create' | 'docs.document.read' | 'docs.document.create' | 'docs.document.append' | 'docs.text.replace' | 'sheets.spreadsheet.read' | 'sheets.values.read' | 'sheets.values.append' | 'sheets.values.update' | 'sheets.values.clear' | 'sheets.spreadsheet.create' | 'outlook.message.list' | 'outlook.message.read' | 'outlook.attachment.read' | 'outlook.message.send' | 'outlook.message.reply' | 'outlook.event.list' | 'outlook.event.read' | 'outlook.event.create' | 'outlook.event.update' | 'outlook.event.cancel' | 'onedrive.file.list' | 'onedrive.file.search' | 'onedrive.file.read' | 'onedrive.file.upload' | 'onedrive.folder.create' | 'excel.worksheet.list' | 'excel.range.read' | 'excel.range.update' | 'excel.table.list' | 'excel.row.add' | 'excel.worksheet.add' | 'teams.message.list' | 'teams.message.post' | 'teams.reply.post' | 'warehouse.view.read' | 'warehouse.table.append' | 'service.request' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf' | 'zohobooks.salesorder.list' | 'zohobooks.salesorder.read' | 'zohobooks.invoice.reviseDraft' | 'zohobooks.invoice.markSent' | 'zohobooks.creditnote.create' | 'zohobooks.creditnote.read')[];
|
|
27
|
+
operations: ('slack.channel.history' | 'slack.message.post' | 'slack.message.update' | 'slack.message.delete' | 'slack.dm.send' | 'slack.user.lookup' | 'gmail.thread.list' | 'gmail.thread.read' | 'gmail.message.read' | 'gmail.message.send' | 'gmail.attachment.read' | 'basecamp.project.list' | 'basecamp.todolist.list' | 'basecamp.todo.list' | 'basecamp.todo.create' | 'basecamp.todo.complete' | 'basecamp.message.list' | 'basecamp.message.post' | 'basecamp.comment.list' | 'basecamp.comment.post' | 'basecamp.campfire.post' | 'basecamp.people.list' | 'sharepoint.list.list' | 'sharepoint.item.list' | 'sharepoint.item.create' | 'sharepoint.item.update' | 'sharepoint.drive.list' | 'sharepoint.file.list' | 'sharepoint.file.search' | 'sharepoint.file.read' | 'sharepoint.file.upload' | 'phone.sms.list' | 'phone.number.get' | 'calendar.calendar.list' | 'calendar.event.list' | 'calendar.event.read' | 'calendar.event.create' | 'calendar.event.update' | 'calendar.event.cancel' | 'drive.file.list' | 'drive.file.search' | 'drive.file.read' | 'drive.file.upload' | 'drive.folder.create' | 'docs.document.read' | 'docs.document.create' | 'docs.document.append' | 'docs.text.replace' | 'sheets.spreadsheet.read' | 'sheets.values.read' | 'sheets.values.append' | 'sheets.values.update' | 'sheets.values.clear' | 'sheets.spreadsheet.create' | 'outlook.message.list' | 'outlook.message.read' | 'outlook.attachment.read' | 'outlook.message.send' | 'outlook.message.reply' | 'outlook.event.list' | 'outlook.event.read' | 'outlook.event.create' | 'outlook.event.update' | 'outlook.event.cancel' | 'onedrive.file.list' | 'onedrive.file.search' | 'onedrive.file.read' | 'onedrive.file.upload' | 'onedrive.folder.create' | 'excel.worksheet.list' | 'excel.range.read' | 'excel.range.update' | 'excel.table.list' | 'excel.row.add' | 'excel.worksheet.add' | 'teams.message.list' | 'teams.message.post' | 'teams.reply.post' | 'warehouse.view.read' | 'warehouse.table.append' | 'service.request' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf' | 'zohobooks.salesorder.list' | 'zohobooks.salesorder.read' | 'zohobooks.invoice.reviseDraft' | 'zohobooks.invoice.markSent' | 'zohobooks.creditnote.create' | 'zohobooks.creditnote.read' | 'mcp.tool.call')[];
|
|
37
28
|
/**
|
|
38
29
|
* Approved logical resources. Never inherited by wildcard. Empty until the first approval.
|
|
39
30
|
*
|
|
40
31
|
* @maxItems 64
|
|
41
32
|
*/
|
|
42
33
|
resources: IntegrationResource[];
|
|
34
|
+
mcp?: McpToolSelection;
|
|
43
35
|
reviewedScope?: ReviewedIntegrationScope;
|
|
44
36
|
/**
|
|
45
37
|
* Absent only for explicitly approved ongoing production access.
|
|
@@ -81,7 +73,16 @@ export interface DataGrantV2 {
|
|
|
81
73
|
* Deprecated: a SaaS grant runs on the connection's single installation; the control plane never writes it.
|
|
82
74
|
*/
|
|
83
75
|
installation?: string;
|
|
84
|
-
}
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Grant lifecycle state. Legal edges live in x-transitions; DENIED and REVOKED are terminal.
|
|
79
|
+
*/
|
|
80
|
+
export type DataGrantV2Status = 'REQUESTED' | 'GRANTED' | 'DENIED' | 'REVOKED';
|
|
81
|
+
/**
|
|
82
|
+
* Provider-side work for the current approved scope (credential mint, cleanup, installation check).
|
|
83
|
+
*/
|
|
84
|
+
export type DataGrantV2ProvisioningStatus = 'NONE' | 'PENDING' | 'FAILED' | 'DONE';
|
|
85
|
+
export type DataGrantV2CleanupStatus = 'PENDING' | 'FAILED' | 'DONE';
|
|
85
86
|
/**
|
|
86
87
|
* One approved logical resource: a Slack channel alias, the fixed Gmail `inbox` alias, a Basecamp project alias or the fixed Basecamp `account` alias (0.76.0), a SharePoint site alias (0.78.0), a phone number alias (0.82.0), or a warehouse view alias with the approved columns.
|
|
87
88
|
*/
|
|
@@ -98,6 +99,55 @@ export interface IntegrationResource {
|
|
|
98
99
|
*/
|
|
99
100
|
columns?: string[];
|
|
100
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Exact accepted tool selection. Runtime rejects duplicate names and bounds all selected descriptors across the app to 128 KiB serialized.
|
|
104
|
+
*/
|
|
105
|
+
interface McpToolSelection {
|
|
106
|
+
/**
|
|
107
|
+
* @minItems 1
|
|
108
|
+
* @maxItems 64
|
|
109
|
+
*/
|
|
110
|
+
tools: McpSelectedTool[];
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Runtime verifies name equals descriptor.name and hash is SHA256 of canonical {name,inputSchema,outputSchema?}; annotations and explanatory text are excluded.
|
|
114
|
+
*/
|
|
115
|
+
interface McpSelectedTool {
|
|
116
|
+
/**
|
|
117
|
+
* Opaque, case-sensitive provider tool name. Never interpreted as a source alias or endpoint.
|
|
118
|
+
*/
|
|
119
|
+
name: string;
|
|
120
|
+
contractHash: string;
|
|
121
|
+
descriptor: McpToolDescriptor;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Accepted provider descriptor. MCP schema dialect validation, in-document references and 64 KiB serialized descriptor bound are runtime checks; no remote references are fetched.
|
|
125
|
+
*/
|
|
126
|
+
interface McpToolDescriptor {
|
|
127
|
+
/**
|
|
128
|
+
* Opaque, case-sensitive provider tool name. Never interpreted as a source alias or endpoint.
|
|
129
|
+
*/
|
|
130
|
+
name: string;
|
|
131
|
+
title?: string;
|
|
132
|
+
description?: string;
|
|
133
|
+
inputSchema: {
|
|
134
|
+
[k: string]: unknown;
|
|
135
|
+
};
|
|
136
|
+
outputSchema?: {
|
|
137
|
+
[k: string]: unknown;
|
|
138
|
+
};
|
|
139
|
+
annotations?: McpToolAnnotations;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Provider hints pinned with the accepted descriptor; never proof of authorization or safety.
|
|
143
|
+
*/
|
|
144
|
+
interface McpToolAnnotations {
|
|
145
|
+
title?: string;
|
|
146
|
+
readOnlyHint?: boolean;
|
|
147
|
+
destructiveHint?: boolean;
|
|
148
|
+
idempotentHint?: boolean;
|
|
149
|
+
openWorldHint?: boolean;
|
|
150
|
+
}
|
|
101
151
|
/**
|
|
102
152
|
* Only for SaaS grants mixing reviewed and automatic access: the previously human-reviewed scope. The remaining scope must satisfy current automatic rules. Homogeneous grants continue using approvedBy alone. Governance validates this is a subset of the grant; database behaviour is unchanged.
|
|
103
153
|
*/
|
|
@@ -105,7 +155,7 @@ export interface ReviewedIntegrationScope {
|
|
|
105
155
|
/**
|
|
106
156
|
* @maxItems 92
|
|
107
157
|
*/
|
|
108
|
-
operations: ('slack.channel.history' | 'slack.message.post' | 'slack.message.update' | 'slack.message.delete' | 'slack.dm.send' | 'slack.user.lookup' | 'gmail.thread.list' | 'gmail.thread.read' | 'gmail.message.read' | 'gmail.message.send' | 'gmail.attachment.read' | 'basecamp.project.list' | 'basecamp.todolist.list' | 'basecamp.todo.list' | 'basecamp.todo.create' | 'basecamp.todo.complete' | 'basecamp.message.list' | 'basecamp.message.post' | 'basecamp.comment.list' | 'basecamp.comment.post' | 'basecamp.campfire.post' | 'basecamp.people.list' | 'sharepoint.list.list' | 'sharepoint.item.list' | 'sharepoint.item.create' | 'sharepoint.item.update' | 'sharepoint.drive.list' | 'sharepoint.file.list' | 'sharepoint.file.search' | 'sharepoint.file.read' | 'sharepoint.file.upload' | 'phone.sms.list' | 'phone.number.get' | 'calendar.calendar.list' | 'calendar.event.list' | 'calendar.event.read' | 'calendar.event.create' | 'calendar.event.update' | 'calendar.event.cancel' | 'drive.file.list' | 'drive.file.search' | 'drive.file.read' | 'drive.file.upload' | 'drive.folder.create' | 'docs.document.read' | 'docs.document.create' | 'docs.document.append' | 'docs.text.replace' | 'sheets.spreadsheet.read' | 'sheets.values.read' | 'sheets.values.append' | 'sheets.values.update' | 'sheets.values.clear' | 'sheets.spreadsheet.create' | 'outlook.message.list' | 'outlook.message.read' | 'outlook.attachment.read' | 'outlook.message.send' | 'outlook.message.reply' | 'outlook.event.list' | 'outlook.event.read' | 'outlook.event.create' | 'outlook.event.update' | 'outlook.event.cancel' | 'onedrive.file.list' | 'onedrive.file.search' | 'onedrive.file.read' | 'onedrive.file.upload' | 'onedrive.folder.create' | 'excel.worksheet.list' | 'excel.range.read' | 'excel.range.update' | 'excel.table.list' | 'excel.row.add' | 'excel.worksheet.add' | 'teams.message.list' | 'teams.message.post' | 'teams.reply.post' | 'warehouse.view.read' | 'warehouse.table.append' | 'service.request' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf' | 'zohobooks.salesorder.list' | 'zohobooks.salesorder.read' | 'zohobooks.invoice.reviseDraft' | 'zohobooks.invoice.markSent' | 'zohobooks.creditnote.create' | 'zohobooks.creditnote.read')[];
|
|
158
|
+
operations: ('slack.channel.history' | 'slack.message.post' | 'slack.message.update' | 'slack.message.delete' | 'slack.dm.send' | 'slack.user.lookup' | 'gmail.thread.list' | 'gmail.thread.read' | 'gmail.message.read' | 'gmail.message.send' | 'gmail.attachment.read' | 'basecamp.project.list' | 'basecamp.todolist.list' | 'basecamp.todo.list' | 'basecamp.todo.create' | 'basecamp.todo.complete' | 'basecamp.message.list' | 'basecamp.message.post' | 'basecamp.comment.list' | 'basecamp.comment.post' | 'basecamp.campfire.post' | 'basecamp.people.list' | 'sharepoint.list.list' | 'sharepoint.item.list' | 'sharepoint.item.create' | 'sharepoint.item.update' | 'sharepoint.drive.list' | 'sharepoint.file.list' | 'sharepoint.file.search' | 'sharepoint.file.read' | 'sharepoint.file.upload' | 'phone.sms.list' | 'phone.number.get' | 'calendar.calendar.list' | 'calendar.event.list' | 'calendar.event.read' | 'calendar.event.create' | 'calendar.event.update' | 'calendar.event.cancel' | 'drive.file.list' | 'drive.file.search' | 'drive.file.read' | 'drive.file.upload' | 'drive.folder.create' | 'docs.document.read' | 'docs.document.create' | 'docs.document.append' | 'docs.text.replace' | 'sheets.spreadsheet.read' | 'sheets.values.read' | 'sheets.values.append' | 'sheets.values.update' | 'sheets.values.clear' | 'sheets.spreadsheet.create' | 'outlook.message.list' | 'outlook.message.read' | 'outlook.attachment.read' | 'outlook.message.send' | 'outlook.message.reply' | 'outlook.event.list' | 'outlook.event.read' | 'outlook.event.create' | 'outlook.event.update' | 'outlook.event.cancel' | 'onedrive.file.list' | 'onedrive.file.search' | 'onedrive.file.read' | 'onedrive.file.upload' | 'onedrive.folder.create' | 'excel.worksheet.list' | 'excel.range.read' | 'excel.range.update' | 'excel.table.list' | 'excel.row.add' | 'excel.worksheet.add' | 'teams.message.list' | 'teams.message.post' | 'teams.reply.post' | 'warehouse.view.read' | 'warehouse.table.append' | 'service.request' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf' | 'zohobooks.salesorder.list' | 'zohobooks.salesorder.read' | 'zohobooks.invoice.reviseDraft' | 'zohobooks.invoice.markSent' | 'zohobooks.creditnote.create' | 'zohobooks.creditnote.read' | 'mcp.tool.call')[];
|
|
109
159
|
/**
|
|
110
160
|
* @maxItems 64
|
|
111
161
|
*/
|
|
@@ -5,7 +5,7 @@ export type IntegrationErrorCategory = 'AUTH_REQUIRED' | 'FORBIDDEN' | 'NOT_FOUN
|
|
|
5
5
|
/**
|
|
6
6
|
* Stable reason codes. SEND_OUTCOME_UNKNOWN: dispatch happened but the outcome is unknown; never re-post automatically. SEND_KEY_REUSED: the idempotency key was seen with a different payload or subject. GRANT_DENIED: IT denied the request. TOKEN_REFRESH_PENDING: another call holds the refresh lease; retry shortly. REQUEST_PENDING: a different request for this grant is still open. INPUT_INVALID: the operation input failed its bounds. IDEMPOTENCY_KEY_REQUIRED: a send without a UUID idempotencyKey. SEND_IN_PROGRESS: a retry arrived while the first send of that key is still running. CONNECTION_NOT_FOUND / APP_NOT_FOUND / GRANT_NOT_FOUND: the named record does not exist. AUTH_REQUIRED: no verified caller. UNAVAILABLE: the governance dependency (store, provider seam) is unreachable. MODE_NOT_GRANTED (403 FORBIDDEN, 0.55.0): a slack.message.post named a mode (app or user) IT has not approved for this app; the post is never served under the other mode. MODE_REQUIRED (400 VALIDATION_FAILED, 0.55.0): the app holds approved grants for both modes and the post named neither. SAMPLE_ROWS_NOT_ALLOWED (400 VALIDATION_FAILED, 0.74.0): an execute request carried sampleRows on any route but the development one. A sample value that does not parse as the column's recorded type is INPUT_INVALID, naming the column and the row.
|
|
7
7
|
*/
|
|
8
|
-
export type IntegrationErrorCode = 'USER_CONNECTION_REQUIRED' | 'USER_RECONNECT_REQUIRED' | 'GRANT_NOT_READY' | 'GRANT_EXPIRED' | 'GRANT_REVOKED' | 'CONNECTION_DISABLED' | 'OPERATION_NOT_DECLARED' | 'RESOURCE_NOT_APPROVED' | 'IDENTITY_MODE_MISMATCH' | 'SEND_OUTCOME_UNKNOWN' | 'SEND_KEY_REUSED' | 'PROVIDER_RATE_LIMITED' | 'PROVIDER_UNAVAILABLE' | 'REQUEST_TOO_LARGE' | 'RESULT_TOO_LARGE' | 'DEADLINE_EXCEEDED' | 'APP_ACCESS_REQUIRED' | 'GRANT_DENIED' | 'TOKEN_REFRESH_PENDING' | 'REQUEST_PENDING' | 'INPUT_INVALID' | 'IDEMPOTENCY_KEY_REQUIRED' | 'SEND_IN_PROGRESS' | 'CONNECTION_NOT_FOUND' | 'APP_NOT_FOUND' | 'GRANT_NOT_FOUND' | 'AUTH_REQUIRED' | 'UNAVAILABLE' | 'MODE_NOT_GRANTED' | 'MODE_REQUIRED' | 'SAMPLE_ROWS_NOT_ALLOWED';
|
|
8
|
+
export type IntegrationErrorCode = 'USER_CONNECTION_REQUIRED' | 'USER_RECONNECT_REQUIRED' | 'GRANT_NOT_READY' | 'GRANT_EXPIRED' | 'GRANT_REVOKED' | 'CONNECTION_DISABLED' | 'OPERATION_NOT_DECLARED' | 'RESOURCE_NOT_APPROVED' | 'IDENTITY_MODE_MISMATCH' | 'SEND_OUTCOME_UNKNOWN' | 'SEND_KEY_REUSED' | 'PROVIDER_RATE_LIMITED' | 'PROVIDER_UNAVAILABLE' | 'REQUEST_TOO_LARGE' | 'RESULT_TOO_LARGE' | 'DEADLINE_EXCEEDED' | 'APP_ACCESS_REQUIRED' | 'GRANT_DENIED' | 'TOKEN_REFRESH_PENDING' | 'REQUEST_PENDING' | 'INPUT_INVALID' | 'IDEMPOTENCY_KEY_REQUIRED' | 'SEND_IN_PROGRESS' | 'CONNECTION_NOT_FOUND' | 'APP_NOT_FOUND' | 'GRANT_NOT_FOUND' | 'AUTH_REQUIRED' | 'UNAVAILABLE' | 'MODE_NOT_GRANTED' | 'MODE_REQUIRED' | 'SAMPLE_ROWS_NOT_ALLOWED' | 'CALL_IN_PROGRESS' | 'CALL_OUTCOME_UNKNOWN' | 'KEY_REUSED' | 'MCP_TOOL_NOT_GRANTED' | 'MCP_ARGUMENTS_INVALID' | 'MCP_OUTPUT_INVALID' | 'MCP_CONNECTION_FAILED' | 'MCP_TOOL_ERROR' | 'MCP_BUSY' | 'MCP_OAUTH_SETUP_REQUIRED';
|
|
9
9
|
/**
|
|
10
10
|
* The `error` member of an integration failure response `{error, requestId}` on the execute/connect routes; the SDK maps it onto IsomorphError(category, message, details). `category` is the app-SDK IsomorphErrorCategory (not the deployment pipeline's dot-path error-category registry), with the HTTP status fixed per category: 401 AUTH_REQUIRED, 403 FORBIDDEN (denied/revoked/expired), 404 NOT_FOUND (unknown app/connection/resource), 409 CONFLICT (pending provisioning/consent/concurrent request), 400 or 413 VALIDATION_FAILED (invalid input / size overflow), 429 RATE_LIMITED (+ Retry-After header), 503 UNAVAILABLE. `details.code` is the closed stable reason set; `message` is human-facing and never carries provider error bodies, tokens or SQL.
|
|
11
11
|
*/
|
|
@@ -2556,6 +2556,21 @@ export declare const IntegrationExecuteInputRules: {
|
|
|
2556
2556
|
};
|
|
2557
2557
|
};
|
|
2558
2558
|
};
|
|
2559
|
+
readonly "mcp.tool.call": {
|
|
2560
|
+
readonly idempotencyKey: false;
|
|
2561
|
+
readonly fields: {
|
|
2562
|
+
readonly tool: {
|
|
2563
|
+
readonly kind: "string";
|
|
2564
|
+
readonly required: true;
|
|
2565
|
+
readonly minLength: 1;
|
|
2566
|
+
readonly maxLength: 128;
|
|
2567
|
+
};
|
|
2568
|
+
readonly arguments: {
|
|
2569
|
+
readonly kind: "object";
|
|
2570
|
+
readonly required: true;
|
|
2571
|
+
};
|
|
2572
|
+
};
|
|
2573
|
+
};
|
|
2559
2574
|
};
|
|
2560
2575
|
export type IntegrationExecuteOperation = keyof typeof IntegrationExecuteInputRules;
|
|
2561
2576
|
/** The upper bound of one integer input as a literal type: integrationExecuteInputMaximum('slack.channel.history', 'limit') is 15. */
|
|
@@ -792,6 +792,13 @@ export const IntegrationExecuteInputRules = {
|
|
|
792
792
|
documentId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
|
|
793
793
|
},
|
|
794
794
|
},
|
|
795
|
+
"mcp.tool.call": {
|
|
796
|
+
idempotencyKey: false,
|
|
797
|
+
fields: {
|
|
798
|
+
tool: { kind: "string", required: true, minLength: 1, maxLength: 128 },
|
|
799
|
+
arguments: { kind: "object", required: true },
|
|
800
|
+
},
|
|
801
|
+
},
|
|
795
802
|
};
|
|
796
803
|
/** The upper bound of one integer input as a literal type: integrationExecuteInputMaximum('slack.channel.history', 'limit') is 15. */
|
|
797
804
|
export function integrationExecuteInputMaximum(operation, field) {
|
|
@@ -9,7 +9,7 @@ export type IntegrationExecuteRequest = {
|
|
|
9
9
|
/**
|
|
10
10
|
* Closed operation set. Extending it is a contracts change. 0.86.0 (ADR 0032) adds the forty-five Google Workspace and Microsoft 365 operations, every one user mode only: on the provider's fixed alias for the signed-in person's own data, calendar.calendar.list, calendar.event.list, calendar.event.read, calendar.event.create (a receipted write: explicit action, idempotencyKey), calendar.event.update and calendar.event.cancel (idempotent at Google, no key); drive.file.list, drive.file.search, drive.file.read, drive.file.upload and drive.folder.create (receipted writes); docs.document.read, docs.document.create (receipted), docs.document.append and docs.text.replace (no key); sheets.spreadsheet.read, sheets.values.read, sheets.values.append (receipted), sheets.values.update and sheets.values.clear (no key), sheets.spreadsheet.create (receipted); outlook.message.list, outlook.message.read, outlook.attachment.read, outlook.message.send and outlook.message.reply (receipted sends, as gmail.message.send), outlook.event.list, outlook.event.read, outlook.event.create (receipted), outlook.event.update and outlook.event.cancel (no key); onedrive.file.list, onedrive.file.search, onedrive.file.read, onedrive.file.upload and onedrive.folder.create (receipted); excel.worksheet.list, excel.range.read, excel.range.update (no key), excel.table.list, excel.row.add and excel.worksheet.add (receipted); and on a Teams channel alias (a key of the connection's `channels` map) teams.message.list, teams.message.post and teams.reply.post (receipted). 0.78.0 (ADR 0024) adds the nine SharePoint operations, every one user mode only on a site alias (a key of the connection's `channels` map, holding a Microsoft Graph site id): sharepoint.list.list, sharepoint.item.list, sharepoint.item.create (a receipted write: explicit action, idempotencyKey), sharepoint.item.update (a PATCH, idempotent at Graph, no key), sharepoint.drive.list, sharepoint.file.list, sharepoint.file.search, sharepoint.file.read and sharepoint.file.upload (a receipted write). 0.76.0 (ADR 0022) adds the eleven Basecamp operations, every one user mode only like gmail.*: basecamp.project.list (the projects of the company's pinned Basecamp account; its resource is the fixed `account` alias), and on one mapped project (the resource is a project alias, a key of the connection's `channels` map) basecamp.todolist.list, basecamp.todo.list, basecamp.todo.create (a receipted write: explicit action, idempotencyKey), basecamp.todo.complete (idempotent at Basecamp, no key), basecamp.message.list, basecamp.message.post, basecamp.comment.list, basecamp.comment.post, basecamp.campfire.post (the three posts are receipted writes) and basecamp.people.list. gmail.message.send (0.50.0) sends one email as the signed-in person: a send like slack.message.post (explicit Send, idempotencyKey, write receipt) under user identity; since 0.71.0 it may carry an HTML body and attachments. slack.message.post (0.53.0) runs in the mode the app declares: app (the company's Slack app, under the IT-approved per-app name) or user (the signed-in person, after their consent); since 0.55.0 each call names which of the approved modes it runs under. 0.71.0 (ADR 0018) adds slack.message.update and slack.message.delete (declared mode, like post), slack.dm.send (app mode: a direct message to 1..8 workspace members named by email), slack.user.lookup (app mode: email to Slack user id), gmail.thread.read (every message of one thread) and gmail.attachment.read (one attachment's bytes), and lets slack.channel.history run in app mode as well as user mode. 0.82.0 (ADR 0028) adds phone.sms.list (app mode only, a number alias from a phone connection's `channels` map: the SMS received on that number since a time) and warehouse.table.append (app mode only on a database connection, a receipted write with idempotencyKey: rows appended to a view alias whose mapping says `access: append`). 0.83.0 (ADR 0029) adds phone.number.get (app mode only, read-only, no input, on a number alias from a phone connection's `channels` map: the E.164 number that alias maps to, so the app — or a computer-use agent it drives — can type it into a portal that signs in by mobile number). 0.85.0 (ADR 0031) raises warehouse.table.append's `rows` from 1..500 to 1..5000 records (the byte cap stays governance's, now 8 MiB), so a downloaded report of a few thousand rows lands in one call.
|
|
11
11
|
*/
|
|
12
|
-
operation: 'slack.channel.history' | 'slack.message.post' | 'slack.message.update' | 'slack.message.delete' | 'slack.dm.send' | 'slack.user.lookup' | 'gmail.thread.list' | 'gmail.thread.read' | 'gmail.message.read' | 'gmail.message.send' | 'gmail.attachment.read' | 'basecamp.project.list' | 'basecamp.todolist.list' | 'basecamp.todo.list' | 'basecamp.todo.create' | 'basecamp.todo.complete' | 'basecamp.message.list' | 'basecamp.message.post' | 'basecamp.comment.list' | 'basecamp.comment.post' | 'basecamp.campfire.post' | 'basecamp.people.list' | 'sharepoint.list.list' | 'sharepoint.item.list' | 'sharepoint.item.create' | 'sharepoint.item.update' | 'sharepoint.drive.list' | 'sharepoint.file.list' | 'sharepoint.file.search' | 'sharepoint.file.read' | 'sharepoint.file.upload' | 'phone.sms.list' | 'phone.number.get' | 'calendar.calendar.list' | 'calendar.event.list' | 'calendar.event.read' | 'calendar.event.create' | 'calendar.event.update' | 'calendar.event.cancel' | 'drive.file.list' | 'drive.file.search' | 'drive.file.read' | 'drive.file.upload' | 'drive.folder.create' | 'docs.document.read' | 'docs.document.create' | 'docs.document.append' | 'docs.text.replace' | 'sheets.spreadsheet.read' | 'sheets.values.read' | 'sheets.values.append' | 'sheets.values.update' | 'sheets.values.clear' | 'sheets.spreadsheet.create' | 'outlook.message.list' | 'outlook.message.read' | 'outlook.attachment.read' | 'outlook.message.send' | 'outlook.message.reply' | 'outlook.event.list' | 'outlook.event.read' | 'outlook.event.create' | 'outlook.event.update' | 'outlook.event.cancel' | 'onedrive.file.list' | 'onedrive.file.search' | 'onedrive.file.read' | 'onedrive.file.upload' | 'onedrive.folder.create' | 'excel.worksheet.list' | 'excel.range.read' | 'excel.range.update' | 'excel.table.list' | 'excel.row.add' | 'excel.worksheet.add' | 'teams.message.list' | 'teams.message.post' | 'teams.reply.post' | 'warehouse.view.read' | 'warehouse.table.append' | 'service.request' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf' | 'zohobooks.salesorder.list' | 'zohobooks.salesorder.read' | 'zohobooks.invoice.reviseDraft' | 'zohobooks.invoice.markSent' | 'zohobooks.creditnote.create' | 'zohobooks.creditnote.read';
|
|
12
|
+
operation: 'slack.channel.history' | 'slack.message.post' | 'slack.message.update' | 'slack.message.delete' | 'slack.dm.send' | 'slack.user.lookup' | 'gmail.thread.list' | 'gmail.thread.read' | 'gmail.message.read' | 'gmail.message.send' | 'gmail.attachment.read' | 'basecamp.project.list' | 'basecamp.todolist.list' | 'basecamp.todo.list' | 'basecamp.todo.create' | 'basecamp.todo.complete' | 'basecamp.message.list' | 'basecamp.message.post' | 'basecamp.comment.list' | 'basecamp.comment.post' | 'basecamp.campfire.post' | 'basecamp.people.list' | 'sharepoint.list.list' | 'sharepoint.item.list' | 'sharepoint.item.create' | 'sharepoint.item.update' | 'sharepoint.drive.list' | 'sharepoint.file.list' | 'sharepoint.file.search' | 'sharepoint.file.read' | 'sharepoint.file.upload' | 'phone.sms.list' | 'phone.number.get' | 'calendar.calendar.list' | 'calendar.event.list' | 'calendar.event.read' | 'calendar.event.create' | 'calendar.event.update' | 'calendar.event.cancel' | 'drive.file.list' | 'drive.file.search' | 'drive.file.read' | 'drive.file.upload' | 'drive.folder.create' | 'docs.document.read' | 'docs.document.create' | 'docs.document.append' | 'docs.text.replace' | 'sheets.spreadsheet.read' | 'sheets.values.read' | 'sheets.values.append' | 'sheets.values.update' | 'sheets.values.clear' | 'sheets.spreadsheet.create' | 'outlook.message.list' | 'outlook.message.read' | 'outlook.attachment.read' | 'outlook.message.send' | 'outlook.message.reply' | 'outlook.event.list' | 'outlook.event.read' | 'outlook.event.create' | 'outlook.event.update' | 'outlook.event.cancel' | 'onedrive.file.list' | 'onedrive.file.search' | 'onedrive.file.read' | 'onedrive.file.upload' | 'onedrive.folder.create' | 'excel.worksheet.list' | 'excel.range.read' | 'excel.range.update' | 'excel.table.list' | 'excel.row.add' | 'excel.worksheet.add' | 'teams.message.list' | 'teams.message.post' | 'teams.reply.post' | 'warehouse.view.read' | 'warehouse.table.append' | 'service.request' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf' | 'zohobooks.salesorder.list' | 'zohobooks.salesorder.read' | 'zohobooks.invoice.reviseDraft' | 'zohobooks.invoice.markSent' | 'zohobooks.creditnote.create' | 'zohobooks.creditnote.read' | 'mcp.tool.call';
|
|
13
13
|
/**
|
|
14
14
|
* Tenant-wide logical alias of a connection (governance sourceId) or of a resource under it.
|
|
15
15
|
*/
|
|
@@ -379,13 +379,23 @@ export type IntegrationExecuteRequest = {
|
|
|
379
379
|
lineItemId?: string;
|
|
380
380
|
salesOrderItemId?: string;
|
|
381
381
|
}[];
|
|
382
|
+
/**
|
|
383
|
+
* Opaque, case-sensitive provider tool name. Never interpreted as a source alias or endpoint.
|
|
384
|
+
*/
|
|
385
|
+
tool?: string;
|
|
386
|
+
/**
|
|
387
|
+
* Validated against the accepted tool inputSchema at runtime; arbitrary nested provider arguments are permitted only here.
|
|
388
|
+
*/
|
|
389
|
+
arguments?: {
|
|
390
|
+
[k: string]: unknown;
|
|
391
|
+
};
|
|
382
392
|
};
|
|
383
393
|
/**
|
|
384
|
-
* UUID of one explicit Send action; required for the sends (slack.message.post, slack.dm.send, gmail.message.send), the receipted Basecamp writes (basecamp.todo.create, basecamp.message.post, basecamp.comment.post, basecamp.campfire.post; 0.76.0) the receipted SharePoint writes (sharepoint.item.create, sharepoint.file.upload; 0.78.0) the receipted warehouse append (warehouse.table.append; 0.82.0, where it is also the BigQuery load job id) and the receipted Google Workspace and Microsoft 365 writes (0.86.0: calendar.event.create, drive.file.upload, drive.folder.create, docs.document.create, sheets.values.append, sheets.spreadsheet.create, outlook.message.send, outlook.message.reply, outlook.event.create, onedrive.file.upload, onedrive.folder.create, excel.row.add, excel.worksheet.add, teams.message.post, teams.reply.post), refused everywhere else. The same key with the same payload and subject returns the recorded outcome for seven days.
|
|
394
|
+
* UUID of one explicit Send action; required for the sends (slack.message.post, slack.dm.send, gmail.message.send), the receipted Basecamp writes (basecamp.todo.create, basecamp.message.post, basecamp.comment.post, basecamp.campfire.post; 0.76.0) the receipted SharePoint writes (sharepoint.item.create, sharepoint.file.upload; 0.78.0) the receipted warehouse append (warehouse.table.append; 0.82.0, where it is also the BigQuery load job id) and the receipted Google Workspace and Microsoft 365 writes (0.86.0: calendar.event.create, drive.file.upload, drive.folder.create, docs.document.create, sheets.values.append, sheets.spreadsheet.create, outlook.message.send, outlook.message.reply, outlook.event.create, onedrive.file.upload, onedrive.folder.create, excel.row.add, excel.worksheet.add, teams.message.post, teams.reply.post), refused everywhere else. The same key with the same payload and subject returns the recorded outcome for seven days. MCP permits omission only for an accepted readOnlyHint=true descriptor; runtime requires the UUID for unknown/write tools.
|
|
385
395
|
*/
|
|
386
396
|
idempotencyKey?: string;
|
|
387
397
|
/**
|
|
388
|
-
* The declared-mode Slack operations only (slack.message.post since 0.55.0; slack.channel.history, slack.message.update and slack.message.delete since 0.71.0): which of the app's IT-approved modes this call runs under — app (the company's Slack app; a post goes out under the grant's per-app name and the footer) or user (the signed-in person, after their consent; no name, no footer). Required when the app holds approved grants for both modes (else MODE_REQUIRED); may be omitted when it holds one, which is then used. A named mode without an approved grant is refused with MODE_NOT_GRANTED; governance never falls back to the other mode. Every other operation's mode is fixed, so the field is refused there.
|
|
398
|
+
* The declared-mode Slack operations only (slack.message.post since 0.55.0; slack.channel.history, slack.message.update and slack.message.delete since 0.71.0): which of the app's IT-approved modes this call runs under — app (the company's Slack app; a post goes out under the grant's per-app name and the footer) or user (the signed-in person, after their consent; no name, no footer). Required when the app holds approved grants for both modes (else MODE_REQUIRED); may be omitted when it holds one, which is then used. A named mode without an approved grant is refused with MODE_NOT_GRANTED; governance never falls back to the other mode. Every other operation's mode is fixed, so the field is refused there. MCP accepts explicit user only; shared app mode is deferred.
|
|
389
399
|
*/
|
|
390
400
|
mode?: 'app' | 'user';
|
|
391
401
|
/**
|
|
@@ -381,11 +381,38 @@ export type IntegrationExecuteResult = {
|
|
|
381
381
|
}[];
|
|
382
382
|
referenceNumber?: string;
|
|
383
383
|
}[];
|
|
384
|
+
mcp?: McpToolResult;
|
|
384
385
|
};
|
|
385
386
|
/**
|
|
386
387
|
* An event's state (0.86.0): confirmed (Google `confirmed`, Graph not cancelled and not tentative), tentative, or cancelled.
|
|
387
388
|
*/
|
|
388
389
|
export type CalendarEventStatus = 'confirmed' | 'tentative' | 'cancelled';
|
|
390
|
+
/**
|
|
391
|
+
* Bounded MCP CallToolResult. Content blocks are SDK-validated and redacted before delivery. Small results may be replayed in full; incomplete replay returns an explicit completion summary rather than executing again.
|
|
392
|
+
*/
|
|
393
|
+
export type McpToolResult = McpToolResult1 & {
|
|
394
|
+
/**
|
|
395
|
+
* @maxItems 256
|
|
396
|
+
*/
|
|
397
|
+
content?: {
|
|
398
|
+
[k: string]: unknown;
|
|
399
|
+
}[];
|
|
400
|
+
structuredContent?: {
|
|
401
|
+
[k: string]: unknown;
|
|
402
|
+
};
|
|
403
|
+
isError?: boolean;
|
|
404
|
+
replay?: {
|
|
405
|
+
complete: boolean;
|
|
406
|
+
summary?: string;
|
|
407
|
+
};
|
|
408
|
+
};
|
|
409
|
+
export type McpToolResult1 = {
|
|
410
|
+
[k: string]: unknown;
|
|
411
|
+
} | {
|
|
412
|
+
replay: {
|
|
413
|
+
complete?: false;
|
|
414
|
+
};
|
|
415
|
+
};
|
|
389
416
|
export interface ChannelMessage {
|
|
390
417
|
id: string;
|
|
391
418
|
text: string;
|
|
@@ -665,4 +665,12 @@ export declare const IntegrationOperations: {
|
|
|
665
665
|
readonly declaredMode: false;
|
|
666
666
|
readonly idempotencyKey: false;
|
|
667
667
|
};
|
|
668
|
+
readonly "mcp.tool.call": {
|
|
669
|
+
readonly kind: "mcp";
|
|
670
|
+
readonly identities: readonly ["user"];
|
|
671
|
+
readonly readOnly: false;
|
|
672
|
+
readonly declaredMode: false;
|
|
673
|
+
readonly idempotencyKey: false;
|
|
674
|
+
readonly runtimeIdempotency: true;
|
|
675
|
+
};
|
|
668
676
|
};
|
|
@@ -860,5 +860,15 @@ export const IntegrationOperations = {
|
|
|
860
860
|
"readOnly": true,
|
|
861
861
|
"declaredMode": false,
|
|
862
862
|
"idempotencyKey": false
|
|
863
|
+
},
|
|
864
|
+
"mcp.tool.call": {
|
|
865
|
+
"kind": "mcp",
|
|
866
|
+
"identities": [
|
|
867
|
+
"user"
|
|
868
|
+
],
|
|
869
|
+
"readOnly": false,
|
|
870
|
+
"declaredMode": false,
|
|
871
|
+
"idempotencyKey": false,
|
|
872
|
+
"runtimeIdempotency": true
|
|
863
873
|
}
|
|
864
874
|
};
|