@carrierllc/mcp 0.0.1 → 0.2.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 (131) hide show
  1. package/README.md +216 -3
  2. package/dist/apps/app-state.d.ts +19 -0
  3. package/dist/apps/app-state.d.ts.map +1 -0
  4. package/dist/apps/app-state.js +28 -0
  5. package/dist/apps/app-state.js.map +1 -0
  6. package/dist/apps/balance-topup.d.ts +19 -0
  7. package/dist/apps/balance-topup.d.ts.map +1 -0
  8. package/dist/apps/balance-topup.js +121 -0
  9. package/dist/apps/balance-topup.js.map +1 -0
  10. package/dist/apps/fleet-health-app.d.ts +29 -0
  11. package/dist/apps/fleet-health-app.d.ts.map +1 -0
  12. package/dist/apps/fleet-health-app.js +152 -0
  13. package/dist/apps/fleet-health-app.js.map +1 -0
  14. package/dist/apps/index.d.ts +37 -0
  15. package/dist/apps/index.d.ts.map +1 -0
  16. package/dist/apps/index.js +42 -0
  17. package/dist/apps/index.js.map +1 -0
  18. package/dist/apps/provisioning-wizard.d.ts +11 -0
  19. package/dist/apps/provisioning-wizard.d.ts.map +1 -0
  20. package/dist/apps/provisioning-wizard.js +345 -0
  21. package/dist/apps/provisioning-wizard.js.map +1 -0
  22. package/dist/audit.d.ts +31 -0
  23. package/dist/audit.d.ts.map +1 -0
  24. package/dist/audit.js +42 -0
  25. package/dist/audit.js.map +1 -0
  26. package/dist/billing-thresholds.d.ts +71 -0
  27. package/dist/billing-thresholds.d.ts.map +1 -0
  28. package/dist/billing-thresholds.js +238 -0
  29. package/dist/billing-thresholds.js.map +1 -0
  30. package/dist/billing.d.ts +95 -0
  31. package/dist/billing.d.ts.map +1 -0
  32. package/dist/billing.js +239 -0
  33. package/dist/billing.js.map +1 -0
  34. package/dist/clerk.d.ts +125 -0
  35. package/dist/clerk.d.ts.map +1 -0
  36. package/dist/clerk.js +389 -0
  37. package/dist/clerk.js.map +1 -0
  38. package/dist/client.d.ts +35 -0
  39. package/dist/client.d.ts.map +1 -0
  40. package/dist/client.js +75 -0
  41. package/dist/client.js.map +1 -0
  42. package/dist/credits.d.ts +165 -0
  43. package/dist/credits.d.ts.map +1 -0
  44. package/dist/credits.js +483 -0
  45. package/dist/credits.js.map +1 -0
  46. package/dist/index.d.ts +14 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +95 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/intelligence.d.ts +4 -0
  51. package/dist/intelligence.d.ts.map +1 -0
  52. package/dist/intelligence.js +899 -0
  53. package/dist/intelligence.js.map +1 -0
  54. package/dist/list-recent-ocs-events.d.ts +48 -0
  55. package/dist/list-recent-ocs-events.d.ts.map +1 -0
  56. package/dist/list-recent-ocs-events.js +160 -0
  57. package/dist/list-recent-ocs-events.js.map +1 -0
  58. package/dist/manus-client.d.ts +429 -0
  59. package/dist/manus-client.d.ts.map +1 -0
  60. package/dist/manus-client.js +401 -0
  61. package/dist/manus-client.js.map +1 -0
  62. package/dist/manus-common.d.ts +5 -0
  63. package/dist/manus-common.d.ts.map +1 -0
  64. package/dist/manus-common.js +5 -0
  65. package/dist/manus-common.js.map +1 -0
  66. package/dist/manus-schedule.d.ts +74 -0
  67. package/dist/manus-schedule.d.ts.map +1 -0
  68. package/dist/manus-schedule.js +213 -0
  69. package/dist/manus-schedule.js.map +1 -0
  70. package/dist/manus-usage.d.ts +32 -0
  71. package/dist/manus-usage.d.ts.map +1 -0
  72. package/dist/manus-usage.js +120 -0
  73. package/dist/manus-usage.js.map +1 -0
  74. package/dist/manus-webhook.d.ts +60 -0
  75. package/dist/manus-webhook.d.ts.map +1 -0
  76. package/dist/manus-webhook.js +361 -0
  77. package/dist/manus-webhook.js.map +1 -0
  78. package/dist/pricing-tools.d.ts +26 -0
  79. package/dist/pricing-tools.d.ts.map +1 -0
  80. package/dist/pricing-tools.js +428 -0
  81. package/dist/pricing-tools.js.map +1 -0
  82. package/dist/projects-tools.d.ts +39 -0
  83. package/dist/projects-tools.d.ts.map +1 -0
  84. package/dist/projects-tools.js +545 -0
  85. package/dist/projects-tools.js.map +1 -0
  86. package/dist/prompts.d.ts +7 -0
  87. package/dist/prompts.d.ts.map +1 -0
  88. package/dist/prompts.js +151 -0
  89. package/dist/prompts.js.map +1 -0
  90. package/dist/stripe-connect-tools.d.ts +33 -0
  91. package/dist/stripe-connect-tools.d.ts.map +1 -0
  92. package/dist/stripe-connect-tools.js +504 -0
  93. package/dist/stripe-connect-tools.js.map +1 -0
  94. package/dist/timing-safe-equal.d.ts +5 -0
  95. package/dist/timing-safe-equal.d.ts.map +1 -0
  96. package/dist/timing-safe-equal.js +13 -0
  97. package/dist/timing-safe-equal.js.map +1 -0
  98. package/dist/tools-backlog.d.ts +28 -0
  99. package/dist/tools-backlog.d.ts.map +1 -0
  100. package/dist/tools-backlog.js +315 -0
  101. package/dist/tools-backlog.js.map +1 -0
  102. package/dist/tools-carrier-ask.d.ts +138 -0
  103. package/dist/tools-carrier-ask.d.ts.map +1 -0
  104. package/dist/tools-carrier-ask.js +913 -0
  105. package/dist/tools-carrier-ask.js.map +1 -0
  106. package/dist/tools-pricing.d.ts +18 -0
  107. package/dist/tools-pricing.d.ts.map +1 -0
  108. package/dist/tools-pricing.js +172 -0
  109. package/dist/tools-pricing.js.map +1 -0
  110. package/dist/tools-ui-agent-ask.d.ts +29 -0
  111. package/dist/tools-ui-agent-ask.d.ts.map +1 -0
  112. package/dist/tools-ui-agent-ask.js +272 -0
  113. package/dist/tools-ui-agent-ask.js.map +1 -0
  114. package/dist/tools-ui-agent-schedule.d.ts +29 -0
  115. package/dist/tools-ui-agent-schedule.d.ts.map +1 -0
  116. package/dist/tools-ui-agent-schedule.js +517 -0
  117. package/dist/tools-ui-agent-schedule.js.map +1 -0
  118. package/dist/tools-ui-agent.d.ts +40 -0
  119. package/dist/tools-ui-agent.d.ts.map +1 -0
  120. package/dist/tools-ui-agent.js +508 -0
  121. package/dist/tools-ui-agent.js.map +1 -0
  122. package/dist/tools.d.ts +60 -0
  123. package/dist/tools.d.ts.map +1 -0
  124. package/dist/tools.js +1295 -0
  125. package/dist/tools.js.map +1 -0
  126. package/dist/types.d.ts +291 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +5 -0
  129. package/dist/types.js.map +1 -0
  130. package/package.json +55 -7
  131. package/index.js +0 -1
@@ -0,0 +1,428 @@
1
+ /**
2
+ * Carrier MCP — Pricing & Credits MCP Tools
3
+ *
4
+ * Exposes credit management, billing configuration, and usage analytics
5
+ * as MCP tools. These tools allow AI agents and users to:
6
+ * - Check credit balance and usage
7
+ * - Configure billing thresholds
8
+ * - View volume discount status
9
+ * - Manage overage settings
10
+ * - View billing history and projections
11
+ *
12
+ * Inspired by Stripe Projects CLI patterns:
13
+ * - `stripe projects billing show` → credit_balance
14
+ * - `stripe projects upgrade` → upgrade_plan
15
+ * - `stripe projects billing add` → configure_billing
16
+ */
17
+ import { checkCredits, getCreditSummary, updateCreditConfig, TIER_CREDIT_ALLOTMENTS, SCOPE_CREDIT_COSTS, VOLUME_DISCOUNTS, DAILY_FREE_CREDITS, } from "./credits.js";
18
+ import { getThresholdConfig, updateThresholdConfig, } from "./billing-thresholds.js";
19
+ export const PRICING_TOOLS = [
20
+ // -------------------------------------------------------------------------
21
+ // credit_balance — View current credit balance and usage
22
+ // -------------------------------------------------------------------------
23
+ {
24
+ name: "credit_balance",
25
+ description: "View your current credit balance, daily free credits, overage status, " +
26
+ "volume discount tier, and billing threshold status. Use this to understand " +
27
+ "your current usage and remaining capacity before making API calls.",
28
+ scope: "read",
29
+ inputSchema: {
30
+ type: "object",
31
+ properties: {},
32
+ required: [],
33
+ },
34
+ handler: async (env, props) => {
35
+ const tier = props.tier;
36
+ const summary = await getCreditSummary(env, props.sub, tier);
37
+ const creditCheck = await checkCredits(env, props.sub, tier, "read");
38
+ return {
39
+ tier,
40
+ credits: {
41
+ monthly_allotment: summary.ledger.allotment,
42
+ consumed: summary.ledger.consumed,
43
+ remaining: Math.max(0, summary.ledger.allotment - summary.ledger.consumed),
44
+ rollover_applied: summary.ledger.rollover_applied,
45
+ overage_consumed: summary.ledger.overage,
46
+ overage_billed_cents: summary.ledger.overage_billed_cents,
47
+ },
48
+ daily_free: {
49
+ granted: summary.daily_free.granted,
50
+ consumed: summary.daily_free.consumed,
51
+ remaining: Math.max(0, summary.daily_free.granted - summary.daily_free.consumed),
52
+ },
53
+ volume_discount: {
54
+ current_pct: summary.volume_discount_pct,
55
+ next_tier: getNextVolumeDiscountTier(summary.ledger.consumed),
56
+ },
57
+ billing: {
58
+ overages_enabled: summary.config.overages_enabled,
59
+ threshold_triggered: summary.ledger.threshold_triggered,
60
+ billing_threshold_cents: summary.config.billing_threshold_cents,
61
+ overage_rate_cents: summary.config.overage_rate_cents,
62
+ },
63
+ rollover: summary.rollover
64
+ ? {
65
+ credits: summary.rollover.credits,
66
+ source_month: summary.rollover.source_month,
67
+ expires_at: summary.rollover.expires_at,
68
+ }
69
+ : null,
70
+ reset_at: creditCheck.reset_at,
71
+ credit_costs: SCOPE_CREDIT_COSTS,
72
+ };
73
+ },
74
+ },
75
+ // -------------------------------------------------------------------------
76
+ // configure_billing — Update billing preferences
77
+ // -------------------------------------------------------------------------
78
+ {
79
+ name: "configure_billing",
80
+ description: "Configure your billing preferences: enable/disable overages, set billing " +
81
+ "thresholds (bill shock prevention), configure notification percentages, " +
82
+ "and set hard spending caps. Pro and Enterprise tiers only.",
83
+ scope: "write",
84
+ inputSchema: {
85
+ type: "object",
86
+ properties: {
87
+ overages_enabled: {
88
+ type: "boolean",
89
+ description: "Enable or disable auto-billed overages when monthly credits are exhausted",
90
+ },
91
+ billing_threshold_cents: {
92
+ type: "number",
93
+ description: "Amount in cents at which an invoice is automatically generated (e.g., 10000 = $100)",
94
+ },
95
+ hard_cap_cents: {
96
+ type: "number",
97
+ description: "Maximum overage spend in cents before overages are paused (0 = no cap)",
98
+ },
99
+ auto_pause_on_cap: {
100
+ type: "boolean",
101
+ description: "Whether to automatically pause overages when hard cap is reached",
102
+ },
103
+ notify_at_pct: {
104
+ type: "array",
105
+ items: { type: "number" },
106
+ description: "Percentage thresholds at which to send notifications (e.g., [50, 80, 95, 100])",
107
+ },
108
+ notification_email: {
109
+ type: "string",
110
+ description: "Email address for billing threshold notifications",
111
+ },
112
+ webhook_url: {
113
+ type: "string",
114
+ description: "Webhook URL for billing threshold events",
115
+ },
116
+ },
117
+ required: [],
118
+ },
119
+ handler: async (env, props, args) => {
120
+ const tier = props.tier;
121
+ if (tier === "free") {
122
+ return {
123
+ error: "Billing configuration requires Pro or Enterprise tier",
124
+ upgrade_url: "https://mcp.carrier.llc/upgrade",
125
+ };
126
+ }
127
+ // Update credit config
128
+ const creditUpdates = {};
129
+ if (typeof args.overages_enabled === "boolean") {
130
+ creditUpdates.overages_enabled = args.overages_enabled;
131
+ }
132
+ if (typeof args.billing_threshold_cents === "number") {
133
+ creditUpdates.billing_threshold_cents = args.billing_threshold_cents;
134
+ }
135
+ if (Array.isArray(args.notify_at_pct)) {
136
+ creditUpdates.notify_at_pct = args.notify_at_pct;
137
+ }
138
+ const updatedCreditConfig = Object.keys(creditUpdates).length > 0
139
+ ? await updateCreditConfig(env, props.sub, creditUpdates)
140
+ : await getCreditConfigForSub(env, props.sub, tier);
141
+ // Update threshold config
142
+ const thresholdUpdates = {};
143
+ if (typeof args.hard_cap_cents === "number") {
144
+ thresholdUpdates.hard_cap_cents = args.hard_cap_cents;
145
+ }
146
+ if (typeof args.auto_pause_on_cap === "boolean") {
147
+ thresholdUpdates.auto_pause_on_cap = args.auto_pause_on_cap;
148
+ }
149
+ if (typeof args.notification_email === "string") {
150
+ thresholdUpdates.notification_email = args.notification_email;
151
+ }
152
+ if (typeof args.webhook_url === "string") {
153
+ thresholdUpdates.webhook_url = args.webhook_url;
154
+ }
155
+ const updatedThresholdConfig = Object.keys(thresholdUpdates).length > 0
156
+ ? await updateThresholdConfig(env, props.sub, thresholdUpdates)
157
+ : await getThresholdConfig(env, props.sub, tier);
158
+ return {
159
+ status: "updated",
160
+ credit_config: {
161
+ overages_enabled: updatedCreditConfig.overages_enabled,
162
+ billing_threshold_cents: updatedCreditConfig.billing_threshold_cents,
163
+ overage_rate_cents: updatedCreditConfig.overage_rate_cents,
164
+ notify_at_pct: updatedCreditConfig.notify_at_pct,
165
+ },
166
+ threshold_config: {
167
+ hard_cap_cents: updatedThresholdConfig.hard_cap_cents,
168
+ auto_pause_on_cap: updatedThresholdConfig.auto_pause_on_cap,
169
+ invoice_threshold_cents: updatedThresholdConfig.invoice_threshold_cents,
170
+ notification_email: updatedThresholdConfig.notification_email,
171
+ webhook_url: updatedThresholdConfig.webhook_url,
172
+ },
173
+ };
174
+ },
175
+ },
176
+ // -------------------------------------------------------------------------
177
+ // usage_projection — Project future usage and costs
178
+ // -------------------------------------------------------------------------
179
+ {
180
+ name: "usage_projection",
181
+ description: "Project your credit usage and costs for the remainder of the billing period " +
182
+ "based on current consumption rate. Includes overage cost estimates and " +
183
+ "recommendations for plan changes.",
184
+ scope: "read",
185
+ inputSchema: {
186
+ type: "object",
187
+ properties: {
188
+ days_to_project: {
189
+ type: "number",
190
+ description: "Number of days to project forward (default: remaining days in month)",
191
+ },
192
+ },
193
+ required: [],
194
+ },
195
+ handler: async (env, props, args) => {
196
+ const tier = props.tier;
197
+ const summary = await getCreditSummary(env, props.sub, tier);
198
+ const now = new Date();
199
+ const dayOfMonth = now.getUTCDate();
200
+ const daysInMonth = new Date(now.getUTCFullYear(), now.getUTCMonth() + 1, 0).getUTCDate();
201
+ const daysRemaining = typeof args.days_to_project === "number"
202
+ ? args.days_to_project
203
+ : daysInMonth - dayOfMonth;
204
+ // Calculate daily burn rate
205
+ const dailyBurnRate = dayOfMonth > 0 ? summary.ledger.consumed / dayOfMonth : 0;
206
+ const projectedTotal = Math.round(summary.ledger.consumed + dailyBurnRate * daysRemaining);
207
+ const projectedOverage = Math.max(0, projectedTotal - summary.ledger.allotment);
208
+ // Calculate projected overage cost
209
+ const volumeDiscount = getVolumeDiscountForUsage(projectedTotal);
210
+ const effectiveRate = summary.config.overage_rate_cents * (1 - volumeDiscount / 100);
211
+ const projectedOverageCents = Math.round(projectedOverage * effectiveRate);
212
+ // Recommendation
213
+ const recommendation = generateRecommendation(tier, projectedTotal, summary.ledger.allotment, projectedOverageCents);
214
+ return {
215
+ current_period: {
216
+ day_of_month: dayOfMonth,
217
+ days_in_month: daysInMonth,
218
+ days_remaining: daysRemaining,
219
+ },
220
+ usage: {
221
+ consumed_to_date: summary.ledger.consumed,
222
+ daily_burn_rate: Math.round(dailyBurnRate),
223
+ projected_total: projectedTotal,
224
+ allotment: summary.ledger.allotment,
225
+ },
226
+ overage_projection: {
227
+ projected_overage_credits: projectedOverage,
228
+ projected_overage_cents: projectedOverageCents,
229
+ volume_discount_pct: volumeDiscount,
230
+ effective_rate_cents: effectiveRate,
231
+ },
232
+ recommendation,
233
+ };
234
+ },
235
+ },
236
+ // -------------------------------------------------------------------------
237
+ // pricing_plans — View available plans and pricing
238
+ // -------------------------------------------------------------------------
239
+ {
240
+ name: "pricing_plans",
241
+ description: "View all available Carrier MCP pricing plans with credit allotments, " +
242
+ "features, overage rates, and volume discount tiers. Use this to compare " +
243
+ "plans and understand upgrade benefits.",
244
+ scope: "read",
245
+ inputSchema: {
246
+ type: "object",
247
+ properties: {},
248
+ required: [],
249
+ },
250
+ handler: async (_env, props) => {
251
+ const currentTier = props.tier;
252
+ return {
253
+ current_plan: currentTier,
254
+ plans: [
255
+ {
256
+ id: "free",
257
+ name: "Free",
258
+ price_monthly_cents: 0,
259
+ credits_monthly: TIER_CREDIT_ALLOTMENTS.free,
260
+ daily_free_credits: DAILY_FREE_CREDITS,
261
+ scopes: ["read"],
262
+ features: [
263
+ "5,000 monthly credits",
264
+ "50 daily free credits",
265
+ "Read-only OCS access",
266
+ "Basic fleet monitoring",
267
+ ],
268
+ overages: false,
269
+ rollovers: false,
270
+ volume_discounts: false,
271
+ },
272
+ {
273
+ id: "pro",
274
+ name: "Pro",
275
+ price_monthly_cents: 4_900,
276
+ credits_monthly: TIER_CREDIT_ALLOTMENTS.pro,
277
+ daily_free_credits: DAILY_FREE_CREDITS,
278
+ scopes: ["read", "write"],
279
+ features: [
280
+ "100,000 monthly credits",
281
+ "50 daily free credits",
282
+ "Read + Write OCS access",
283
+ "Intelligence composites",
284
+ "Auto-billed overages at $0.001/credit",
285
+ "Credit rollovers (unused → next month)",
286
+ "Volume discounts (up to 25% off overages)",
287
+ "Billing thresholds (bill shock prevention)",
288
+ "Configurable hard spending caps",
289
+ "Priority support",
290
+ ],
291
+ overages: true,
292
+ rollovers: true,
293
+ volume_discounts: true,
294
+ overage_rate_cents: 0.1,
295
+ },
296
+ {
297
+ id: "enterprise",
298
+ name: "Enterprise",
299
+ price_monthly_cents: 49_900,
300
+ credits_monthly: "unlimited",
301
+ daily_free_credits: DAILY_FREE_CREDITS,
302
+ scopes: ["read", "write", "admin"],
303
+ features: [
304
+ "Unlimited credits",
305
+ "All OCS scopes (incl. admin)",
306
+ "Intelligence composites",
307
+ "Custom rate limits",
308
+ "SSO / SAML",
309
+ "Dedicated support",
310
+ "SLA guarantee",
311
+ "Custom billing terms",
312
+ ],
313
+ overages: false,
314
+ rollovers: false,
315
+ volume_discounts: false,
316
+ },
317
+ ],
318
+ volume_discount_tiers: VOLUME_DISCOUNTS,
319
+ credit_costs: SCOPE_CREDIT_COSTS,
320
+ upgrade_url: "https://mcp.carrier.llc/upgrade",
321
+ };
322
+ },
323
+ },
324
+ // -------------------------------------------------------------------------
325
+ // billing_events — View recent billing threshold events
326
+ // -------------------------------------------------------------------------
327
+ {
328
+ name: "billing_events",
329
+ description: "View recent billing threshold events: notifications, invoice triggers, " +
330
+ "hard cap alerts, and overage pauses. Useful for monitoring spend and " +
331
+ "understanding billing activity.",
332
+ scope: "read",
333
+ inputSchema: {
334
+ type: "object",
335
+ properties: {
336
+ limit: {
337
+ type: "number",
338
+ description: "Maximum number of events to return (default: 20, max: 50)",
339
+ },
340
+ },
341
+ required: [],
342
+ },
343
+ handler: async (env, props, args) => {
344
+ const limit = Math.min(typeof args.limit === "number" ? args.limit : 20, 50);
345
+ const eventsKey = `threshold:events:${props.sub}`;
346
+ const raw = await env.CARRIER_USERS.get(eventsKey, "json").catch(() => null);
347
+ const events = Array.isArray(raw) ? raw.slice(-limit) : [];
348
+ return {
349
+ events,
350
+ total: events.length,
351
+ threshold_config: await getThresholdConfig(env, props.sub, props.tier),
352
+ };
353
+ },
354
+ },
355
+ ];
356
+ // ---------------------------------------------------------------------------
357
+ // Helpers
358
+ // ---------------------------------------------------------------------------
359
+ function getNextVolumeDiscountTier(consumed) {
360
+ for (const tier of VOLUME_DISCOUNTS) {
361
+ if (consumed < tier.threshold) {
362
+ return {
363
+ threshold: tier.threshold,
364
+ discount_pct: tier.discountPct,
365
+ credits_until: tier.threshold - consumed,
366
+ };
367
+ }
368
+ }
369
+ return null; // Already at max discount
370
+ }
371
+ function getVolumeDiscountForUsage(usage) {
372
+ let discount = 0;
373
+ for (const tier of VOLUME_DISCOUNTS) {
374
+ if (usage >= tier.threshold) {
375
+ discount = tier.discountPct;
376
+ }
377
+ else {
378
+ break;
379
+ }
380
+ }
381
+ return discount;
382
+ }
383
+ function generateRecommendation(tier, projectedTotal, allotment, projectedOverageCents) {
384
+ if (tier === "free" && projectedTotal > allotment * 0.8) {
385
+ return {
386
+ action: "upgrade_to_pro",
387
+ reason: "You're projected to exceed 80% of your free tier credits. " +
388
+ "Pro gives you 100,000 credits/month with overages, rollovers, and volume discounts.",
389
+ };
390
+ }
391
+ if (tier === "pro" && projectedOverageCents > 4_900) {
392
+ // Overages exceed the cost of Enterprise
393
+ return {
394
+ action: "upgrade_to_enterprise",
395
+ reason: "Your projected overage costs exceed the Enterprise plan price. " +
396
+ "Enterprise gives unlimited credits at $499/month.",
397
+ savings_cents: projectedOverageCents - 4_900 + 4_900, // overage + pro fee vs enterprise
398
+ };
399
+ }
400
+ if (tier === "pro" && projectedTotal < allotment * 0.3) {
401
+ return {
402
+ action: "no_change",
403
+ reason: "You're using less than 30% of your Pro allotment. " +
404
+ "Unused credits will roll over to next month (up to 2x your allotment).",
405
+ };
406
+ }
407
+ return {
408
+ action: "no_change",
409
+ reason: "Your current plan is well-suited to your usage pattern.",
410
+ };
411
+ }
412
+ async function getCreditConfigForSub(env, sub, tier) {
413
+ const key = `credits:config:${sub}`;
414
+ const raw = await env.CARRIER_USERS.get(key, "json").catch(() => null);
415
+ if (raw && typeof raw === "object" && "billing_threshold_cents" in raw) {
416
+ return raw;
417
+ }
418
+ return {
419
+ billing_threshold_cents: 10_000,
420
+ overages_enabled: tier !== "free",
421
+ rollovers_enabled: tier !== "free",
422
+ overage_rate_cents: 0.1,
423
+ volume_discount_pct: 0,
424
+ notify_at_pct: [50, 80, 95, 100],
425
+ updated_at: new Date().toISOString(),
426
+ };
427
+ }
428
+ //# sourceMappingURL=pricing-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-tools.js","sourceRoot":"","sources":["../src/pricing-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Carrier MCP — Projects Tools (Stripe Projects CLI Pattern)
3
+ *
4
+ * Implements the Stripe Projects CLI paradigm for Carrier:
5
+ * - Service catalog browsing (carrier ecosystem services)
6
+ * - Credential vault management (API token rotation, env sync)
7
+ * - Billing management via natural language (upgrade/downgrade)
8
+ * - LLM context generation for AI agent workflows
9
+ * - Multi-environment management (dev/staging/prod)
10
+ *
11
+ * These tools enable AI agents to:
12
+ * 1. Discover and provision Carrier services
13
+ * 2. Manage credentials securely
14
+ * 3. Handle billing operations programmatically
15
+ * 4. Generate context for downstream AI workflows
16
+ *
17
+ * Inspired by: `stripe projects init`, `stripe projects add`, `stripe projects catalog`
18
+ */
19
+ import type { Env, CarrierProps, ToolScope } from "./types.js";
20
+ import type { Tier } from "./billing.js";
21
+ export interface CarrierService {
22
+ id: string;
23
+ name: string;
24
+ category: string;
25
+ description: string;
26
+ tier_required: Tier;
27
+ scopes_required: string[];
28
+ endpoints: string[];
29
+ docs_url: string;
30
+ }
31
+ export interface ProjectsToolDef {
32
+ name: string;
33
+ description: string;
34
+ scope: ToolScope;
35
+ inputSchema: Record<string, unknown>;
36
+ handler: (env: Env, props: CarrierProps, args: Record<string, unknown>) => Promise<unknown>;
37
+ }
38
+ export declare const PROJECTS_TOOLS: ProjectsToolDef[];
39
+ //# sourceMappingURL=projects-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects-tools.d.ts","sourceRoot":"","sources":["../src/projects-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAOzC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,IAAI,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAyFD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,CACP,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,EAAE,eAAe,EA+X3C,CAAC"}