picnic-mcp 0.2.0 → 0.4.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 +24 -10
- package/dist/cli.js +10 -3
- package/dist/cli.js.map +1 -1
- package/dist/errors.js +3 -0
- package/dist/errors.js.map +1 -1
- package/dist/format/cart.d.ts +14 -14
- package/dist/format/cart.js +8 -15
- package/dist/format/cart.js.map +1 -1
- package/dist/format/deliveries.d.ts +18 -0
- package/dist/format/deliveries.js +23 -0
- package/dist/format/deliveries.js.map +1 -0
- package/dist/format/prices.d.ts +8 -0
- package/dist/format/prices.js +30 -12
- package/dist/format/prices.js.map +1 -1
- package/dist/format/product.d.ts +29 -0
- package/dist/format/product.js +49 -0
- package/dist/format/product.js.map +1 -0
- package/dist/format/recipes.d.ts +40 -0
- package/dist/format/recipes.js +37 -0
- package/dist/format/recipes.js.map +1 -0
- package/dist/format/slots.d.ts +29 -0
- package/dist/format/slots.js +40 -0
- package/dist/format/slots.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +6 -3
- package/dist/server.js +8 -12
- package/dist/server.js.map +1 -1
- package/dist/tools/cart.d.ts +1 -1
- package/dist/tools/cart.js +17 -9
- package/dist/tools/cart.js.map +1 -1
- package/dist/tools/context.d.ts +5 -0
- package/dist/tools/context.js +9 -0
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/deliveries.d.ts +3 -0
- package/dist/tools/deliveries.js +40 -0
- package/dist/tools/deliveries.js.map +1 -0
- package/dist/tools/groups.d.ts +14 -0
- package/dist/tools/groups.js +64 -0
- package/dist/tools/groups.js.map +1 -0
- package/dist/tools/inputs.d.ts +4 -0
- package/dist/tools/inputs.js +9 -0
- package/dist/tools/inputs.js.map +1 -0
- package/dist/tools/product.d.ts +3 -0
- package/dist/tools/product.js +19 -0
- package/dist/tools/product.js.map +1 -0
- package/dist/tools/recipes.d.ts +3 -0
- package/dist/tools/recipes.js +84 -0
- package/dist/tools/recipes.js.map +1 -0
- package/dist/tools/replacements.d.ts +13 -0
- package/dist/tools/replacements.js +40 -0
- package/dist/tools/replacements.js.map +1 -0
- package/dist/tools/result.d.ts +9 -2
- package/dist/tools/result.js +11 -3
- package/dist/tools/result.js.map +1 -1
- package/dist/tools/search-products.js +12 -8
- package/dist/tools/search-products.js.map +1 -1
- package/dist/tools/slots.d.ts +3 -0
- package/dist/tools/slots.js +61 -0
- package/dist/tools/slots.js.map +1 -0
- package/dist/types.d.ts +8 -0
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
2
|
import { formatProduct } from "../format/products.js";
|
|
3
3
|
import { listCandidates, matchProducts } from "../match.js";
|
|
4
|
-
import { SEARCH_LANGUAGES } from "./context.js";
|
|
4
|
+
import { SEARCH_LANGUAGES, imageUrls } from "./context.js";
|
|
5
5
|
import { jsonResult, runTool } from "./result.js";
|
|
6
6
|
/** At most this many products in the output, to keep it short. */
|
|
7
7
|
const MAX_PRODUCTS = 8;
|
|
@@ -24,29 +24,33 @@ export function registerSearchProducts(server, context) {
|
|
|
24
24
|
const corrected = results.correctedQuery && results.correctedQuery !== query
|
|
25
25
|
? { searchedFor: results.correctedQuery }
|
|
26
26
|
: {};
|
|
27
|
+
const images = (shown) => imageUrls(context, shown.map(({ tile }) => ({ productId: tile.id, imageId: tile.imageId })));
|
|
27
28
|
if (match.type === "best") {
|
|
29
|
+
const others = match.others.slice(0, MAX_PRODUCTS - 1);
|
|
28
30
|
return jsonResult({
|
|
29
31
|
...corrected,
|
|
30
32
|
next: "Add bestMatch with add_to_cart, unless the user asked for something else.",
|
|
31
33
|
bestMatch: formatProduct(match.best, context.countryCode),
|
|
32
|
-
otherResults: format(
|
|
33
|
-
});
|
|
34
|
+
otherResults: format(others),
|
|
35
|
+
}, images([match.best, ...others]));
|
|
34
36
|
}
|
|
35
37
|
if (match.type === "choose") {
|
|
38
|
+
const others = match.others.slice(0, MAX_PRODUCTS - match.choices.length);
|
|
36
39
|
return jsonResult({
|
|
37
40
|
...corrected,
|
|
38
41
|
next: "No clear match. Ask the user which of the choices they want, then add it with add_to_cart.",
|
|
39
42
|
choices: format(match.choices),
|
|
40
|
-
otherResults: format(
|
|
41
|
-
});
|
|
43
|
+
otherResults: format(others),
|
|
44
|
+
}, images([...match.choices, ...others]));
|
|
42
45
|
}
|
|
46
|
+
const others = match.others.slice(0, MAX_PRODUCTS);
|
|
43
47
|
return jsonResult({
|
|
44
48
|
...corrected,
|
|
45
|
-
next:
|
|
49
|
+
next: others.length > 0
|
|
46
50
|
? "None of the results can be ordered right now. Tell the user, or try another search term."
|
|
47
51
|
: "Nothing found. Try another search term, or tell the user.",
|
|
48
|
-
otherResults: format(
|
|
49
|
-
});
|
|
52
|
+
otherResults: format(others),
|
|
53
|
+
}, images(others));
|
|
50
54
|
}, context.onError));
|
|
51
55
|
}
|
|
52
56
|
//# sourceMappingURL=search-products.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-products.js","sourceRoot":"","sources":["../../src/tools/search-products.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAoB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"search-products.js","sourceRoot":"","sources":["../../src/tools/search-products.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { formatCartSummary } from "../format/cart.js";
|
|
3
|
+
import { formatWindow } from "../format/prices.js";
|
|
4
|
+
import { slotDays } from "../format/slots.js";
|
|
5
|
+
import { errorResult, jsonResult, runTool } from "./result.js";
|
|
6
|
+
/** Without a date, the slots of this many days are listed. */
|
|
7
|
+
const DAYS_WITHOUT_DATE = 2;
|
|
8
|
+
export function registerSlotTools(server, context) {
|
|
9
|
+
const { client, countryCode, onError } = context;
|
|
10
|
+
server.registerTool("get_delivery_slots", {
|
|
11
|
+
title: "Get delivery slots",
|
|
12
|
+
description: "List the delivery slots the user can choose for the cart. Without a date it lists the first 2 days and the dates of the other days. " +
|
|
13
|
+
"Pass a date from that list to see its slots. Use select_delivery_slot once the user picked a slot.",
|
|
14
|
+
inputSchema: z.object({
|
|
15
|
+
date: z
|
|
16
|
+
.string()
|
|
17
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "Use a date like 2026-10-23.")
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("The day to list, as YYYY-MM-DD. Leave out for the first days."),
|
|
20
|
+
}),
|
|
21
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
22
|
+
}, ({ date }) => runTool(async () => {
|
|
23
|
+
const slots = await client.cart.getDeliverySlots();
|
|
24
|
+
const days = slotDays(slots, countryCode);
|
|
25
|
+
const shown = date
|
|
26
|
+
? days.filter((day) => day.date === date)
|
|
27
|
+
: days.slice(0, DAYS_WITHOUT_DATE);
|
|
28
|
+
const otherDays = days
|
|
29
|
+
.filter((day) => !shown.includes(day))
|
|
30
|
+
.map((day) => `${day.date} (${day.day})`);
|
|
31
|
+
const selected = formatWindow(slots.selectedSlot?.windowStart ?? null, slots.selectedSlot?.windowEnd ?? null);
|
|
32
|
+
return jsonResult({
|
|
33
|
+
...(date &&
|
|
34
|
+
shown.length === 0 && { next: `No slots on ${date}. Pick one of otherDays.` }),
|
|
35
|
+
...(selected && { selectedWindow: selected }),
|
|
36
|
+
days: shown,
|
|
37
|
+
...(otherDays.length > 0 && { otherDays }),
|
|
38
|
+
});
|
|
39
|
+
}, onError));
|
|
40
|
+
server.registerTool("select_delivery_slot", {
|
|
41
|
+
title: "Select delivery slot",
|
|
42
|
+
description: "Choose when the cart is delivered. Only use a slotId from get_delivery_slots, after the user picked the slot. " +
|
|
43
|
+
"Returns the selected delivery window and the cart total. This does not place an order.",
|
|
44
|
+
inputSchema: z.object({
|
|
45
|
+
slotId: z.string().trim().min(1).describe("The slotId from get_delivery_slots."),
|
|
46
|
+
}),
|
|
47
|
+
annotations: {
|
|
48
|
+
readOnlyHint: false,
|
|
49
|
+
destructiveHint: false,
|
|
50
|
+
idempotentHint: true,
|
|
51
|
+
openWorldHint: true,
|
|
52
|
+
},
|
|
53
|
+
}, ({ slotId }) => runTool(async () => {
|
|
54
|
+
const cart = await client.cart.setDeliverySlot(slotId);
|
|
55
|
+
if (cart.selectedSlot?.slotId !== slotId) {
|
|
56
|
+
return errorResult(`Picnic did not select slot ${slotId}. Check the slotId with get_delivery_slots.`);
|
|
57
|
+
}
|
|
58
|
+
return jsonResult({ selected: true, cart: formatCartSummary(cart, countryCode) });
|
|
59
|
+
}, onError));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=slots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/tools/slots.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE/D,8DAA8D;AAC9D,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,OAAoB;IACvE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEjD,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,sIAAsI;YACtI,oGAAoG;QACtG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,KAAK,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;iBAC3D,QAAQ,EAAE;iBACV,QAAQ,CAAC,+DAA+D,CAAC;SAC7E,CAAC;QACF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACzD,EACD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACX,OAAO,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI;YAChB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI;aACnB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,YAAY,CAC3B,KAAK,CAAC,YAAY,EAAE,WAAW,IAAI,IAAI,EACvC,KAAK,CAAC,YAAY,EAAE,SAAS,IAAI,IAAI,CACtC,CAAC;QACF,OAAO,UAAU,CAAC;YAChB,GAAG,CAAC,IAAI;gBACN,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,IAAI,0BAA0B,EAAE,CAAC;YAChF,GAAG,CAAC,QAAQ,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;YAC7C,IAAI,EAAE,KAAK;YACX,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC,EAAE,OAAO,CAAC,CACd,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,gHAAgH;YAChH,wFAAwF;QAC1F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;SACjF,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACb,OAAO,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,WAAW,CAChB,8BAA8B,MAAM,6CAA6C,CAClF,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC,EAAE,OAAO,CAAC,CACd,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,5 +3,13 @@ export type CountryCode = "NL" | "DE" | "FR";
|
|
|
3
3
|
export declare const COUNTRY_CODES: readonly CountryCode[];
|
|
4
4
|
export type SearchResults = PicnicClient.Types.catalog.SearchResults;
|
|
5
5
|
export type ProductTile = PicnicClient.Types.catalog.ProductTile;
|
|
6
|
+
export type SearchRecipe = PicnicClient.Types.catalog.SearchRecipe;
|
|
7
|
+
export type Product = PicnicClient.Types.catalog.Product;
|
|
6
8
|
export type Cart = PicnicClient.Types.cart.Cart;
|
|
7
9
|
export type CartLineItem = PicnicClient.Types.cart.CartLineItem;
|
|
10
|
+
export type DeliverySlots = PicnicClient.Types.cart.DeliverySlots;
|
|
11
|
+
export type DeliverySlot = PicnicClient.Types.cart.DeliverySlot;
|
|
12
|
+
export type DeliverySummary = PicnicClient.Types.delivery.DeliverySummary;
|
|
13
|
+
export type Delivery = PicnicClient.Types.delivery.Delivery;
|
|
14
|
+
export type DeliveryPosition = PicnicClient.Types.delivery.DeliveryPosition;
|
|
15
|
+
export type Recipe = PicnicClient.Types.recipe.Recipe;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "picnic-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "MCP server for the online supermarket Picnic: search products and manage the cart",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"picnic",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@modelcontextprotocol/server": "^2.3.1",
|
|
50
|
-
"picnic-api": "^5.
|
|
50
|
+
"picnic-api": "^5.2.0",
|
|
51
51
|
"zod": "^4.6.7"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|