@open-loyalty/mcp-server 1.0.3 → 1.3.1

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 (142) hide show
  1. package/README.md +180 -177
  2. package/dist/auth/provider.js +2 -14
  3. package/dist/auth/storage.js +22 -0
  4. package/dist/client/http.d.ts +5 -0
  5. package/dist/client/http.js +62 -3
  6. package/dist/config.d.ts +6 -5
  7. package/dist/config.js +15 -11
  8. package/dist/http.js +170 -65
  9. package/dist/instructions.d.ts +5 -0
  10. package/dist/instructions.js +420 -0
  11. package/dist/prompts/fan-engagement-setup.d.ts +107 -0
  12. package/dist/prompts/fan-engagement-setup.js +492 -0
  13. package/dist/server.d.ts +1 -1
  14. package/dist/server.js +68 -278
  15. package/dist/tools/achievement/handlers.d.ts +117 -0
  16. package/dist/tools/achievement/handlers.js +161 -0
  17. package/dist/tools/achievement/index.d.ts +479 -0
  18. package/dist/tools/achievement/index.js +74 -0
  19. package/dist/tools/achievement/schemas.d.ts +433 -0
  20. package/dist/tools/achievement/schemas.js +142 -0
  21. package/dist/tools/achievement.d.ts +155 -121
  22. package/dist/tools/achievement.js +82 -39
  23. package/dist/tools/admin.d.ts +18 -6
  24. package/dist/tools/admin.js +24 -12
  25. package/dist/tools/analytics.d.ts +29 -11
  26. package/dist/tools/analytics.js +58 -48
  27. package/dist/tools/apikey.d.ts +10 -3
  28. package/dist/tools/apikey.js +13 -6
  29. package/dist/tools/audit.d.ts +6 -2
  30. package/dist/tools/audit.js +8 -4
  31. package/dist/tools/badge.d.ts +14 -6
  32. package/dist/tools/badge.js +36 -27
  33. package/dist/tools/campaign/handlers.d.ts +42 -0
  34. package/dist/tools/campaign/handlers.js +223 -0
  35. package/dist/tools/campaign/index.d.ts +783 -0
  36. package/dist/tools/campaign/index.js +112 -0
  37. package/dist/tools/campaign/member-handlers.d.ts +60 -0
  38. package/dist/tools/campaign/member-handlers.js +159 -0
  39. package/dist/tools/campaign/schemas.d.ts +704 -0
  40. package/dist/tools/campaign/schemas.js +259 -0
  41. package/dist/tools/campaign/types.d.ts +161 -0
  42. package/dist/tools/campaign/types.js +2 -0
  43. package/dist/tools/campaign.d.ts +41 -16
  44. package/dist/tools/campaign.js +38 -25
  45. package/dist/tools/custom-event.d.ts +315 -0
  46. package/dist/tools/custom-event.js +270 -0
  47. package/dist/tools/export.d.ts +12 -4
  48. package/dist/tools/export.js +25 -20
  49. package/dist/tools/import.d.ts +9 -3
  50. package/dist/tools/import.js +33 -21
  51. package/dist/tools/index.d.ts +3 -11
  52. package/dist/tools/index.js +17 -475
  53. package/dist/tools/member/handlers.d.ts +111 -0
  54. package/dist/tools/member/handlers.js +206 -0
  55. package/dist/tools/member/index.d.ts +169 -0
  56. package/dist/tools/member/index.js +92 -0
  57. package/dist/tools/member/schemas.d.ts +89 -0
  58. package/dist/tools/member/schemas.js +65 -0
  59. package/dist/tools/member.d.ts +21 -0
  60. package/dist/tools/member.js +56 -62
  61. package/dist/tools/points.d.ts +19 -6
  62. package/dist/tools/points.js +51 -49
  63. package/dist/tools/referral/handlers.d.ts +47 -0
  64. package/dist/tools/referral/handlers.js +115 -0
  65. package/dist/tools/referral/index.d.ts +44 -0
  66. package/dist/tools/referral/index.js +44 -0
  67. package/dist/tools/referral/schemas.d.ts +34 -0
  68. package/dist/tools/referral/schemas.js +52 -0
  69. package/dist/tools/reward/handlers.d.ts +110 -0
  70. package/dist/tools/reward/handlers.js +289 -0
  71. package/dist/tools/reward/index.d.ts +177 -0
  72. package/dist/tools/reward/index.js +90 -0
  73. package/dist/tools/reward/schemas.d.ts +116 -0
  74. package/dist/tools/reward/schemas.js +91 -0
  75. package/dist/tools/reward.d.ts +18 -0
  76. package/dist/tools/reward.js +56 -66
  77. package/dist/tools/role.d.ts +26 -7
  78. package/dist/tools/role.js +25 -12
  79. package/dist/tools/segment/handlers.d.ts +87 -0
  80. package/dist/tools/segment/handlers.js +174 -0
  81. package/dist/tools/segment/index.d.ts +395 -0
  82. package/dist/tools/segment/index.js +87 -0
  83. package/dist/tools/segment/schemas.d.ts +337 -0
  84. package/dist/tools/segment/schemas.js +79 -0
  85. package/dist/tools/segment.d.ts +29 -10
  86. package/dist/tools/segment.js +84 -50
  87. package/dist/tools/store.d.ts +12 -4
  88. package/dist/tools/store.js +16 -8
  89. package/dist/tools/tierset.d.ts +19 -7
  90. package/dist/tools/tierset.js +44 -35
  91. package/dist/tools/transaction.d.ts +16 -8
  92. package/dist/tools/transaction.js +25 -21
  93. package/dist/tools/wallet-type.d.ts +7 -3
  94. package/dist/tools/wallet-type.js +14 -12
  95. package/dist/tools/webhook.d.ts +23 -10
  96. package/dist/tools/webhook.js +135 -33
  97. package/dist/types/schemas/achievement.d.ts +12 -309
  98. package/dist/types/schemas/achievement.js +0 -13
  99. package/dist/types/schemas/admin.d.ts +10 -97
  100. package/dist/types/schemas/admin.js +0 -38
  101. package/dist/types/schemas/badge.d.ts +0 -37
  102. package/dist/types/schemas/badge.js +0 -11
  103. package/dist/types/schemas/campaign.d.ts +64 -832
  104. package/dist/types/schemas/campaign.js +2 -25
  105. package/dist/types/schemas/common.d.ts +5 -0
  106. package/dist/types/schemas/common.js +5 -0
  107. package/dist/types/schemas/export.d.ts +0 -17
  108. package/dist/types/schemas/export.js +0 -7
  109. package/dist/types/schemas/member.d.ts +37 -176
  110. package/dist/types/schemas/member.js +0 -27
  111. package/dist/types/schemas/points.d.ts +0 -63
  112. package/dist/types/schemas/points.js +0 -22
  113. package/dist/types/schemas/reward.d.ts +71 -68
  114. package/dist/types/schemas/reward.js +8 -28
  115. package/dist/types/schemas/role.d.ts +0 -100
  116. package/dist/types/schemas/role.js +0 -29
  117. package/dist/types/schemas/segment.d.ts +0 -58
  118. package/dist/types/schemas/segment.js +0 -17
  119. package/dist/types/schemas/tierset.d.ts +0 -176
  120. package/dist/types/schemas/tierset.js +0 -27
  121. package/dist/types/schemas/transaction.d.ts +23 -254
  122. package/dist/types/schemas/transaction.js +0 -7
  123. package/dist/types/schemas/wallet-type.d.ts +8 -8
  124. package/dist/types/schemas/wallet-type.js +1 -1
  125. package/dist/types/schemas/webhook.d.ts +0 -58
  126. package/dist/types/schemas/webhook.js +0 -12
  127. package/dist/utils/errors.js +30 -3
  128. package/dist/utils/payload.d.ts +12 -0
  129. package/dist/utils/payload.js +14 -0
  130. package/dist/workflows/app-login-streak.d.ts +39 -0
  131. package/dist/workflows/app-login-streak.js +298 -0
  132. package/dist/workflows/early-arrival.d.ts +33 -0
  133. package/dist/workflows/early-arrival.js +148 -0
  134. package/dist/workflows/index.d.ts +101 -0
  135. package/dist/workflows/index.js +208 -0
  136. package/dist/workflows/match-attendance.d.ts +45 -0
  137. package/dist/workflows/match-attendance.js +308 -0
  138. package/dist/workflows/sportsbar-visit.d.ts +41 -0
  139. package/dist/workflows/sportsbar-visit.js +284 -0
  140. package/dist/workflows/vod-watching.d.ts +43 -0
  141. package/dist/workflows/vod-watching.js +326 -0
  142. package/package.json +10 -2
@@ -200,7 +200,9 @@ export declare function memberRemoveManualTier(input: {
200
200
  }): Promise<void>;
201
201
  export declare const memberToolDefinitions: readonly [{
202
202
  readonly name: "openloyalty_member_create";
203
+ readonly title: "Register New Member";
203
204
  readonly description: "Register a new loyalty program member. Returns memberId for subsequent operations like points_add or member_get. Email must be unique within the store.";
205
+ readonly readOnly: false;
204
206
  readonly inputSchema: {
205
207
  storeCode: z.ZodOptional<z.ZodString>;
206
208
  email: z.ZodString;
@@ -236,7 +238,9 @@ export declare const memberToolDefinitions: readonly [{
236
238
  readonly handler: typeof memberCreate;
237
239
  }, {
238
240
  readonly name: "openloyalty_member_get";
241
+ readonly title: "Get Member Profile";
239
242
  readonly description: "Get member details including profile, points balance, and tier status. Use memberId from member_create or member_list.";
243
+ readonly readOnly: true;
240
244
  readonly inputSchema: {
241
245
  storeCode: z.ZodOptional<z.ZodString>;
242
246
  memberId: z.ZodString;
@@ -244,7 +248,9 @@ export declare const memberToolDefinitions: readonly [{
244
248
  readonly handler: typeof memberGet;
245
249
  }, {
246
250
  readonly name: "openloyalty_member_list";
251
+ readonly title: "Search Members";
247
252
  readonly description: string;
253
+ readonly readOnly: true;
248
254
  readonly inputSchema: {
249
255
  storeCode: z.ZodOptional<z.ZodString>;
250
256
  cursor: z.ZodOptional<z.ZodString>;
@@ -260,7 +266,9 @@ export declare const memberToolDefinitions: readonly [{
260
266
  readonly handler: typeof memberList;
261
267
  }, {
262
268
  readonly name: "openloyalty_member_update";
269
+ readonly title: "Update Member Profile";
263
270
  readonly description: "Update member profile fields. Cannot change email. Use member_get first to see current values.";
271
+ readonly readOnly: false;
264
272
  readonly inputSchema: {
265
273
  storeCode: z.ZodOptional<z.ZodString>;
266
274
  memberId: z.ZodString;
@@ -295,7 +303,9 @@ export declare const memberToolDefinitions: readonly [{
295
303
  readonly handler: typeof memberUpdate;
296
304
  }, {
297
305
  readonly name: "openloyalty_member_activate";
306
+ readonly title: "Activate Member Account";
298
307
  readonly description: "Activate a member account. Inactive members cannot earn or spend points.";
308
+ readonly readOnly: false;
299
309
  readonly inputSchema: {
300
310
  storeCode: z.ZodOptional<z.ZodString>;
301
311
  memberId: z.ZodString;
@@ -303,7 +313,9 @@ export declare const memberToolDefinitions: readonly [{
303
313
  readonly handler: typeof memberActivate;
304
314
  }, {
305
315
  readonly name: "openloyalty_member_deactivate";
316
+ readonly title: "Deactivate Member Account";
306
317
  readonly description: "Deactivate a member account. Deactivated members cannot earn or spend points but retain their balance.";
318
+ readonly readOnly: false;
307
319
  readonly inputSchema: {
308
320
  storeCode: z.ZodOptional<z.ZodString>;
309
321
  memberId: z.ZodString;
@@ -311,7 +323,10 @@ export declare const memberToolDefinitions: readonly [{
311
323
  readonly handler: typeof memberDeactivate;
312
324
  }, {
313
325
  readonly name: "openloyalty_member_delete";
326
+ readonly title: "Delete Member (Permanent)";
314
327
  readonly description: "Permanently removes member and all associated data. Cannot be undone. Use for GDPR compliance or member requests.";
328
+ readonly readOnly: false;
329
+ readonly destructive: true;
315
330
  readonly inputSchema: {
316
331
  storeCode: z.ZodOptional<z.ZodString>;
317
332
  memberId: z.ZodString;
@@ -319,7 +334,9 @@ export declare const memberToolDefinitions: readonly [{
319
334
  readonly handler: typeof memberDelete;
320
335
  }, {
321
336
  readonly name: "openloyalty_member_get_tier_progress";
337
+ readonly title: "Check Tier Progress";
322
338
  readonly description: "Get member tier progression status showing current tier and progress to next. Returns currentValue, requiredValue, and progressPercent.";
339
+ readonly readOnly: true;
323
340
  readonly inputSchema: {
324
341
  storeCode: z.ZodOptional<z.ZodString>;
325
342
  memberId: z.ZodString;
@@ -327,7 +344,9 @@ export declare const memberToolDefinitions: readonly [{
327
344
  readonly handler: typeof memberGetTierProgress;
328
345
  }, {
329
346
  readonly name: "openloyalty_member_assign_tier";
347
+ readonly title: "Assign Tier to Member";
330
348
  readonly description: "Manually assign a tier level to a member, overriding automatic tier calculation. Use tierset_get_tiers to find available levelId values.";
349
+ readonly readOnly: false;
331
350
  readonly inputSchema: {
332
351
  storeCode: z.ZodOptional<z.ZodString>;
333
352
  memberId: z.ZodString;
@@ -336,7 +355,9 @@ export declare const memberToolDefinitions: readonly [{
336
355
  readonly handler: typeof memberAssignTier;
337
356
  }, {
338
357
  readonly name: "openloyalty_member_remove_manual_tier";
358
+ readonly title: "Remove Manual Tier Assignment";
339
359
  readonly description: "Remove manually assigned tier from member, restoring automatic tier calculation based on conditions.";
360
+ readonly readOnly: false;
340
361
  readonly inputSchema: {
341
362
  storeCode: z.ZodOptional<z.ZodString>;
342
363
  memberId: z.ZodString;
@@ -2,8 +2,9 @@ import { z } from "zod";
2
2
  import { apiGet, apiPost, apiPut, apiDelete } from "../client/http.js";
3
3
  import { MemberSchema, } from "../types/schemas/member.js";
4
4
  import { formatApiError } from "../utils/errors.js";
5
- import { getConfig } from "../config.js";
5
+ import { getStoreCode } from "../config.js";
6
6
  import { buildPaginationParams } from "../utils/pagination.js";
7
+ import { omitUndefined } from "../utils/payload.js";
7
8
  // Input Schemas
8
9
  export const MemberCreateInputSchema = {
9
10
  storeCode: z.string().optional().describe("Store code. If not provided, uses the default store code from configuration."),
@@ -71,31 +72,20 @@ export const MemberAssignTierInputSchema = {
71
72
  };
72
73
  // Handler functions
73
74
  export async function memberCreate(input) {
74
- const config = getConfig();
75
- const storeCode = input.storeCode || config.defaultStoreCode;
76
- const payload = {
75
+ const storeCode = getStoreCode(input.storeCode);
76
+ const payload = omitUndefined({
77
77
  email: input.email,
78
- };
79
- if (input.firstName)
80
- payload.firstName = input.firstName;
81
- if (input.lastName)
82
- payload.lastName = input.lastName;
83
- if (input.phone)
84
- payload.phone = input.phone;
85
- if (input.birthDate)
86
- payload.birthDate = input.birthDate;
87
- if (input.gender)
88
- payload.gender = input.gender;
89
- if (input.loyaltyCardNumber)
90
- payload.loyaltyCardNumber = input.loyaltyCardNumber;
91
- if (input.agreement1 !== undefined)
92
- payload.agreement1 = input.agreement1;
93
- if (input.agreement2 !== undefined)
94
- payload.agreement2 = input.agreement2;
95
- if (input.agreement3 !== undefined)
96
- payload.agreement3 = input.agreement3;
97
- if (input.address)
98
- payload.address = input.address;
78
+ firstName: input.firstName,
79
+ lastName: input.lastName,
80
+ phone: input.phone,
81
+ birthDate: input.birthDate,
82
+ gender: input.gender,
83
+ loyaltyCardNumber: input.loyaltyCardNumber,
84
+ agreement1: input.agreement1,
85
+ agreement2: input.agreement2,
86
+ agreement3: input.agreement3,
87
+ address: input.address,
88
+ });
99
89
  try {
100
90
  const response = await apiPost(`/${storeCode}/member`, { customer: payload });
101
91
  return {
@@ -109,8 +99,7 @@ export async function memberCreate(input) {
109
99
  }
110
100
  }
111
101
  export async function memberGet(input) {
112
- const config = getConfig();
113
- const storeCode = input.storeCode || config.defaultStoreCode;
102
+ const storeCode = getStoreCode(input.storeCode);
114
103
  try {
115
104
  const response = await apiGet(`/${storeCode}/member/${input.memberId}`);
116
105
  // Map API response to our schema
@@ -141,8 +130,7 @@ export async function memberGet(input) {
141
130
  }
142
131
  }
143
132
  export async function memberList(input) {
144
- const config = getConfig();
145
- const storeCode = input.storeCode || config.defaultStoreCode;
133
+ const storeCode = getStoreCode(input.storeCode);
146
134
  const params = new URLSearchParams();
147
135
  // Use buildPaginationParams for cursor/page handling
148
136
  buildPaginationParams({ cursor: input.cursor, page: input.page, perPage: input.perPage }, params);
@@ -188,27 +176,18 @@ export async function memberList(input) {
188
176
  }
189
177
  }
190
178
  export async function memberUpdate(input) {
191
- const config = getConfig();
192
- const storeCode = input.storeCode || config.defaultStoreCode;
193
- const payload = {};
194
- if (input.firstName)
195
- payload.firstName = input.firstName;
196
- if (input.lastName)
197
- payload.lastName = input.lastName;
198
- if (input.phone)
199
- payload.phone = input.phone;
200
- if (input.birthDate)
201
- payload.birthDate = input.birthDate;
202
- if (input.gender)
203
- payload.gender = input.gender;
204
- if (input.address)
205
- payload.address = input.address;
206
- if (input.agreement1 !== undefined)
207
- payload.agreement1 = input.agreement1;
208
- if (input.agreement2 !== undefined)
209
- payload.agreement2 = input.agreement2;
210
- if (input.agreement3 !== undefined)
211
- payload.agreement3 = input.agreement3;
179
+ const storeCode = getStoreCode(input.storeCode);
180
+ const payload = omitUndefined({
181
+ firstName: input.firstName,
182
+ lastName: input.lastName,
183
+ phone: input.phone,
184
+ birthDate: input.birthDate,
185
+ gender: input.gender,
186
+ address: input.address,
187
+ agreement1: input.agreement1,
188
+ agreement2: input.agreement2,
189
+ agreement3: input.agreement3,
190
+ });
212
191
  try {
213
192
  await apiPut(`/${storeCode}/member/${input.memberId}`, { customer: payload });
214
193
  }
@@ -217,8 +196,7 @@ export async function memberUpdate(input) {
217
196
  }
218
197
  }
219
198
  export async function memberActivate(input) {
220
- const config = getConfig();
221
- const storeCode = input.storeCode || config.defaultStoreCode;
199
+ const storeCode = getStoreCode(input.storeCode);
222
200
  try {
223
201
  await apiPost(`/${storeCode}/member/${input.memberId}/activate`);
224
202
  }
@@ -227,8 +205,7 @@ export async function memberActivate(input) {
227
205
  }
228
206
  }
229
207
  export async function memberDeactivate(input) {
230
- const config = getConfig();
231
- const storeCode = input.storeCode || config.defaultStoreCode;
208
+ const storeCode = getStoreCode(input.storeCode);
232
209
  try {
233
210
  await apiPost(`/${storeCode}/member/${input.memberId}/deactivate`);
234
211
  }
@@ -237,8 +214,7 @@ export async function memberDeactivate(input) {
237
214
  }
238
215
  }
239
216
  export async function memberDelete(input) {
240
- const config = getConfig();
241
- const storeCode = input.storeCode || config.defaultStoreCode;
217
+ const storeCode = getStoreCode(input.storeCode);
242
218
  try {
243
219
  await apiDelete(`/${storeCode}/member/${input.memberId}`);
244
220
  }
@@ -247,8 +223,7 @@ export async function memberDelete(input) {
247
223
  }
248
224
  }
249
225
  export async function memberGetTierProgress(input) {
250
- const config = getConfig();
251
- const storeCode = input.storeCode || config.defaultStoreCode;
226
+ const storeCode = getStoreCode(input.storeCode);
252
227
  try {
253
228
  const response = await apiGet(`/${storeCode}/member/${input.memberId}/tier`);
254
229
  const currentLevel = response.currentLevel;
@@ -272,8 +247,7 @@ export async function memberGetTierProgress(input) {
272
247
  }
273
248
  }
274
249
  export async function memberAssignTier(input) {
275
- const config = getConfig();
276
- const storeCode = input.storeCode || config.defaultStoreCode;
250
+ const storeCode = getStoreCode(input.storeCode);
277
251
  try {
278
252
  await apiPost(`/${storeCode}/member/${input.memberId}/tier`, { levelId: input.levelId });
279
253
  }
@@ -282,8 +256,7 @@ export async function memberAssignTier(input) {
282
256
  }
283
257
  }
284
258
  export async function memberRemoveManualTier(input) {
285
- const config = getConfig();
286
- const storeCode = input.storeCode || config.defaultStoreCode;
259
+ const storeCode = getStoreCode(input.storeCode);
287
260
  try {
288
261
  // API uses POST to /remove-manually-level, not DELETE to /tier
289
262
  await apiPost(`/${storeCode}/member/${input.memberId}/remove-manually-level`);
@@ -296,62 +269,83 @@ export async function memberRemoveManualTier(input) {
296
269
  export const memberToolDefinitions = [
297
270
  {
298
271
  name: "openloyalty_member_create",
272
+ title: "Register New Member",
299
273
  description: "Register a new loyalty program member. Returns memberId for subsequent operations like points_add or member_get. Email must be unique within the store.",
274
+ readOnly: false,
300
275
  inputSchema: MemberCreateInputSchema,
301
276
  handler: memberCreate,
302
277
  },
303
278
  {
304
279
  name: "openloyalty_member_get",
280
+ title: "Get Member Profile",
305
281
  description: "Get member details including profile, points balance, and tier status. Use memberId from member_create or member_list.",
282
+ readOnly: true,
306
283
  inputSchema: MemberGetInputSchema,
307
284
  handler: memberGet,
308
285
  },
309
286
  {
310
287
  name: "openloyalty_member_list",
288
+ title: "Search Members",
311
289
  description: "Search and list members with optional filters. Use member_get for full details of a specific member. " +
312
290
  "Supports cursor pagination: provide 'cursor' from previous response to get next page.",
291
+ readOnly: true,
313
292
  inputSchema: MemberListInputSchema,
314
293
  handler: memberList,
315
294
  },
316
295
  {
317
296
  name: "openloyalty_member_update",
297
+ title: "Update Member Profile",
318
298
  description: "Update member profile fields. Cannot change email. Use member_get first to see current values.",
299
+ readOnly: false,
319
300
  inputSchema: MemberUpdateInputSchema,
320
301
  handler: memberUpdate,
321
302
  },
322
303
  {
323
304
  name: "openloyalty_member_activate",
305
+ title: "Activate Member Account",
324
306
  description: "Activate a member account. Inactive members cannot earn or spend points.",
307
+ readOnly: false,
325
308
  inputSchema: MemberIdInputSchema,
326
309
  handler: memberActivate,
327
310
  },
328
311
  {
329
312
  name: "openloyalty_member_deactivate",
313
+ title: "Deactivate Member Account",
330
314
  description: "Deactivate a member account. Deactivated members cannot earn or spend points but retain their balance.",
315
+ readOnly: false,
331
316
  inputSchema: MemberIdInputSchema,
332
317
  handler: memberDeactivate,
333
318
  },
334
319
  {
335
320
  name: "openloyalty_member_delete",
321
+ title: "Delete Member (Permanent)",
336
322
  description: "Permanently removes member and all associated data. Cannot be undone. Use for GDPR compliance or member requests.",
323
+ readOnly: false,
324
+ destructive: true,
337
325
  inputSchema: MemberIdInputSchema,
338
326
  handler: memberDelete,
339
327
  },
340
328
  {
341
329
  name: "openloyalty_member_get_tier_progress",
330
+ title: "Check Tier Progress",
342
331
  description: "Get member tier progression status showing current tier and progress to next. Returns currentValue, requiredValue, and progressPercent.",
332
+ readOnly: true,
343
333
  inputSchema: MemberIdInputSchema,
344
334
  handler: memberGetTierProgress,
345
335
  },
346
336
  {
347
337
  name: "openloyalty_member_assign_tier",
338
+ title: "Assign Tier to Member",
348
339
  description: "Manually assign a tier level to a member, overriding automatic tier calculation. Use tierset_get_tiers to find available levelId values.",
340
+ readOnly: false,
349
341
  inputSchema: MemberAssignTierInputSchema,
350
342
  handler: memberAssignTier,
351
343
  },
352
344
  {
353
345
  name: "openloyalty_member_remove_manual_tier",
346
+ title: "Remove Manual Tier Assignment",
354
347
  description: "Remove manually assigned tier from member, restoring automatic tier calculation based on conditions.",
348
+ readOnly: false,
355
349
  inputSchema: MemberIdInputSchema,
356
350
  handler: memberRemoveManualTier,
357
351
  },
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import "../types/schemas/points.js";
2
3
  export declare const PointsAddInputSchema: {
3
4
  storeCode: z.ZodOptional<z.ZodString>;
4
5
  memberId: z.ZodString;
@@ -118,8 +119,10 @@ export declare function pointsGetHistogram(input: {
118
119
  balance: number;
119
120
  }>>;
120
121
  export declare const pointsToolDefinitions: readonly [{
121
- readonly name: "openloyalty_points_add";
122
+ readonly name: "ol_points_add";
123
+ readonly title: "Add Points to Member";
122
124
  readonly description: string;
125
+ readonly readOnly: false;
123
126
  readonly inputSchema: {
124
127
  storeCode: z.ZodOptional<z.ZodString>;
125
128
  memberId: z.ZodString;
@@ -131,8 +134,10 @@ export declare const pointsToolDefinitions: readonly [{
131
134
  };
132
135
  readonly handler: typeof pointsAdd;
133
136
  }, {
134
- readonly name: "openloyalty_points_spend";
137
+ readonly name: "ol_points_spend";
138
+ readonly title: "Spend Member Points";
135
139
  readonly description: string;
140
+ readonly readOnly: false;
136
141
  readonly inputSchema: {
137
142
  storeCode: z.ZodOptional<z.ZodString>;
138
143
  memberId: z.ZodString;
@@ -142,8 +147,10 @@ export declare const pointsToolDefinitions: readonly [{
142
147
  };
143
148
  readonly handler: typeof pointsSpend;
144
149
  }, {
145
- readonly name: "openloyalty_points_transfer";
150
+ readonly name: "ol_points_transfer";
151
+ readonly title: "Transfer Points Between Members";
146
152
  readonly description: string;
153
+ readonly readOnly: false;
147
154
  readonly inputSchema: {
148
155
  storeCode: z.ZodOptional<z.ZodString>;
149
156
  senderId: z.ZodString;
@@ -152,8 +159,10 @@ export declare const pointsToolDefinitions: readonly [{
152
159
  };
153
160
  readonly handler: typeof pointsTransfer;
154
161
  }, {
155
- readonly name: "openloyalty_points_get_balance";
162
+ readonly name: "ol_points_get_balance";
163
+ readonly title: "Check Points Balance";
156
164
  readonly description: string;
165
+ readonly readOnly: true;
157
166
  readonly inputSchema: {
158
167
  storeCode: z.ZodOptional<z.ZodString>;
159
168
  memberId: z.ZodString;
@@ -161,8 +170,10 @@ export declare const pointsToolDefinitions: readonly [{
161
170
  };
162
171
  readonly handler: typeof pointsGetBalance;
163
172
  }, {
164
- readonly name: "openloyalty_points_get_history";
173
+ readonly name: "ol_points_get_history";
174
+ readonly title: "View Points History";
165
175
  readonly description: string;
176
+ readonly readOnly: true;
166
177
  readonly inputSchema: {
167
178
  storeCode: z.ZodOptional<z.ZodString>;
168
179
  memberId: z.ZodString;
@@ -173,8 +184,10 @@ export declare const pointsToolDefinitions: readonly [{
173
184
  };
174
185
  readonly handler: typeof pointsGetHistory;
175
186
  }, {
176
- readonly name: "openloyalty_points_get_histogram";
187
+ readonly name: "ol_points_get_histogram";
188
+ readonly title: "View Points Trends";
177
189
  readonly description: string;
190
+ readonly readOnly: true;
178
191
  readonly inputSchema: {
179
192
  storeCode: z.ZodOptional<z.ZodString>;
180
193
  memberId: z.ZodString;