@cmssy/mcp-server 0.123.1 → 0.124.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/README.md +13 -14
- package/dist/__tests__/hosted-server.test.js +17 -55
- package/dist/__tests__/hosted-server.test.js.map +1 -1
- package/dist/ai-tools-binder.d.ts +2 -4
- package/dist/ai-tools-binder.d.ts.map +1 -1
- package/dist/ai-tools-binder.js +4 -58
- package/dist/ai-tools-binder.js.map +1 -1
- package/dist/hosted-server.d.ts +0 -2
- package/dist/hosted-server.d.ts.map +1 -1
- package/dist/hosted-server.js +1 -2
- package/dist/hosted-server.js.map +1 -1
- package/dist/lib.d.ts +0 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +0 -1
- package/dist/lib.js.map +1 -1
- package/package.json +1 -1
- package/dist/__tests__/confirm-gate.test.d.ts +0 -2
- package/dist/__tests__/confirm-gate.test.d.ts.map +0 -1
- package/dist/__tests__/confirm-gate.test.js +0 -163
- package/dist/__tests__/confirm-gate.test.js.map +0 -1
- package/dist/confirm-gate.d.ts +0 -16
- package/dist/confirm-gate.d.ts.map +0 -1
- package/dist/confirm-gate.js +0 -60
- package/dist/confirm-gate.js.map +0 -1
package/README.md
CHANGED
|
@@ -215,7 +215,7 @@ model on every write.
|
|
|
215
215
|
| `update_record` | Update a record's data and/or transition its status |
|
|
216
216
|
| `delete_record` | Delete a record |
|
|
217
217
|
| `import_records` | Bulk import up to 1000 records; returns `{ importedCount, errors }` |
|
|
218
|
-
| `bulk_update_records` | Set data and/or status on up to 200 ids or every filter match
|
|
218
|
+
| `bulk_update_records` | Set data and/or status on up to 200 ids or every filter match |
|
|
219
219
|
|
|
220
220
|
Requires workspace permissions `MODELS_VIEW` (read) / `MODELS_CREATE` /
|
|
221
221
|
`MODELS_EDIT` / `MODELS_DELETE` depending on the operation.
|
|
@@ -242,10 +242,10 @@ are integer minor units (cents).** Order/discount write tools accept the
|
|
|
242
242
|
| `reopen_order` | Reopen a closed order |
|
|
243
243
|
| `create_return` | Open a return: lines, quantities, reasons, return-parcel tracking |
|
|
244
244
|
| `approve_return` | Approve a return the customer requested |
|
|
245
|
-
| `reject_return` | Reject a requested return
|
|
246
|
-
| `cancel_return` | Cancel a return not yet refunded
|
|
245
|
+
| `reject_return` | Reject a requested return |
|
|
246
|
+
| `cancel_return` | Cancel a return not yet refunded |
|
|
247
247
|
| `receive_return` | Record received units per line and how many go back to stock |
|
|
248
|
-
| `refund_return` | Record a refund for a return
|
|
248
|
+
| `refund_return` | Record a refund for a return |
|
|
249
249
|
| `complete_return` | Close a received return without a refund |
|
|
250
250
|
| `update_return_tracking` | Set the carrier and tracking number of the return parcel |
|
|
251
251
|
| `create_shipment` | Add a parcel (carrier, tracking number, link, status) to an order |
|
|
@@ -253,7 +253,7 @@ are integer minor units (cents).** Order/discount write tools accept the
|
|
|
253
253
|
| `set_order_pipeline_stage` | Move an order to a pipeline stage |
|
|
254
254
|
| `record_order_invoice` | Attach an invoice (number, url, provider) to an order |
|
|
255
255
|
| `list_carts` | List shopping carts (admin view, optional status filter) with their sales channel |
|
|
256
|
-
| `delete_carts` | Permanently delete 1-100 carts, all or nothing
|
|
256
|
+
| `delete_carts` | Permanently delete 1-100 carts, all or nothing |
|
|
257
257
|
| `list_discounts` | List discount codes (filter by enabled/type/code) |
|
|
258
258
|
| `get_discount` | Get a discount by id |
|
|
259
259
|
| `create_discount` | Create a discount (`percentage` / `fixed` / `free_shipping`) |
|
|
@@ -263,8 +263,8 @@ are integer minor units (cents).** Order/discount write tools accept the
|
|
|
263
263
|
| `bulk_update_products` | Bulk set/adjust status, stock, or price on selected products |
|
|
264
264
|
| `bulk_delete_products` | Bulk-delete selected product records |
|
|
265
265
|
| `set_product_tiers` | Set a product's record-level volume price breaks |
|
|
266
|
-
| `set_product_variants` | Replace a product's whole variant set
|
|
267
|
-
| `set_product_currency_prices` | Replace a product's prices and breaks in additional currencies, and variants' per-currency prices without touching stock
|
|
266
|
+
| `set_product_variants` | Replace a product's whole variant set |
|
|
267
|
+
| `set_product_currency_prices` | Replace a product's prices and breaks in additional currencies, and variants' per-currency prices without touching stock |
|
|
268
268
|
|
|
269
269
|
Products are records of a Custom Data Model; these tools add product-aware
|
|
270
270
|
stock/variant reads and bulk writes on top of the generic record tools. The
|
|
@@ -308,16 +308,16 @@ their own.
|
|
|
308
308
|
| `get_price_list` | One list with a page of its fixed prices (filter by product, cursor-paginated) |
|
|
309
309
|
| `create_price_list` | Create a list with a name, an optional percent off and the channels it is published to |
|
|
310
310
|
| `update_price_list` | Rename a list, change its percentOff, window or channels (`[]` unpublishes) |
|
|
311
|
-
| `delete_price_list` | Delete a list and unassign it everywhere
|
|
311
|
+
| `delete_price_list` | Delete a list and unassign it everywhere |
|
|
312
312
|
| `set_price_list_entry` | Set the fixed price for one product or variant, with optional volume breaks |
|
|
313
|
-
| `set_price_list_entries` | Upsert up to 1000 fixed prices at once, all or nothing
|
|
314
|
-
| `remove_price_list_entries` | Remove up to 1000 fixed prices by product / variant
|
|
313
|
+
| `set_price_list_entries` | Upsert up to 1000 fixed prices at once, all or nothing |
|
|
314
|
+
| `remove_price_list_entries` | Remove up to 1000 fixed prices by product / variant |
|
|
315
315
|
| `set_company_price_list` | Assign a price list to a company record; every member pays it; `null` unassigns |
|
|
316
316
|
| `set_company_price_display_mode` | Set whether a company's buyers read net or gross prices; `null` = default (net) |
|
|
317
317
|
| `set_company_tax_rounding` | Set a company's VAT rounding, per_line or per_rate; `null` = workspace setting |
|
|
318
318
|
| `set_company_vat_id` | Set or clear a company's EU VAT id; a changed id is no longer verified |
|
|
319
|
-
| `set_company_vat_verified` | Attest or withdraw a company's checked VAT id; drives reverse charge
|
|
320
|
-
| `set_company_tax_exemption` | Exempt a company's orders from VAT with a legal reason; `null` clears
|
|
319
|
+
| `set_company_vat_verified` | Attest or withdraw a company's checked VAT id; drives reverse charge |
|
|
320
|
+
| `set_company_tax_exemption` | Exempt a company's orders from VAT with a legal reason; `null` clears |
|
|
321
321
|
|
|
322
322
|
### Sales Channel Tools
|
|
323
323
|
|
|
@@ -333,7 +333,7 @@ catalogue. Lists are published with `create_price_list` / `update_price_list`
|
|
|
333
333
|
| `get_sales_channel` | One channel with its published lists, nextChangeAt and activeCartCount |
|
|
334
334
|
| `create_sales_channel` | Create a channel (key fixed once created), at most 20 per workspace |
|
|
335
335
|
| `update_sales_channel` | Rename a channel or change its displayMode or priceAccess |
|
|
336
|
-
| `delete_sales_channel` | Delete a channel, unpublish its lists, abandon its open carts
|
|
336
|
+
| `delete_sales_channel` | Delete a channel, unpublish its lists, abandon its open carts |
|
|
337
337
|
|
|
338
338
|
### Webhook Tools
|
|
339
339
|
|
|
@@ -378,7 +378,6 @@ Requires workspace permissions `WEBHOOKS_VIEW` (read) / `WEBHOOKS_MANAGE`
|
|
|
378
378
|
|
|
379
379
|
- **`resolveWorkspace(workspace)` is the authorization.** Check, on every call, that the caller is still a member of that workspace and that the connection was granted it. Throw the same message for "does not exist" and "not yours", so a refusal does not reveal which workspaces exist.
|
|
380
380
|
- **The executor is the scope.** The `CmssyApi` it returns (`createCmssyApi(execute, workspaceId)`) runs every document as that user in that workspace; the package sends nothing that would scope it.
|
|
381
|
-
- **`ConfirmStore.consume` is single-use and atomic.** Check and delete a ref in one step, or two concurrent calls with the same ref both run. Refs expire after 600 seconds. Hashes already cover the workspace, so one store per connection is safe.
|
|
382
381
|
- **`fetchUrl` is the SSRF boundary.** Refuse private, loopback and link-local addresses and re-check every redirect. The package caps the body at 50MB while reading.
|
|
383
382
|
|
|
384
383
|
## Development
|
|
@@ -5,7 +5,6 @@ import { createHostedServer, hostedUploadPolicy, LIST_WORKSPACES_TOOL, } from ".
|
|
|
5
5
|
import { bindHostedTool } from "../ai-tools-binder.js";
|
|
6
6
|
import { createCmssyApi } from "../graphql-client.js";
|
|
7
7
|
import { createServer } from "../server.js";
|
|
8
|
-
import { ConfirmGate } from "../confirm-gate.js";
|
|
9
8
|
import { connectServer, validationRefusal } from "./mcp-harness.js";
|
|
10
9
|
function workspaceClient(label) {
|
|
11
10
|
return {
|
|
@@ -14,20 +13,16 @@ function workspaceClient(label) {
|
|
|
14
13
|
buildSelectionSet: vi.fn(() => Promise.reject(new Error(`introspected ${label}`))),
|
|
15
14
|
};
|
|
16
15
|
}
|
|
17
|
-
function hosted(
|
|
16
|
+
function hosted() {
|
|
18
17
|
const clients = {
|
|
19
18
|
"acme/shop": workspaceClient("acme/shop"),
|
|
20
19
|
"acme/blog": workspaceClient("acme/blog"),
|
|
21
20
|
};
|
|
22
|
-
const gates = {
|
|
23
|
-
"acme/shop": shared ?? new ConfirmGate(),
|
|
24
|
-
"acme/blog": shared ?? new ConfirmGate(),
|
|
25
|
-
};
|
|
26
21
|
const resolveWorkspace = vi.fn(async (workspace) => {
|
|
27
22
|
const client = clients[workspace];
|
|
28
23
|
if (!client)
|
|
29
24
|
throw new Error(`Workspace ${workspace} is not connected`);
|
|
30
|
-
return { client
|
|
25
|
+
return { client };
|
|
31
26
|
});
|
|
32
27
|
const listWorkspaces = vi.fn(async () => [
|
|
33
28
|
{
|
|
@@ -119,26 +114,15 @@ describe("hosted server (CMS-2095)", () => {
|
|
|
119
114
|
expect(text(fetched)).toBe("fetch blocked");
|
|
120
115
|
expect(fetchUrl).toHaveBeenCalledWith("http://169.254.169.254/x");
|
|
121
116
|
});
|
|
122
|
-
it("
|
|
117
|
+
it("runs a destructive tool at once, in the workspace the call named", async () => {
|
|
123
118
|
const { server, clients } = hosted();
|
|
124
119
|
const client = await connectServer(server);
|
|
125
|
-
const
|
|
126
|
-
const prompt = JSON.parse(text(await client.callTool({
|
|
127
|
-
name: "delete_page",
|
|
128
|
-
arguments: { workspace: "acme/shop", ...args },
|
|
129
|
-
})));
|
|
130
|
-
expect(prompt.needsConfirmation).toBe(true);
|
|
131
|
-
const replayed = JSON.parse(text(await client.callTool({
|
|
132
|
-
name: "delete_page",
|
|
133
|
-
arguments: { workspace: "acme/blog", ...args, _confirm: prompt.ref },
|
|
134
|
-
})));
|
|
135
|
-
expect(replayed.refusedBecause).toBe("unknown-ref");
|
|
136
|
-
expect(clients["acme/blog"].query).not.toHaveBeenCalled();
|
|
137
|
-
const approved = await client.callTool({
|
|
120
|
+
const result = await client.callTool({
|
|
138
121
|
name: "delete_page",
|
|
139
|
-
arguments: { workspace: "acme/shop",
|
|
122
|
+
arguments: { workspace: "acme/shop", pageId: "6abd61e1a51c17ea3525336a" },
|
|
140
123
|
});
|
|
141
|
-
expect(text(
|
|
124
|
+
expect(text(result), "delete_page answered without reaching the workspace client - a confirmation step is back in the way").toContain("queried acme/shop");
|
|
125
|
+
expect(clients["acme/blog"].query).not.toHaveBeenCalled();
|
|
142
126
|
});
|
|
143
127
|
it("binds update_region_settings to the resolved workspace's client", async () => {
|
|
144
128
|
const { server } = hosted();
|
|
@@ -165,22 +149,6 @@ describe("hosted server (CMS-2095)", () => {
|
|
|
165
149
|
});
|
|
166
150
|
expect(JSON.parse(text(result))).toStrictEqual(await listWorkspaces.mock.results[0].value);
|
|
167
151
|
});
|
|
168
|
-
it("binds a confirmation to its workspace even when the host shares one store", async () => {
|
|
169
|
-
const { server, clients } = hosted(new ConfirmGate());
|
|
170
|
-
const client = await connectServer(server);
|
|
171
|
-
const args = { pageId: "6abd61e1a51c17ea3525336a" };
|
|
172
|
-
const prompt = JSON.parse(text(await client.callTool({
|
|
173
|
-
name: "delete_page",
|
|
174
|
-
arguments: { workspace: "acme/shop", ...args },
|
|
175
|
-
})));
|
|
176
|
-
expect(prompt.summary).toContain("acme/shop");
|
|
177
|
-
const replayed = JSON.parse(text(await client.callTool({
|
|
178
|
-
name: "delete_page",
|
|
179
|
-
arguments: { workspace: "acme/blog", ...args, _confirm: prompt.ref },
|
|
180
|
-
})));
|
|
181
|
-
expect(replayed.refusedBecause).toBe("args-changed");
|
|
182
|
-
expect(clients["acme/blog"].query).not.toHaveBeenCalled();
|
|
183
|
-
});
|
|
184
152
|
it("enforces a tool's cross-field rule on the hosted path too", async () => {
|
|
185
153
|
const { server, resolveWorkspace } = hosted();
|
|
186
154
|
const client = await connectServer(server);
|
|
@@ -203,12 +171,11 @@ describe("bindHostedTool (CMS-2095)", () => {
|
|
|
203
171
|
execute: async (input) => input,
|
|
204
172
|
};
|
|
205
173
|
}
|
|
206
|
-
async function connectEcho(tool
|
|
174
|
+
async function connectEcho(tool) {
|
|
207
175
|
const server = new McpServer({ name: "test", version: "0.0.0" });
|
|
208
176
|
bindHostedTool(server, tool, async () => ({
|
|
209
177
|
tool,
|
|
210
178
|
ops: {},
|
|
211
|
-
confirm,
|
|
212
179
|
}));
|
|
213
180
|
return connectServer(server);
|
|
214
181
|
}
|
|
@@ -220,23 +187,18 @@ describe("bindHostedTool (CMS-2095)", () => {
|
|
|
220
187
|
});
|
|
221
188
|
expect(JSON.parse(text(result))).toStrictEqual({ value: "x" });
|
|
222
189
|
});
|
|
223
|
-
it("
|
|
224
|
-
const
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
const
|
|
190
|
+
it("runs a destructive tool on its first call and advertises no confirmation argument", async () => {
|
|
191
|
+
const client = await connectEcho(echoTool(true));
|
|
192
|
+
const listed = (await client.listTools()).tools.find((t) => t.name === "echo_input");
|
|
193
|
+
expect(Object.keys(listed.inputSchema.properties ?? {}).sort()).toEqual([
|
|
194
|
+
"value",
|
|
195
|
+
"workspace",
|
|
196
|
+
]);
|
|
197
|
+
const result = await client.callTool({
|
|
231
198
|
name: "echo_input",
|
|
232
199
|
arguments: { workspace: "acme/shop", value: "x" },
|
|
233
|
-
})));
|
|
234
|
-
expect(prompt.ref).toMatch(/^[0-9a-f]{8}$/);
|
|
235
|
-
const approved = await client.callTool({
|
|
236
|
-
name: "echo_input",
|
|
237
|
-
arguments: { workspace: "acme/shop", value: "x", _confirm: prompt.ref },
|
|
238
200
|
});
|
|
239
|
-
expect(JSON.parse(text(
|
|
201
|
+
expect(JSON.parse(text(result))).toStrictEqual({ value: "x" });
|
|
240
202
|
});
|
|
241
203
|
});
|
|
242
204
|
describe("hosted helpers (CMS-2095)", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-server.test.js","sourceRoot":"","sources":["../../src/__tests__/hosted-server.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hosted-server.test.js","sourceRoot":"","sources":["../../src/__tests__/hosted-server.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,8 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import type { ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import type { AiTool, WorkspaceOps } from "@cmssy/ai-tools";
|
|
5
|
-
import { type ConfirmStore } from "./confirm-gate.js";
|
|
6
5
|
export declare function boundDeclarations(server: McpServer): Map<string, AiTool>;
|
|
7
|
-
export declare function toolInputSchema(tool: Pick<AiTool, "inputSchema"
|
|
6
|
+
export declare function toolInputSchema(tool: Pick<AiTool, "inputSchema">, extra?: z.ZodRawShape): z.ZodObject<z.ZodRawShape>;
|
|
8
7
|
export declare function toolTitle(name: string): string;
|
|
9
8
|
export declare function toolAnnotations(tool: Pick<AiTool, "name" | "requiredPermissions" | "confirmGated">): ToolAnnotations;
|
|
10
9
|
export declare function bindSharedTool(server: McpServer, tool: AiTool, ops: WorkspaceOps): void;
|
|
@@ -12,9 +11,8 @@ export declare const WORKSPACE_ARG = "workspace";
|
|
|
12
11
|
export interface HostedTarget {
|
|
13
12
|
tool: AiTool;
|
|
14
13
|
ops: WorkspaceOps;
|
|
15
|
-
confirm: ConfirmStore;
|
|
16
14
|
}
|
|
17
15
|
export type ResolveHostedTarget = (workspace: string, tool: AiTool) => Promise<HostedTarget>;
|
|
18
|
-
export declare function hostedInputSchema(tool: Pick<AiTool, "inputSchema"
|
|
16
|
+
export declare function hostedInputSchema(tool: Pick<AiTool, "inputSchema">): z.ZodObject<z.ZodRawShape>;
|
|
19
17
|
export declare function bindHostedTool(server: McpServer, tool: AiTool, resolve: ResolveHostedTarget): void;
|
|
20
18
|
//# sourceMappingURL=ai-tools-binder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-tools-binder.d.ts","sourceRoot":"","sources":["../src/ai-tools-binder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-tools-binder.d.ts","sourceRoot":"","sources":["../src/ai-tools-binder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAoB5D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAExE;AAeD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,EACjC,KAAK,GAAE,CAAC,CAAC,WAAgB,GACxB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAS5B;AAMD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,cAAc,CAAC,GAClE,eAAe,CAyBjB;AAuCD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,YAAY,GAChB,IAAI,CAYN;AAED,eAAO,MAAM,aAAa,cAAc,CAAC;AASzC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,YAAY,CAAC;CACnB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,YAAY,CAAC,CAAC;AAE3B,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,GAChC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAE5B;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mBAAmB,GAC3B,IAAI,CAwBN"}
|
package/dist/ai-tools-binder.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { runAsTool } from "./client-marker.js";
|
|
3
|
-
import { CONFIRM_ARG, CONFIRM_REF_PATTERN, CONFIRMATION_TTL_SECONDS, ConfirmGate, confirmArgsHash, confirmSummary, } from "./confirm-gate.js";
|
|
4
3
|
const jsonPreprocess = (val) => {
|
|
5
4
|
if (typeof val !== "string")
|
|
6
5
|
return val;
|
|
@@ -13,41 +12,6 @@ const jsonPreprocess = (val) => {
|
|
|
13
12
|
}
|
|
14
13
|
};
|
|
15
14
|
const declarations = new WeakMap();
|
|
16
|
-
const gates = new WeakMap();
|
|
17
|
-
function gateFor(server) {
|
|
18
|
-
const existing = gates.get(server);
|
|
19
|
-
if (existing)
|
|
20
|
-
return existing;
|
|
21
|
-
const gate = new ConfirmGate();
|
|
22
|
-
gates.set(server, gate);
|
|
23
|
-
return gate;
|
|
24
|
-
}
|
|
25
|
-
const confirmArgSchema = z
|
|
26
|
-
.string()
|
|
27
|
-
.regex(CONFIRM_REF_PATTERN)
|
|
28
|
-
.optional()
|
|
29
|
-
.describe("Confirmation ref this server issued for this exact call after the user approved it. Never invent or reuse one.");
|
|
30
|
-
async function confirmationPrompt(gate, toolName, args, reason) {
|
|
31
|
-
const ref = await gate.request(toolName, confirmArgsHash(args));
|
|
32
|
-
return {
|
|
33
|
-
content: [
|
|
34
|
-
{
|
|
35
|
-
type: "text",
|
|
36
|
-
text: JSON.stringify({
|
|
37
|
-
needsConfirmation: true,
|
|
38
|
-
ref,
|
|
39
|
-
...(reason ? { refusedBecause: reason } : {}),
|
|
40
|
-
summary: confirmSummary(toolName, args),
|
|
41
|
-
expiresInSeconds: CONFIRMATION_TTL_SECONDS,
|
|
42
|
-
instruction: "This action was NOT performed. Tell the user exactly what it " +
|
|
43
|
-
"would do and wait for their explicit approval in their next " +
|
|
44
|
-
`message. Then call the tool once more with the same arguments plus ${CONFIRM_ARG}: "${ref}". ` +
|
|
45
|
-
"Never invent a ref and never confirm on the user's behalf.",
|
|
46
|
-
}, null, 2),
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
15
|
export function boundDeclarations(server) {
|
|
52
16
|
return declarations.get(server) ?? new Map();
|
|
53
17
|
}
|
|
@@ -66,9 +30,6 @@ export function toolInputSchema(tool, extra = {}) {
|
|
|
66
30
|
key,
|
|
67
31
|
coerceJson(schema),
|
|
68
32
|
]));
|
|
69
|
-
if (tool.confirmGated === true) {
|
|
70
|
-
coerced[CONFIRM_ARG] = confirmArgSchema;
|
|
71
|
-
}
|
|
72
33
|
return declared.safeExtend({ ...coerced, ...extra }).strict();
|
|
73
34
|
}
|
|
74
35
|
const READ_NAME = /^(get|list|search)_/;
|
|
@@ -114,22 +75,9 @@ function errorResult(err) {
|
|
|
114
75
|
isError: true,
|
|
115
76
|
};
|
|
116
77
|
}
|
|
117
|
-
async function runTool(tool, input, ops
|
|
118
|
-
let executeInput = input;
|
|
119
|
-
if (tool.confirmGated === true) {
|
|
120
|
-
const { [CONFIRM_ARG]: ref, ...rest } = input;
|
|
121
|
-
const approved = { ...rest, ...scope };
|
|
122
|
-
if (typeof ref !== "string") {
|
|
123
|
-
return confirmationPrompt(gate, tool.name, approved, null);
|
|
124
|
-
}
|
|
125
|
-
const outcome = await gate.consume(ref, tool.name, confirmArgsHash(approved));
|
|
126
|
-
if (outcome !== "approved") {
|
|
127
|
-
return confirmationPrompt(gate, tool.name, approved, outcome);
|
|
128
|
-
}
|
|
129
|
-
executeInput = rest;
|
|
130
|
-
}
|
|
78
|
+
async function runTool(tool, input, ops) {
|
|
131
79
|
try {
|
|
132
|
-
const result = await runAsTool(tool.name, () => tool.execute(
|
|
80
|
+
const result = await runAsTool(tool.name, () => tool.execute(input, ops));
|
|
133
81
|
return {
|
|
134
82
|
content: [
|
|
135
83
|
{ type: "text", text: JSON.stringify(result, null, 2) },
|
|
@@ -152,7 +100,7 @@ export function bindSharedTool(server, tool, ops) {
|
|
|
152
100
|
description: tool.description,
|
|
153
101
|
inputSchema: toolInputSchema(tool),
|
|
154
102
|
annotations: toolAnnotations(tool),
|
|
155
|
-
}, (input) => runTool(tool, input, ops
|
|
103
|
+
}, (input) => runTool(tool, input, ops));
|
|
156
104
|
}
|
|
157
105
|
export const WORKSPACE_ARG = "workspace";
|
|
158
106
|
const workspaceArgSchema = z
|
|
@@ -178,9 +126,7 @@ export function bindHostedTool(server, tool, resolve) {
|
|
|
178
126
|
catch (err) {
|
|
179
127
|
return errorResult(err);
|
|
180
128
|
}
|
|
181
|
-
return runTool(target.tool, rest, target.ops
|
|
182
|
-
[WORKSPACE_ARG]: workspace,
|
|
183
|
-
});
|
|
129
|
+
return runTool(target.tool, rest, target.ops);
|
|
184
130
|
});
|
|
185
131
|
}
|
|
186
132
|
//# sourceMappingURL=ai-tools-binder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-tools-binder.js","sourceRoot":"","sources":["../src/ai-tools-binder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-tools-binder.js","sourceRoot":"","sources":["../src/ai-tools-binder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,cAAc,GAAG,CAAC,GAAY,EAAE,EAAE;IACtC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,OAAO,EAAkC,CAAC;AAOnE,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,MAAoB;IACtC,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,GACX,MAAM,YAAY,CAAC,CAAC,UAAU;QAC5B,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAkB,CAAC,CAAC,OAAO,CACjD,MAAM,CAAC,GAAG,CAAC,YAAY,CACxB;QACH,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,WAAW;YAC/B,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAkB,CAAC,CAAC,QAAQ,EAAE;YACxD,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAiC,EACjC,QAAuB,EAAE;IAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAoD,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QACpD,GAAG;QACH,UAAU,CAAC,MAAsB,CAAC;KACnC,CAAC,CACH,CAAC;IACF,OAAO,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,SAAS,GAAG,qBAAqB,CAAC;AACxC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAEnD,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO;QACL,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;KAClB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAmE;IAEnE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GACZ,IAAI,CAAC,YAAY,KAAK,IAAI;QAC1B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAC5C,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC7B,CAAC;IACJ,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,KAAK;YACL,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK;QACL,YAAY,EAAE,KAAK;QACnB,eAAe,EACb,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACvD;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,IAAY,EACZ,KAAc,EACd,GAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACzB,CAAC;QACF,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aACjE;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,MAAiB,EAAE,IAAY;IAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAC;IACvE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAiB,EACjB,IAAY,EACZ,GAAiB;IAEjB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtB,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;QACE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC;QAClC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC;KACnC,EACD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AAEzC,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,EAAE;KACR,KAAK,CAAC,oBAAoB,CAAC;KAC3B,QAAQ,CACP,mGAAmG,CACpG,CAAC;AAYJ,MAAM,UAAU,iBAAiB,CAC/B,IAAiC;IAEjC,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAiB,EACjB,IAAY,EACZ,OAA4B;IAE5B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtB,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;QACE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC;QACpC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC;KACnC,EACD,KAAK,EAAE,KAAc,EAAE,EAAE;QACvB,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,KAG/C,CAAC;QACF,IAAI,MAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,OAAO,CAAC,SAAmB,EAAE,IAAI,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/hosted-server.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import type { ConfirmStore } from "./confirm-gate.js";
|
|
3
2
|
import type { CmssyApi } from "./graphql-client.js";
|
|
4
3
|
import type { FetchUrl, UploadSourcePolicy } from "./media-upload.js";
|
|
5
4
|
export interface HostedWorkspace {
|
|
@@ -10,7 +9,6 @@ export interface HostedWorkspace {
|
|
|
10
9
|
}
|
|
11
10
|
export interface HostedWorkspaceAccess {
|
|
12
11
|
client: CmssyApi;
|
|
13
|
-
confirm: ConfirmStore;
|
|
14
12
|
}
|
|
15
13
|
export interface HostedServerOptions {
|
|
16
14
|
listWorkspaces(): Promise<HostedWorkspace[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-server.d.ts","sourceRoot":"","sources":["../src/hosted-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"hosted-server.d.ts","sourceRoot":"","sources":["../src/hosted-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAKtE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC7C,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACpE,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAQtD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,CAEzE;AAQD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CA4C1E"}
|
package/dist/hosted-server.js
CHANGED
|
@@ -41,11 +41,10 @@ export function createHostedServer(options) {
|
|
|
41
41
|
}));
|
|
42
42
|
for (const template of toolCatalogue(unresolvedClient, uploadMediaFromUrlTool)) {
|
|
43
43
|
bindHostedTool(server, template, async (workspace, tool) => {
|
|
44
|
-
const { client
|
|
44
|
+
const { client } = await options.resolveWorkspace(workspace);
|
|
45
45
|
return {
|
|
46
46
|
tool: toolForClient(tool, client),
|
|
47
47
|
ops: createMcpWorkspaceOps(client, uploadPolicy),
|
|
48
|
-
confirm,
|
|
49
48
|
};
|
|
50
49
|
});
|
|
51
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-server.js","sourceRoot":"","sources":["../src/hosted-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAe,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACL,cAAc,EACd,eAAe,EACf,SAAS,GAEV,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"hosted-server.js","sourceRoot":"","sources":["../src/hosted-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAe,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACL,cAAc,EACd,eAAe,EACf,SAAS,GAEV,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmB5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,gBAAgB,GAAa;IACjC,WAAW,EAAE,EAAE;IACf,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC/D,iBAAiB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;CAC5E,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,QAAkB;IACnD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,MAAgB;IACvD,OAAO,QAAQ,CAAC,IAAI,KAAK,wBAAwB;QAC/C,CAAC,CAAE,8BAA8B,CAAC,MAAM,CAAY;QACpD,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE1D,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,SAAS,CAAC,oBAAoB,CAAC;QACtC,WAAW,EACT,6OAA6O;QAC/O,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QAClC,WAAW,EAAE,eAAe,CAAC;YAC3B,IAAI,EAAE,oBAAoB;YAC1B,mBAAmB,EAAE,EAAE;SACxB,CAAC;KACH,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;aAC9D;SACF;KACF,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,aAAa,CAClC,gBAAgB,EAChB,sBAAgC,CACjC,EAAE,CAAC;QACF,cAAc,CACZ,MAAM,EACN,QAAQ,EACR,KAAK,EAAE,SAAS,EAAE,IAAI,EAAyB,EAAE;YAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC7D,OAAO;gBACL,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;gBACjC,GAAG,EAAE,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC;aACjD,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/lib.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { createServer, toolCatalogue } from "./server.js";
|
|
2
2
|
export { createHostedServer, LIST_WORKSPACES_TOOL, type HostedServerOptions, type HostedWorkspace, type HostedWorkspaceAccess, } from "./hosted-server.js";
|
|
3
3
|
export { CmssyClient, createCmssyApi, type CmssyApi, type GraphqlExecute, } from "./graphql-client.js";
|
|
4
|
-
export { ConfirmGate, type ConfirmStore, type ConsumeOutcome, } from "./confirm-gate.js";
|
|
5
4
|
export { WORKSPACE_ARG } from "./ai-tools-binder.js";
|
|
6
5
|
export type { FetchUrl } from "./media-upload.js";
|
|
7
6
|
//# sourceMappingURL=lib.d.ts.map
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/lib.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { createServer, toolCatalogue } from "./server.js";
|
|
2
2
|
export { createHostedServer, LIST_WORKSPACES_TOOL, } from "./hosted-server.js";
|
|
3
3
|
export { CmssyClient, createCmssyApi, } from "./graphql-client.js";
|
|
4
|
-
export { ConfirmGate, } from "./confirm-gate.js";
|
|
5
4
|
export { WORKSPACE_ARG } from "./ai-tools-binder.js";
|
|
6
5
|
//# sourceMappingURL=lib.js.map
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAIrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,WAAW,EACX,cAAc,GAGf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAIrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,WAAW,EACX,cAAc,GAGf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-gate.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/confirm-gate.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import { CONFIRM_GATED_TOOLS, cancelOrderTool } from "@cmssy/ai-tools";
|
|
4
|
-
import { toolInputSchema } from "../ai-tools-binder.js";
|
|
5
|
-
import { CONFIRM_ARG } from "../confirm-gate.js";
|
|
6
|
-
import { callBound as call, connectBound as connect } from "./mcp-harness.js";
|
|
7
|
-
function gatedTool(execute) {
|
|
8
|
-
return {
|
|
9
|
-
name: "delete_record",
|
|
10
|
-
description: "a destructive tool",
|
|
11
|
-
requiredPermissions: [],
|
|
12
|
-
confirmGated: true,
|
|
13
|
-
inputSchema: z.object({
|
|
14
|
-
modelIdOrSlug: z.string(),
|
|
15
|
-
recordId: z.string(),
|
|
16
|
-
}),
|
|
17
|
-
execute,
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
function resultJson(result) {
|
|
21
|
-
const text = result.content[0]?.text ?? "";
|
|
22
|
-
return JSON.parse(text);
|
|
23
|
-
}
|
|
24
|
-
const ARGS = { modelIdOrSlug: "products", recordId: "r1" };
|
|
25
|
-
afterEach(() => {
|
|
26
|
-
vi.useRealTimers();
|
|
27
|
-
});
|
|
28
|
-
describe("the MCP confirm gate (CMS-2067)", () => {
|
|
29
|
-
it("refuses the first call and does not execute - the moat claim is server-side on this surface too", async () => {
|
|
30
|
-
const execute = vi.fn();
|
|
31
|
-
const client = await connect([gatedTool(execute)], {});
|
|
32
|
-
const result = await call(client, "delete_record", ARGS);
|
|
33
|
-
const body = resultJson(result);
|
|
34
|
-
expect(execute, "a gated tool executing on its first call is exactly the hole the funnel run found: cancel_order ran with no confirmation").not.toHaveBeenCalled();
|
|
35
|
-
expect(body.needsConfirmation).toBe(true);
|
|
36
|
-
expect(body.ref).toMatch(/^[0-9a-f]{8}$/);
|
|
37
|
-
expect(body.instruction).toContain("NOT performed");
|
|
38
|
-
});
|
|
39
|
-
it("executes exactly once with the issued ref and refuses the replay", async () => {
|
|
40
|
-
const execute = vi.fn().mockResolvedValue({ deleted: true });
|
|
41
|
-
const client = await connect([gatedTool(execute)], {});
|
|
42
|
-
const first = resultJson(await call(client, "delete_record", ARGS));
|
|
43
|
-
const approved = await call(client, "delete_record", {
|
|
44
|
-
...ARGS,
|
|
45
|
-
[CONFIRM_ARG]: first.ref,
|
|
46
|
-
});
|
|
47
|
-
expect(execute).toHaveBeenCalledTimes(1);
|
|
48
|
-
expect(execute.mock.calls[0][0], "the ref must not leak into the tool's own input - ai-tools schemas never declared it").toEqual(ARGS);
|
|
49
|
-
expect(resultJson(approved)).toEqual({ deleted: true });
|
|
50
|
-
const replay = resultJson(await call(client, "delete_record", {
|
|
51
|
-
...ARGS,
|
|
52
|
-
[CONFIRM_ARG]: first.ref,
|
|
53
|
-
}));
|
|
54
|
-
expect(replay.needsConfirmation, "a consumed ref approving a second run would turn one approval into unlimited runs").toBe(true);
|
|
55
|
-
expect(replay.refusedBecause).toBe("unknown-ref");
|
|
56
|
-
expect(execute).toHaveBeenCalledTimes(1);
|
|
57
|
-
});
|
|
58
|
-
it("refuses a ref when the arguments drifted - the approval covered different work", async () => {
|
|
59
|
-
const execute = vi.fn();
|
|
60
|
-
const client = await connect([gatedTool(execute)], {});
|
|
61
|
-
const first = resultJson(await call(client, "delete_record", ARGS));
|
|
62
|
-
const drifted = resultJson(await call(client, "delete_record", {
|
|
63
|
-
modelIdOrSlug: "products",
|
|
64
|
-
recordId: "r2",
|
|
65
|
-
[CONFIRM_ARG]: first.ref,
|
|
66
|
-
}));
|
|
67
|
-
expect(execute).not.toHaveBeenCalled();
|
|
68
|
-
expect(drifted.refusedBecause).toBe("args-changed");
|
|
69
|
-
expect(drifted.needsConfirmation).toBe(true);
|
|
70
|
-
});
|
|
71
|
-
it("refuses an expired ref and issues a fresh one", async () => {
|
|
72
|
-
vi.useFakeTimers();
|
|
73
|
-
const execute = vi.fn();
|
|
74
|
-
const client = await connect([gatedTool(execute)], {});
|
|
75
|
-
const first = resultJson(await call(client, "delete_record", ARGS));
|
|
76
|
-
vi.advanceTimersByTime(601_000);
|
|
77
|
-
const expired = resultJson(await call(client, "delete_record", {
|
|
78
|
-
...ARGS,
|
|
79
|
-
[CONFIRM_ARG]: first.ref,
|
|
80
|
-
}));
|
|
81
|
-
expect(execute).not.toHaveBeenCalled();
|
|
82
|
-
expect(expired.refusedBecause).toBe("expired");
|
|
83
|
-
expect(expired.ref).not.toBe(first.ref);
|
|
84
|
-
});
|
|
85
|
-
it("re-asking without a ref reuses the live pending ref instead of minting a parade of them", async () => {
|
|
86
|
-
const execute = vi.fn();
|
|
87
|
-
const client = await connect([gatedTool(execute)], {});
|
|
88
|
-
const first = resultJson(await call(client, "delete_record", ARGS));
|
|
89
|
-
const second = resultJson(await call(client, "delete_record", ARGS));
|
|
90
|
-
expect(second.ref).toBe(first.ref);
|
|
91
|
-
});
|
|
92
|
-
it("an invented ref never executes", async () => {
|
|
93
|
-
const execute = vi.fn();
|
|
94
|
-
const client = await connect([gatedTool(execute)], {});
|
|
95
|
-
const forged = resultJson(await call(client, "delete_record", {
|
|
96
|
-
...ARGS,
|
|
97
|
-
[CONFIRM_ARG]: "deadbeef",
|
|
98
|
-
}));
|
|
99
|
-
expect(execute).not.toHaveBeenCalled();
|
|
100
|
-
expect(forged.refusedBecause).toBe("unknown-ref");
|
|
101
|
-
});
|
|
102
|
-
it("an ungated tool executes directly and does not advertise _confirm", async () => {
|
|
103
|
-
const execute = vi.fn().mockResolvedValue({ ok: true });
|
|
104
|
-
const tool = {
|
|
105
|
-
name: "list_records",
|
|
106
|
-
description: "read",
|
|
107
|
-
requiredPermissions: [],
|
|
108
|
-
inputSchema: z.object({
|
|
109
|
-
modelIdOrSlug: z.string(),
|
|
110
|
-
}),
|
|
111
|
-
execute,
|
|
112
|
-
};
|
|
113
|
-
const client = await connect([tool], {});
|
|
114
|
-
const result = await call(client, "list_records", {
|
|
115
|
-
modelIdOrSlug: "products",
|
|
116
|
-
});
|
|
117
|
-
expect(execute).toHaveBeenCalledTimes(1);
|
|
118
|
-
expect(resultJson(result)).toEqual({ ok: true });
|
|
119
|
-
expect(Object.keys(toolInputSchema(tool).shape), "advertising _confirm on a read tool would teach agents to pass it everywhere").not.toContain(CONFIRM_ARG);
|
|
120
|
-
});
|
|
121
|
-
it("a real gated tool from the registry advertises _confirm in its schema", () => {
|
|
122
|
-
expect(cancelOrderTool.confirmGated).toBe(true);
|
|
123
|
-
expect(Object.keys(toolInputSchema(cancelOrderTool).shape)).toContain(CONFIRM_ARG);
|
|
124
|
-
});
|
|
125
|
-
it("pins the gated vocabulary this server enforces", () => {
|
|
126
|
-
expect([...CONFIRM_GATED_TOOLS].sort()).toEqual([
|
|
127
|
-
"bulk_delete_products",
|
|
128
|
-
"bulk_update_products",
|
|
129
|
-
"bulk_update_records",
|
|
130
|
-
"cancel_order",
|
|
131
|
-
"cancel_return",
|
|
132
|
-
"clear_cart_config",
|
|
133
|
-
"delete_carts",
|
|
134
|
-
"delete_form",
|
|
135
|
-
"delete_form_submission",
|
|
136
|
-
"delete_media_folder",
|
|
137
|
-
"delete_model",
|
|
138
|
-
"delete_page",
|
|
139
|
-
"delete_page_type",
|
|
140
|
-
"delete_price_list",
|
|
141
|
-
"delete_record",
|
|
142
|
-
"delete_sales_channel",
|
|
143
|
-
"delete_webhook",
|
|
144
|
-
"promote_dev_draft",
|
|
145
|
-
"publish_page",
|
|
146
|
-
"refund_order",
|
|
147
|
-
"refund_return",
|
|
148
|
-
"reject_return",
|
|
149
|
-
"remove_price_list_entries",
|
|
150
|
-
"revert_to_published",
|
|
151
|
-
"rotate_webhook_secret",
|
|
152
|
-
"set_company_tax_exemption",
|
|
153
|
-
"set_company_vat_verified",
|
|
154
|
-
"set_customer_company_role",
|
|
155
|
-
"set_price_list_entries",
|
|
156
|
-
"set_product_currency_prices",
|
|
157
|
-
"set_product_variants",
|
|
158
|
-
"suspend_customer",
|
|
159
|
-
"unpublish_page",
|
|
160
|
-
]);
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
//# sourceMappingURL=confirm-gate.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-gate.test.js","sourceRoot":"","sources":["../../src/__tests__/confirm-gate.test.ts"],"names":[],"mappings":"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"}
|
package/dist/confirm-gate.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export declare const CONFIRMATION_TTL_SECONDS = 600;
|
|
2
|
-
export declare const CONFIRM_ARG = "_confirm";
|
|
3
|
-
export declare const CONFIRM_REF_PATTERN: RegExp;
|
|
4
|
-
export declare function confirmArgsHash(input: unknown): string;
|
|
5
|
-
export declare function confirmSummary(toolName: string, input: unknown): string;
|
|
6
|
-
export type ConsumeOutcome = "approved" | "unknown-ref" | "expired" | "args-changed";
|
|
7
|
-
export interface ConfirmStore {
|
|
8
|
-
request(toolName: string, argsHash: string): string | Promise<string>;
|
|
9
|
-
consume(ref: string, toolName: string, argsHash: string): ConsumeOutcome | Promise<ConsumeOutcome>;
|
|
10
|
-
}
|
|
11
|
-
export declare class ConfirmGate implements ConfirmStore {
|
|
12
|
-
private pending;
|
|
13
|
-
request(toolName: string, argsHash: string): string;
|
|
14
|
-
consume(ref: string, toolName: string, argsHash: string): ConsumeOutcome;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=confirm-gate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-gate.d.ts","sourceRoot":"","sources":["../src/confirm-gate.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,mBAAmB,QAAkB,CAAC;AAanD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvE;AAED,MAAM,MAAM,cAAc,GACxB,UAAU,GAAG,aAAa,GAAG,SAAS,GAAG,cAAc,CAAC;AAQ1D,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,OAAO,CACL,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7C;AAED,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,OAAO,CAA0C;IAEzD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAoBnD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc;CAazE"}
|
package/dist/confirm-gate.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
-
export const CONFIRMATION_TTL_SECONDS = 600;
|
|
3
|
-
export const CONFIRM_ARG = "_confirm";
|
|
4
|
-
export const CONFIRM_REF_PATTERN = /^[0-9a-f]{8}$/;
|
|
5
|
-
function canonicalize(value) {
|
|
6
|
-
if (Array.isArray(value))
|
|
7
|
-
return value.map(canonicalize);
|
|
8
|
-
if (value !== null && typeof value === "object") {
|
|
9
|
-
const entries = Object.entries(value)
|
|
10
|
-
.filter(([, v]) => v !== undefined)
|
|
11
|
-
.sort(([a], [b]) => (a < b ? -1 : 1));
|
|
12
|
-
return Object.fromEntries(entries.map(([k, v]) => [k, canonicalize(v)]));
|
|
13
|
-
}
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
16
|
-
export function confirmArgsHash(input) {
|
|
17
|
-
return createHash("sha256")
|
|
18
|
-
.update(JSON.stringify(canonicalize(input)))
|
|
19
|
-
.digest("hex");
|
|
20
|
-
}
|
|
21
|
-
export function confirmSummary(toolName, input) {
|
|
22
|
-
return `${toolName.split("_").join(" ")} ${JSON.stringify(canonicalize(input))}`;
|
|
23
|
-
}
|
|
24
|
-
export class ConfirmGate {
|
|
25
|
-
pending = new Map();
|
|
26
|
-
request(toolName, argsHash) {
|
|
27
|
-
const now = Date.now();
|
|
28
|
-
for (const [ref, entry] of this.pending) {
|
|
29
|
-
if (entry.expiresAt <= now) {
|
|
30
|
-
this.pending.delete(ref);
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
if (entry.toolName === toolName && entry.argsHash === argsHash) {
|
|
34
|
-
return ref;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
const ref = randomBytes(4).toString("hex");
|
|
38
|
-
this.pending.set(ref, {
|
|
39
|
-
toolName,
|
|
40
|
-
argsHash,
|
|
41
|
-
expiresAt: now + CONFIRMATION_TTL_SECONDS * 1000,
|
|
42
|
-
});
|
|
43
|
-
return ref;
|
|
44
|
-
}
|
|
45
|
-
consume(ref, toolName, argsHash) {
|
|
46
|
-
const entry = this.pending.get(ref);
|
|
47
|
-
if (!entry)
|
|
48
|
-
return "unknown-ref";
|
|
49
|
-
if (entry.expiresAt <= Date.now()) {
|
|
50
|
-
this.pending.delete(ref);
|
|
51
|
-
return "expired";
|
|
52
|
-
}
|
|
53
|
-
if (entry.toolName !== toolName || entry.argsHash !== argsHash) {
|
|
54
|
-
return "args-changed";
|
|
55
|
-
}
|
|
56
|
-
this.pending.delete(ref);
|
|
57
|
-
return "approved";
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=confirm-gate.js.map
|
package/dist/confirm-gate.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-gate.js","sourceRoot":"","sources":["../src/confirm-gate.ts"],"names":[],"mappings":"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"}
|