vilgain-mcp 0.1.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/LICENSE +21 -0
- package/README.md +135 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/cart.d.ts +7 -0
- package/dist/parsers/cart.js +27 -0
- package/dist/parsers/cart.js.map +1 -0
- package/dist/parsers/common.d.ts +22 -0
- package/dist/parsers/common.js +98 -0
- package/dist/parsers/common.js.map +1 -0
- package/dist/parsers/orders.d.ts +7 -0
- package/dist/parsers/orders.js +91 -0
- package/dist/parsers/orders.js.map +1 -0
- package/dist/parsers/product.d.ts +5 -0
- package/dist/parsers/product.js +140 -0
- package/dist/parsers/product.js.map +1 -0
- package/dist/parsers/search.d.ts +3 -0
- package/dist/parsers/search.js +66 -0
- package/dist/parsers/search.js.map +1 -0
- package/dist/tools/cart.d.ts +99 -0
- package/dist/tools/cart.js +103 -0
- package/dist/tools/cart.js.map +1 -0
- package/dist/tools/helpers.d.ts +12 -0
- package/dist/tools/helpers.js +21 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/order-history.d.ts +46 -0
- package/dist/tools/order-history.js +93 -0
- package/dist/tools/order-history.js.map +1 -0
- package/dist/tools/product-detail.d.ts +27 -0
- package/dist/tools/product-detail.js +64 -0
- package/dist/tools/product-detail.js.map +1 -0
- package/dist/tools/product-variants.d.ts +25 -0
- package/dist/tools/product-variants.js +41 -0
- package/dist/tools/product-variants.js.map +1 -0
- package/dist/tools/search-products.d.ts +27 -0
- package/dist/tools/search-products.js +43 -0
- package/dist/tools/search-products.js.map +1 -0
- package/dist/types.d.ts +124 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validate-api.d.ts +9 -0
- package/dist/validate-api.js +97 -0
- package/dist/validate-api.js.map +1 -0
- package/dist/vilgain-api.d.ts +60 -0
- package/dist/vilgain-api.js +238 -0
- package/dist/vilgain-api.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product.js","sourceRoot":"","sources":["../../src/parsers/product.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as cheerio from 'cheerio';
|
|
2
|
+
import { cleanText, findDataLayerObject, parsePriceText, parseRatingText } from './common.js';
|
|
3
|
+
/**
|
|
4
|
+
* The search page's `view_item_list` analytics event lists the variant ids of
|
|
5
|
+
* the displayed products in card order (with occasional extra non-product
|
|
6
|
+
* entries like bundles). Zip it with the cards, matching by product name;
|
|
7
|
+
* a card that cannot be matched safely just gets no variant id.
|
|
8
|
+
*/
|
|
9
|
+
function buildVariantIdLookup(html) {
|
|
10
|
+
const list = findDataLayerObject(html, (obj) => obj.event === 'view_item_list' && Array.isArray(obj.item_ids) && Array.isArray(obj.item_names));
|
|
11
|
+
if (!list)
|
|
12
|
+
return () => undefined;
|
|
13
|
+
let pointer = 0;
|
|
14
|
+
const assigned = new Set();
|
|
15
|
+
return (name) => {
|
|
16
|
+
// Skip non-product entries (their names don't match the card).
|
|
17
|
+
let cursor = pointer;
|
|
18
|
+
while (cursor < list.item_names.length && cleanText(list.item_names[cursor]) !== name) {
|
|
19
|
+
cursor++;
|
|
20
|
+
}
|
|
21
|
+
if (cursor >= list.item_ids.length)
|
|
22
|
+
return undefined;
|
|
23
|
+
const id = list.item_ids[cursor];
|
|
24
|
+
pointer = cursor + 1;
|
|
25
|
+
// The analytics list can repeat an entry; never hand out the same id twice.
|
|
26
|
+
if (typeof id !== 'number' || assigned.has(id))
|
|
27
|
+
return undefined;
|
|
28
|
+
assigned.add(id);
|
|
29
|
+
return id;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** Parse product cards from a search results (or category listing) page. */
|
|
33
|
+
export function parseSearchResults(html, baseUrl) {
|
|
34
|
+
const $ = cheerio.load(html);
|
|
35
|
+
const products = [];
|
|
36
|
+
const seen = new Set();
|
|
37
|
+
const variantIdFor = buildVariantIdLookup(html);
|
|
38
|
+
$('.c-product-box').each((_, el) => {
|
|
39
|
+
const box = $(el);
|
|
40
|
+
const productId = parseInt(box.attr('data-item-id') ?? '', 10);
|
|
41
|
+
if (Number.isNaN(productId) || seen.has(productId))
|
|
42
|
+
return;
|
|
43
|
+
const href = box.find('a.c-product-box__link').attr('href');
|
|
44
|
+
if (!href)
|
|
45
|
+
return;
|
|
46
|
+
seen.add(productId);
|
|
47
|
+
const name = cleanText(box.attr('data-item-name') ?? box.find('.c-product-box__title').first().text());
|
|
48
|
+
const priceText = box.find('.c-product-box__price--main').first().text();
|
|
49
|
+
const price = parsePriceText(priceText);
|
|
50
|
+
const rating = parseRatingText(box.find('.c-product-box__rating .sr-only').first().text());
|
|
51
|
+
products.push({
|
|
52
|
+
productId,
|
|
53
|
+
name,
|
|
54
|
+
subtitle: cleanText(box.find('.c-product-box__subtitle').first().text()).replace(/^[–-]\s*/, '') || undefined,
|
|
55
|
+
defaultVariant: cleanText(box.find('.c-product-box__param').first().text()) || undefined,
|
|
56
|
+
variantId: variantIdFor(name),
|
|
57
|
+
url: new URL(href, baseUrl).href,
|
|
58
|
+
price: price?.price,
|
|
59
|
+
currency: price?.currency,
|
|
60
|
+
rating: rating?.rating,
|
|
61
|
+
reviewCount: rating?.reviewCount,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
return products;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/parsers/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { VilgainAPI } from '../vilgain-api.js';
|
|
3
|
+
export declare function createCartTools(api: VilgainAPI): {
|
|
4
|
+
getCartContent: {
|
|
5
|
+
name: string;
|
|
6
|
+
definition: {
|
|
7
|
+
title: string;
|
|
8
|
+
description: string;
|
|
9
|
+
inputSchema: {};
|
|
10
|
+
annotations: {
|
|
11
|
+
readOnlyHint: boolean;
|
|
12
|
+
openWorldHint: boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
handler: () => Promise<{
|
|
16
|
+
content: Array<{
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}>;
|
|
20
|
+
isError?: boolean;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
addToCart: {
|
|
24
|
+
name: string;
|
|
25
|
+
definition: {
|
|
26
|
+
title: string;
|
|
27
|
+
description: string;
|
|
28
|
+
inputSchema: {
|
|
29
|
+
variant_id: z.ZodNumber;
|
|
30
|
+
quantity: z.ZodDefault<z.ZodNumber>;
|
|
31
|
+
};
|
|
32
|
+
annotations: {
|
|
33
|
+
readOnlyHint: boolean;
|
|
34
|
+
destructiveHint: boolean;
|
|
35
|
+
openWorldHint: boolean;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
handler: ({ variant_id, quantity }: {
|
|
39
|
+
variant_id: number;
|
|
40
|
+
quantity?: number;
|
|
41
|
+
}) => Promise<{
|
|
42
|
+
content: Array<{
|
|
43
|
+
type: "text";
|
|
44
|
+
text: string;
|
|
45
|
+
}>;
|
|
46
|
+
isError?: boolean;
|
|
47
|
+
}>;
|
|
48
|
+
};
|
|
49
|
+
setCartItemQuantity: {
|
|
50
|
+
name: string;
|
|
51
|
+
definition: {
|
|
52
|
+
title: string;
|
|
53
|
+
description: string;
|
|
54
|
+
inputSchema: {
|
|
55
|
+
variant_id: z.ZodNumber;
|
|
56
|
+
quantity: z.ZodNumber;
|
|
57
|
+
};
|
|
58
|
+
annotations: {
|
|
59
|
+
readOnlyHint: boolean;
|
|
60
|
+
destructiveHint: boolean;
|
|
61
|
+
openWorldHint: boolean;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
handler: ({ variant_id, quantity }: {
|
|
65
|
+
variant_id: number;
|
|
66
|
+
quantity: number;
|
|
67
|
+
}) => Promise<{
|
|
68
|
+
content: Array<{
|
|
69
|
+
type: "text";
|
|
70
|
+
text: string;
|
|
71
|
+
}>;
|
|
72
|
+
isError?: boolean;
|
|
73
|
+
}>;
|
|
74
|
+
};
|
|
75
|
+
removeFromCart: {
|
|
76
|
+
name: string;
|
|
77
|
+
definition: {
|
|
78
|
+
title: string;
|
|
79
|
+
description: string;
|
|
80
|
+
inputSchema: {
|
|
81
|
+
variant_id: z.ZodNumber;
|
|
82
|
+
};
|
|
83
|
+
annotations: {
|
|
84
|
+
readOnlyHint: boolean;
|
|
85
|
+
destructiveHint: boolean;
|
|
86
|
+
openWorldHint: boolean;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
handler: ({ variant_id }: {
|
|
90
|
+
variant_id: number;
|
|
91
|
+
}) => Promise<{
|
|
92
|
+
content: Array<{
|
|
93
|
+
type: "text";
|
|
94
|
+
text: string;
|
|
95
|
+
}>;
|
|
96
|
+
isError?: boolean;
|
|
97
|
+
}>;
|
|
98
|
+
};
|
|
99
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, formatCart, textResult } from './helpers.js';
|
|
3
|
+
export function createCartTools(api) {
|
|
4
|
+
const getCartContent = {
|
|
5
|
+
name: 'get_cart_content',
|
|
6
|
+
definition: {
|
|
7
|
+
title: 'Get Cart Content',
|
|
8
|
+
description: 'Show the current content of the Vilgain shopping cart: items, quantities, prices and the total.',
|
|
9
|
+
inputSchema: {},
|
|
10
|
+
annotations: {
|
|
11
|
+
readOnlyHint: true,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
handler: async () => {
|
|
16
|
+
try {
|
|
17
|
+
return textResult(formatCart(await api.getCart()));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return errorResult(error);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
const addToCart = {
|
|
25
|
+
name: 'add_to_cart',
|
|
26
|
+
definition: {
|
|
27
|
+
title: 'Add to Cart',
|
|
28
|
+
description: 'Add a product variant to the Vilgain shopping cart. Requires a variant ID - either the displayed variant ' +
|
|
29
|
+
'from search_products, or a specific flavor/size from get_product_variants. ' +
|
|
30
|
+
'Adds the given quantity on top of what is already in the cart. Returns the updated cart.',
|
|
31
|
+
inputSchema: {
|
|
32
|
+
variant_id: z.number().int().positive().describe('Variant ID from search_products or get_product_variants'),
|
|
33
|
+
quantity: z.number().int().min(1).max(100).default(1).describe('How many pieces to add (default 1)'),
|
|
34
|
+
},
|
|
35
|
+
annotations: {
|
|
36
|
+
readOnlyHint: false,
|
|
37
|
+
destructiveHint: false,
|
|
38
|
+
openWorldHint: true,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
handler: async ({ variant_id, quantity }) => {
|
|
42
|
+
try {
|
|
43
|
+
const cart = await api.addToCart(variant_id, quantity ?? 1);
|
|
44
|
+
return textResult(`Added to cart.\n\n${formatCart(cart)}`);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return errorResult(error);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
const setCartItemQuantity = {
|
|
52
|
+
name: 'set_cart_item_quantity',
|
|
53
|
+
definition: {
|
|
54
|
+
title: 'Set Cart Item Quantity',
|
|
55
|
+
description: 'Set the exact quantity of an item already in the Vilgain cart (use variant IDs from get_cart_content). ' +
|
|
56
|
+
'Returns the updated cart.',
|
|
57
|
+
inputSchema: {
|
|
58
|
+
variant_id: z.number().int().positive().describe('Variant ID of an item in the cart'),
|
|
59
|
+
quantity: z.number().int().min(1).max(100).describe('New absolute quantity'),
|
|
60
|
+
},
|
|
61
|
+
annotations: {
|
|
62
|
+
readOnlyHint: false,
|
|
63
|
+
destructiveHint: false,
|
|
64
|
+
openWorldHint: true,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
handler: async ({ variant_id, quantity }) => {
|
|
68
|
+
try {
|
|
69
|
+
const cart = await api.setCartItemQuantity(variant_id, quantity);
|
|
70
|
+
return textResult(`Quantity updated.\n\n${formatCart(cart)}`);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return errorResult(error);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
const removeFromCart = {
|
|
78
|
+
name: 'remove_from_cart',
|
|
79
|
+
definition: {
|
|
80
|
+
title: 'Remove from Cart',
|
|
81
|
+
description: 'Remove an item from the Vilgain shopping cart (use variant IDs from get_cart_content). Returns the updated cart.',
|
|
82
|
+
inputSchema: {
|
|
83
|
+
variant_id: z.number().int().positive().describe('Variant ID of the item to remove'),
|
|
84
|
+
},
|
|
85
|
+
annotations: {
|
|
86
|
+
readOnlyHint: false,
|
|
87
|
+
destructiveHint: true,
|
|
88
|
+
openWorldHint: true,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
handler: async ({ variant_id }) => {
|
|
92
|
+
try {
|
|
93
|
+
const cart = await api.removeFromCart(variant_id);
|
|
94
|
+
return textResult(`Item removed.\n\n${formatCart(cart)}`);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return errorResult(error);
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
return { getCartContent, addToCart, setCartItemQuantity, removeFromCart };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=cart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cart.js","sourceRoot":"","sources":["../../src/tools/cart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CartContent } from '../types.js';
|
|
2
|
+
type ToolResult = {
|
|
3
|
+
content: Array<{
|
|
4
|
+
type: 'text';
|
|
5
|
+
text: string;
|
|
6
|
+
}>;
|
|
7
|
+
isError?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function textResult(text: string): ToolResult;
|
|
10
|
+
export declare function errorResult(error: unknown): ToolResult;
|
|
11
|
+
export declare function formatCart(cart: CartContent): string;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function textResult(text) {
|
|
2
|
+
return { content: [{ type: 'text', text }] };
|
|
3
|
+
}
|
|
4
|
+
export function errorResult(error) {
|
|
5
|
+
return {
|
|
6
|
+
content: [{ type: 'text', text: error instanceof Error ? error.message : String(error) }],
|
|
7
|
+
isError: true,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function formatCart(cart) {
|
|
11
|
+
if (cart.items.length === 0) {
|
|
12
|
+
return 'The cart is empty.';
|
|
13
|
+
}
|
|
14
|
+
const lines = cart.items.map((item) => {
|
|
15
|
+
const variant = item.variant ? ` (${item.variant})` : '';
|
|
16
|
+
return `• ${item.productName}${variant}\n Quantity: ${item.quantity} × ${item.price} ${item.currency}\n Variant ID: ${item.variantId}`;
|
|
17
|
+
});
|
|
18
|
+
const total = cart.totalWithVat !== undefined ? `\n\nTotal (with VAT): ${cart.totalWithVat} ${cart.currency ?? ''}`.trimEnd() : '';
|
|
19
|
+
return `Cart (${cart.items.length} item${cart.items.length === 1 ? '' : 's'}):\n\n${lines.join('\n\n')}${total}`;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAiB;IAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,IAAI,CAAC,WAAW,GAAG,OAAO,iBAAiB,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,mBAAmB,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3I,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GACT,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvH,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACnH,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { VilgainAPI } from '../vilgain-api.js';
|
|
3
|
+
export declare function createOrderHistoryTools(api: VilgainAPI): {
|
|
4
|
+
getOrderHistory: {
|
|
5
|
+
name: string;
|
|
6
|
+
definition: {
|
|
7
|
+
title: string;
|
|
8
|
+
description: string;
|
|
9
|
+
inputSchema: {};
|
|
10
|
+
annotations: {
|
|
11
|
+
readOnlyHint: boolean;
|
|
12
|
+
openWorldHint: boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
handler: () => Promise<{
|
|
16
|
+
content: Array<{
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}>;
|
|
20
|
+
isError?: boolean;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
getOrderDetail: {
|
|
24
|
+
name: string;
|
|
25
|
+
definition: {
|
|
26
|
+
title: string;
|
|
27
|
+
description: string;
|
|
28
|
+
inputSchema: {
|
|
29
|
+
order_id: z.ZodString;
|
|
30
|
+
};
|
|
31
|
+
annotations: {
|
|
32
|
+
readOnlyHint: boolean;
|
|
33
|
+
openWorldHint: boolean;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
handler: ({ order_id }: {
|
|
37
|
+
order_id: string;
|
|
38
|
+
}) => Promise<{
|
|
39
|
+
content: Array<{
|
|
40
|
+
type: "text";
|
|
41
|
+
text: string;
|
|
42
|
+
}>;
|
|
43
|
+
isError?: boolean;
|
|
44
|
+
}>;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, textResult } from './helpers.js';
|
|
3
|
+
export function createOrderHistoryTools(api) {
|
|
4
|
+
const getOrderHistory = {
|
|
5
|
+
name: 'get_order_history',
|
|
6
|
+
definition: {
|
|
7
|
+
title: 'Get Order History',
|
|
8
|
+
description: 'List past orders of the logged-in Vilgain account: order ID, date, state, total and product names. ' +
|
|
9
|
+
'Use get_order_detail with an order ID for quantities, prices and delivery status.',
|
|
10
|
+
inputSchema: {},
|
|
11
|
+
annotations: {
|
|
12
|
+
readOnlyHint: true,
|
|
13
|
+
openWorldHint: true,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
handler: async () => {
|
|
17
|
+
try {
|
|
18
|
+
const { orders, empty } = await api.getOrderHistory();
|
|
19
|
+
if (empty || orders.length === 0) {
|
|
20
|
+
return textResult('No past orders found on this account.');
|
|
21
|
+
}
|
|
22
|
+
const output = orders
|
|
23
|
+
.map((order) => {
|
|
24
|
+
const header = [
|
|
25
|
+
`• Order ${order.id}`,
|
|
26
|
+
order.date,
|
|
27
|
+
order.state,
|
|
28
|
+
order.total !== undefined ? `${order.total} ${order.currency}` : undefined,
|
|
29
|
+
]
|
|
30
|
+
.filter(Boolean)
|
|
31
|
+
.join(' | ');
|
|
32
|
+
const products = order.productNames.length > 0 ? `\n Products: ${order.productNames.join(', ')}` : '';
|
|
33
|
+
return header + products;
|
|
34
|
+
})
|
|
35
|
+
.join('\n\n');
|
|
36
|
+
return textResult(`Found ${orders.length} orders (most recent first):\n\n${output}`);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return errorResult(error);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const getOrderDetail = {
|
|
44
|
+
name: 'get_order_detail',
|
|
45
|
+
definition: {
|
|
46
|
+
title: 'Get Order Detail',
|
|
47
|
+
description: 'Get one past order of the logged-in Vilgain account: items with variants, quantities, prices and ' +
|
|
48
|
+
'variant IDs (usable with add_to_cart to reorder), order total, delivery destination and shipment status timeline.',
|
|
49
|
+
inputSchema: {
|
|
50
|
+
order_id: z.string().regex(/^\d+$/).describe('Order ID from get_order_history'),
|
|
51
|
+
},
|
|
52
|
+
annotations: {
|
|
53
|
+
readOnlyHint: true,
|
|
54
|
+
openWorldHint: true,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
handler: async ({ order_id }) => {
|
|
58
|
+
try {
|
|
59
|
+
const detail = await api.getOrderDetail(order_id);
|
|
60
|
+
const sections = [`# Order ${detail.orderNumber}`];
|
|
61
|
+
if (detail.items.length > 0) {
|
|
62
|
+
const items = detail.items
|
|
63
|
+
.map((item) => {
|
|
64
|
+
const parts = [
|
|
65
|
+
item.variant,
|
|
66
|
+
item.quantity !== undefined ? `${item.quantity} pcs` : undefined,
|
|
67
|
+
item.price !== undefined ? `${item.price} ${item.currency}` : undefined,
|
|
68
|
+
].filter(Boolean);
|
|
69
|
+
const variantId = item.variantId !== undefined ? `\n Variant ID (for add_to_cart): ${item.variantId}` : '';
|
|
70
|
+
return `• ${item.name}${parts.length > 0 ? ` (${parts.join(', ')})` : ''}${variantId}${item.url ? `\n URL: ${item.url}` : ''}`;
|
|
71
|
+
})
|
|
72
|
+
.join('\n');
|
|
73
|
+
sections.push(`## Items\n${items}`);
|
|
74
|
+
}
|
|
75
|
+
if (detail.totalWithVat !== undefined) {
|
|
76
|
+
sections.push(`Total (with VAT): ${detail.totalWithVat} ${detail.currency ?? ''}`.trimEnd());
|
|
77
|
+
}
|
|
78
|
+
if (detail.deliveryAddress) {
|
|
79
|
+
sections.push(`Delivery: ${detail.deliveryAddress}`);
|
|
80
|
+
}
|
|
81
|
+
if (detail.timeline.length > 0) {
|
|
82
|
+
sections.push(`## Status timeline\n${detail.timeline.map((e) => `• ${e.event}${e.date ? ` – ${e.date}` : ''}`).join('\n')}`);
|
|
83
|
+
}
|
|
84
|
+
return textResult(sections.join('\n\n'));
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return errorResult(error);
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
return { getOrderHistory, getOrderDetail };
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=order-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-history.js","sourceRoot":"","sources":["../../src/tools/order-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { VilgainAPI } from '../vilgain-api.js';
|
|
3
|
+
export declare function createProductDetailTool(api: VilgainAPI): {
|
|
4
|
+
name: string;
|
|
5
|
+
definition: {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: {
|
|
9
|
+
product_url: z.ZodString;
|
|
10
|
+
variant_id: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
};
|
|
12
|
+
annotations: {
|
|
13
|
+
readOnlyHint: boolean;
|
|
14
|
+
openWorldHint: boolean;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
handler: ({ product_url, variant_id }: {
|
|
18
|
+
product_url: string;
|
|
19
|
+
variant_id?: number;
|
|
20
|
+
}) => Promise<{
|
|
21
|
+
content: Array<{
|
|
22
|
+
type: "text";
|
|
23
|
+
text: string;
|
|
24
|
+
}>;
|
|
25
|
+
isError?: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, textResult } from './helpers.js';
|
|
3
|
+
function formatNutritionTable(table) {
|
|
4
|
+
const header = ` | ${['', ...table.columns].join(' | ')} |`;
|
|
5
|
+
const rows = table.rows.map((row) => ` | ${[row.label, ...row.values].join(' | ')} |`);
|
|
6
|
+
return [header, ...rows].join('\n');
|
|
7
|
+
}
|
|
8
|
+
export function createProductDetailTool(api) {
|
|
9
|
+
return {
|
|
10
|
+
name: 'get_product_detail',
|
|
11
|
+
definition: {
|
|
12
|
+
title: 'Get Product Detail',
|
|
13
|
+
description: 'Get what is inside a Vilgain product: ingredients (with allergens), nutrition facts, dosage and description. ' +
|
|
14
|
+
'Without variant_id it describes the product\'s default variant; pass variant_id (from search_products, ' +
|
|
15
|
+
'get_product_variants or get_order_detail) to inspect a specific flavor/size. ' +
|
|
16
|
+
'For the list of variants and prices use get_product_variants instead.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
product_url: z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1)
|
|
21
|
+
.describe('Product or variant URL, e.g. "https://vilgain.cz/vilgain-whey-protein-2"'),
|
|
22
|
+
variant_id: z
|
|
23
|
+
.number()
|
|
24
|
+
.int()
|
|
25
|
+
.positive()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Optional variant ID to get the content of a specific flavor/size of this product'),
|
|
28
|
+
},
|
|
29
|
+
annotations: {
|
|
30
|
+
readOnlyHint: true,
|
|
31
|
+
openWorldHint: true,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
handler: async ({ product_url, variant_id }) => {
|
|
35
|
+
try {
|
|
36
|
+
const detail = await api.getProductDetail(product_url, variant_id);
|
|
37
|
+
const sections = [];
|
|
38
|
+
sections.push(`# ${detail.name}`);
|
|
39
|
+
const selected = detail.variants.find((v) => v.variantId === detail.selectedVariantId);
|
|
40
|
+
if (selected)
|
|
41
|
+
sections.push(`Content below refers to variant: ${selected.name} (Variant ID: ${selected.variantId})`);
|
|
42
|
+
if (detail.rating)
|
|
43
|
+
sections.push(`Rating: ${detail.rating} (${detail.reviewCount} reviews)`);
|
|
44
|
+
if (detail.shortDescription)
|
|
45
|
+
sections.push(detail.shortDescription);
|
|
46
|
+
if (detail.ingredients)
|
|
47
|
+
sections.push(`## Ingredients & allergens\n${detail.ingredients}`);
|
|
48
|
+
if (detail.nutrition.length > 0) {
|
|
49
|
+
sections.push(`## Nutrition facts\n${detail.nutrition.map(formatNutritionTable).join('\n\n')}`);
|
|
50
|
+
}
|
|
51
|
+
if (detail.dosage)
|
|
52
|
+
sections.push(`## Dosage\n${detail.dosage}`);
|
|
53
|
+
if (detail.description)
|
|
54
|
+
sections.push(`## Description\n${detail.description}`);
|
|
55
|
+
sections.push(`URL: ${detail.url}`);
|
|
56
|
+
return textResult(sections.join('\n\n'));
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return errorResult(error);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=product-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-detail.js","sourceRoot":"","sources":["../../src/tools/product-detail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { VilgainAPI } from '../vilgain-api.js';
|
|
3
|
+
export declare function createProductVariantsTool(api: VilgainAPI): {
|
|
4
|
+
name: string;
|
|
5
|
+
definition: {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: {
|
|
9
|
+
product_url: z.ZodString;
|
|
10
|
+
};
|
|
11
|
+
annotations: {
|
|
12
|
+
readOnlyHint: boolean;
|
|
13
|
+
openWorldHint: boolean;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
handler: ({ product_url }: {
|
|
17
|
+
product_url: string;
|
|
18
|
+
}) => Promise<{
|
|
19
|
+
content: Array<{
|
|
20
|
+
type: "text";
|
|
21
|
+
text: string;
|
|
22
|
+
}>;
|
|
23
|
+
isError?: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
};
|