@tomaspavlin/rohlik-mcp 1.0.6 → 2.0.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.
Files changed (58) hide show
  1. package/README.md +55 -9
  2. package/dist/index.js +41 -201
  3. package/dist/index.js.map +1 -1
  4. package/dist/rohlik-api.d.ts +9 -1
  5. package/dist/rohlik-api.d.ts.map +1 -1
  6. package/dist/rohlik-api.js +147 -1
  7. package/dist/rohlik-api.js.map +1 -1
  8. package/dist/tools/account-data.d.ts +23 -0
  9. package/dist/tools/account-data.d.ts.map +1 -0
  10. package/dist/tools/account-data.js +83 -0
  11. package/dist/tools/account-data.js.map +1 -0
  12. package/dist/tools/announcements.d.ts +23 -0
  13. package/dist/tools/announcements.d.ts.map +1 -0
  14. package/dist/tools/announcements.js +61 -0
  15. package/dist/tools/announcements.js.map +1 -0
  16. package/dist/tools/cart-management.d.ts +88 -0
  17. package/dist/tools/cart-management.d.ts.map +1 -0
  18. package/dist/tools/cart-management.js +136 -0
  19. package/dist/tools/cart-management.js.map +1 -0
  20. package/dist/tools/delivery-info.d.ts +23 -0
  21. package/dist/tools/delivery-info.d.ts.map +1 -0
  22. package/dist/tools/delivery-info.js +69 -0
  23. package/dist/tools/delivery-info.js.map +1 -0
  24. package/dist/tools/delivery-slots.d.ts +23 -0
  25. package/dist/tools/delivery-slots.d.ts.map +1 -0
  26. package/dist/tools/delivery-slots.js +55 -0
  27. package/dist/tools/delivery-slots.js.map +1 -0
  28. package/dist/tools/index.d.ts +137 -0
  29. package/dist/tools/index.d.ts.map +1 -0
  30. package/dist/tools/index.js +19 -0
  31. package/dist/tools/index.js.map +1 -0
  32. package/dist/tools/order-history.d.ts +28 -0
  33. package/dist/tools/order-history.d.ts.map +1 -0
  34. package/dist/tools/order-history.js +62 -0
  35. package/dist/tools/order-history.js.map +1 -0
  36. package/dist/tools/premium-info.d.ts +23 -0
  37. package/dist/tools/premium-info.d.ts.map +1 -0
  38. package/dist/tools/premium-info.js +84 -0
  39. package/dist/tools/premium-info.js.map +1 -0
  40. package/dist/tools/reusable-bags.d.ts +23 -0
  41. package/dist/tools/reusable-bags.d.ts.map +1 -0
  42. package/dist/tools/reusable-bags.js +79 -0
  43. package/dist/tools/reusable-bags.js.map +1 -0
  44. package/dist/tools/search-products.d.ts +32 -0
  45. package/dist/tools/search-products.d.ts.map +1 -0
  46. package/dist/tools/search-products.js +44 -0
  47. package/dist/tools/search-products.js.map +1 -0
  48. package/dist/tools/shopping-lists.d.ts +28 -0
  49. package/dist/tools/shopping-lists.d.ts.map +1 -0
  50. package/dist/tools/shopping-lists.js +54 -0
  51. package/dist/tools/shopping-lists.js.map +1 -0
  52. package/dist/tools/upcoming-orders.d.ts +23 -0
  53. package/dist/tools/upcoming-orders.d.ts.map +1 -0
  54. package/dist/tools/upcoming-orders.js +61 -0
  55. package/dist/tools/upcoming-orders.js.map +1 -0
  56. package/dist/types.d.ts +14 -0
  57. package/dist/types.d.ts.map +1 -1
  58. package/package.json +2 -2
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ export function createShoppingListsTool(createRohlikAPI) {
3
+ return {
4
+ name: "get_shopping_list",
5
+ definition: {
6
+ title: "Get Shopping List",
7
+ description: "Get a shopping list by ID",
8
+ inputSchema: {
9
+ shopping_list_id: z.string().min(1, "Shopping list ID is required").describe("The ID of the shopping list to retrieve")
10
+ }
11
+ },
12
+ handler: async ({ shopping_list_id }) => {
13
+ try {
14
+ const api = createRohlikAPI();
15
+ const shoppingList = await api.getShoppingList(shopping_list_id);
16
+ if (!shoppingList.products || shoppingList.products.length === 0) {
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: `Shopping list "${shoppingList.name}" is empty.`
22
+ }
23
+ ]
24
+ };
25
+ }
26
+ const output = `Shopping List: ${shoppingList.name}
27
+ Total products: ${shoppingList.products.length}
28
+
29
+ Products:
30
+ ${shoppingList.products.map((product, index) => `${index + 1}. ${product.name || 'Unknown product'}`).join('\n')}`;
31
+ return {
32
+ content: [
33
+ {
34
+ type: "text",
35
+ text: output
36
+ }
37
+ ]
38
+ };
39
+ }
40
+ catch (error) {
41
+ return {
42
+ content: [
43
+ {
44
+ type: "text",
45
+ text: error instanceof Error ? error.message : String(error)
46
+ }
47
+ ],
48
+ isError: true
49
+ };
50
+ }
51
+ }
52
+ };
53
+ }
54
+ //# sourceMappingURL=shopping-lists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopping-lists.js","sourceRoot":"","sources":["../../src/tools/shopping-lists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,uBAAuB,CAAC,eAAgC;IACtE,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE;YACV,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,2BAA2B;YACxC,WAAW,EAAE;gBACX,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;aACxH;SACF;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAgC,EAAE,EAAE;YACpE,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;gBAEjE,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjE,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,kBAAkB,YAAY,CAAC,IAAI,aAAa;6BACvD;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,kBAAkB,YAAY,CAAC,IAAI;kBACxC,YAAY,CAAC,QAAQ,CAAC,MAAM;;;EAG5C,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAC7C,GAAG,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,IAAI,iBAAiB,EAAE,CACrD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEP,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,MAAM;yBACb;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC7D;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { RohlikAPI } from "../rohlik-api.js";
2
+ export declare function createUpcomingOrdersTool(createRohlikAPI: () => RohlikAPI): {
3
+ name: string;
4
+ definition: {
5
+ title: string;
6
+ description: string;
7
+ inputSchema: {};
8
+ };
9
+ handler: () => Promise<{
10
+ content: {
11
+ type: "text";
12
+ text: string;
13
+ }[];
14
+ isError?: undefined;
15
+ } | {
16
+ content: {
17
+ type: "text";
18
+ text: string;
19
+ }[];
20
+ isError: boolean;
21
+ }>;
22
+ };
23
+ //# sourceMappingURL=upcoming-orders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upcoming-orders.d.ts","sourceRoot":"","sources":["../../src/tools/upcoming-orders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;EA+DxE"}
@@ -0,0 +1,61 @@
1
+ export function createUpcomingOrdersTool(createRohlikAPI) {
2
+ return {
3
+ name: "get_upcoming_orders",
4
+ definition: {
5
+ title: "Get Upcoming Orders",
6
+ description: "Get your scheduled upcoming orders",
7
+ inputSchema: {}
8
+ },
9
+ handler: async () => {
10
+ try {
11
+ const api = createRohlikAPI();
12
+ const upcomingOrders = await api.getUpcomingOrders();
13
+ if (!upcomingOrders || (Array.isArray(upcomingOrders) && upcomingOrders.length === 0)) {
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: "No upcoming orders found."
19
+ }
20
+ ]
21
+ };
22
+ }
23
+ const formatUpcomingOrder = (order, index) => {
24
+ const deliveryDate = order.deliveryDate || order.scheduledAt || 'Unknown date';
25
+ const deliveryTime = order.deliveryTime || order.timeSlot || 'Unknown time';
26
+ const totalPrice = order.totalPrice || order.price || 'Unknown price';
27
+ const orderNumber = order.orderNumber || order.id || `Order ${index + 1}`;
28
+ const status = order.status || 'Scheduled';
29
+ const itemCount = order.itemCount || order.items?.length || 'Unknown';
30
+ return `${index + 1}. ${orderNumber}
31
+ Delivery: ${deliveryDate} ${deliveryTime}
32
+ Total: ${totalPrice} CZK
33
+ Items: ${itemCount}
34
+ Status: ${status}`;
35
+ };
36
+ const orders = Array.isArray(upcomingOrders) ? upcomingOrders : [upcomingOrders];
37
+ const output = `📦 UPCOMING ORDERS (${orders.length} orders):\n\n${orders.map(formatUpcomingOrder).join('\n\n')}`;
38
+ return {
39
+ content: [
40
+ {
41
+ type: "text",
42
+ text: output
43
+ }
44
+ ]
45
+ };
46
+ }
47
+ catch (error) {
48
+ return {
49
+ content: [
50
+ {
51
+ type: "text",
52
+ text: error instanceof Error ? error.message : String(error)
53
+ }
54
+ ],
55
+ isError: true
56
+ };
57
+ }
58
+ }
59
+ };
60
+ }
61
+ //# sourceMappingURL=upcoming-orders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upcoming-orders.js","sourceRoot":"","sources":["../../src/tools/upcoming-orders.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB,CAAC,eAAgC;IACvE,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE;YACV,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,oCAAoC;YACjD,WAAW,EAAE,EAAE;SAChB;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;gBAC9B,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAC;gBAErD,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBACtF,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,2BAA2B;6BAClC;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,mBAAmB,GAAG,CAAC,KAAU,EAAE,KAAa,EAAU,EAAE;oBAChE,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,IAAI,cAAc,CAAC;oBAC/E,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,IAAI,cAAc,CAAC;oBAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,eAAe,CAAC;oBACtE,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,IAAI,SAAS,KAAK,GAAG,CAAC,EAAE,CAAC;oBAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC;oBAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC;oBAEtE,OAAO,GAAG,KAAK,GAAG,CAAC,KAAK,WAAW;eAC9B,YAAY,IAAI,YAAY;YAC/B,UAAU;YACV,SAAS;aACR,MAAM,EAAE,CAAC;gBACd,CAAC,CAAC;gBAEF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBACjF,MAAM,MAAM,GAAG,uBAAuB,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAElH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,MAAM;yBACb;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC7D;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/types.d.ts CHANGED
@@ -124,4 +124,18 @@ export interface RohlikAPIResponse<T = any> {
124
124
  content: string;
125
125
  }>;
126
126
  }
127
+ export interface AccountData {
128
+ login?: any;
129
+ delivery?: any;
130
+ next_order?: any;
131
+ announcements?: any;
132
+ bags?: any;
133
+ timeslot?: any;
134
+ last_order?: any;
135
+ premium_profile?: any;
136
+ next_delivery_slot?: any;
137
+ delivery_announcements?: any;
138
+ delivered_orders?: any;
139
+ cart?: CartContent;
140
+ }
127
141
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAM7B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;EAQzB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAM7B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;EAQzB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,kBAAkB,CAAC,EAAE,GAAG,CAAC;IACzB,sBAAsB,CAAC,EAAE,GAAG,CAAC;IAC7B,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomaspavlin/rohlik-mcp",
3
- "version": "1.0.6",
3
+ "version": "2.0.0",
4
4
  "type": "module",
5
5
  "description": "MCP server for controlling Rohlik.cz grocery shopping website",
6
6
  "keywords": [
@@ -33,7 +33,7 @@
33
33
  "scripts": {
34
34
  "build": "tsc && chmod +x dist/*.js",
35
35
  "start": "node dist/index.js",
36
- "inspect": "npm run build && npx @modelcontextprotocol/inspector node dist/index.js",
36
+ "inspect": "npm run build && npx @modelcontextprotocol/inspector -e ROHLIK_USERNAME=your-email@example.com -e ROHLIK_PASSWORD=your-password node dist/index.js",
37
37
  "watch": "tsc --watch",
38
38
  "prepublishOnly": "npm run build"
39
39
  },