@apex-inc/mcp-server 0.32.0 → 0.34.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 (74) hide show
  1. package/README.md +19 -18
  2. package/dist/api-client.d.ts +5 -0
  3. package/dist/api-client.d.ts.map +1 -1
  4. package/dist/api-client.js +40 -24
  5. package/dist/api-client.js.map +1 -1
  6. package/dist/conflict-advisory.d.ts +29 -0
  7. package/dist/conflict-advisory.d.ts.map +1 -0
  8. package/dist/conflict-advisory.js +48 -0
  9. package/dist/conflict-advisory.js.map +1 -0
  10. package/dist/index.js +8 -5
  11. package/dist/index.js.map +1 -1
  12. package/dist/live-test-guard.d.ts +1 -0
  13. package/dist/live-test-guard.d.ts.map +1 -1
  14. package/dist/live-test-guard.js +4 -3
  15. package/dist/live-test-guard.js.map +1 -1
  16. package/dist/prompts.d.ts.map +1 -1
  17. package/dist/prompts.js +5 -7
  18. package/dist/prompts.js.map +1 -1
  19. package/dist/setup-catchup-tools.d.ts.map +1 -1
  20. package/dist/setup-catchup-tools.js +15 -3
  21. package/dist/setup-catchup-tools.js.map +1 -1
  22. package/dist/smoke-tools.d.ts +56 -0
  23. package/dist/smoke-tools.d.ts.map +1 -0
  24. package/dist/smoke-tools.js +261 -0
  25. package/dist/smoke-tools.js.map +1 -0
  26. package/dist/tool-catalog.d.ts +10 -0
  27. package/dist/tool-catalog.d.ts.map +1 -0
  28. package/dist/tool-catalog.js +36 -0
  29. package/dist/tool-catalog.js.map +1 -0
  30. package/dist/tool-groups.d.ts +5 -0
  31. package/dist/tool-groups.d.ts.map +1 -0
  32. package/dist/tool-groups.js +206 -0
  33. package/dist/tool-groups.js.map +1 -0
  34. package/dist/tool-shared.d.ts +300 -0
  35. package/dist/tool-shared.d.ts.map +1 -0
  36. package/dist/tool-shared.js +319 -0
  37. package/dist/tool-shared.js.map +1 -0
  38. package/dist/tools/accounts.d.ts +124 -0
  39. package/dist/tools/accounts.d.ts.map +1 -0
  40. package/dist/tools/accounts.js +99 -0
  41. package/dist/tools/accounts.js.map +1 -0
  42. package/dist/tools/adoption.d.ts +499 -0
  43. package/dist/tools/adoption.d.ts.map +1 -0
  44. package/dist/tools/adoption.js +447 -0
  45. package/dist/tools/adoption.js.map +1 -0
  46. package/dist/tools/context.d.ts +216 -0
  47. package/dist/tools/context.d.ts.map +1 -0
  48. package/dist/tools/context.js +328 -0
  49. package/dist/tools/context.js.map +1 -0
  50. package/dist/tools/experiments.d.ts +1066 -0
  51. package/dist/tools/experiments.d.ts.map +1 -0
  52. package/dist/tools/experiments.js +2090 -0
  53. package/dist/tools/experiments.js.map +1 -0
  54. package/dist/tools/letters.d.ts +1107 -0
  55. package/dist/tools/letters.d.ts.map +1 -0
  56. package/dist/tools/letters.js +1324 -0
  57. package/dist/tools/letters.js.map +1 -0
  58. package/dist/tools/measurement.d.ts +886 -0
  59. package/dist/tools/measurement.d.ts.map +1 -0
  60. package/dist/tools/measurement.js +1353 -0
  61. package/dist/tools/measurement.js.map +1 -0
  62. package/dist/tools/partners.d.ts +364 -0
  63. package/dist/tools/partners.d.ts.map +1 -0
  64. package/dist/tools/partners.js +199 -0
  65. package/dist/tools/partners.js.map +1 -0
  66. package/dist/tools.d.ts +3161 -2826
  67. package/dist/tools.d.ts.map +1 -1
  68. package/dist/tools.js +26 -6133
  69. package/dist/tools.js.map +1 -1
  70. package/package.json +3 -2
  71. package/skills/apex-communications/SKILL.md +5 -5
  72. package/skills/apex-experimentation/SKILL.md +11 -14
  73. package/skills/apex-growth-intelligence/SKILL.md +1 -1
  74. package/skills/apex-integration-cookbook/SKILL.md +1 -1
@@ -0,0 +1,199 @@
1
+ import { z } from "zod";
2
+ import { apiGet, apiPost, apiPatch, } from "../api-client.js";
3
+ export const partnerTools = {
4
+ list_partner_programs: {
5
+ description: "List every affiliate program this merchant owns. Returns each program's name, status (active/paused/archived), visibility (public/private), approval mode, commission structure, reputation counters, and created/updated timestamps.",
6
+ schema: z.object({}),
7
+ handler: async () => {
8
+ const data = await apiGet("/api/mobile/affiliates/programs");
9
+ const programs = Array.isArray(data) ? data : [];
10
+ if (programs.length === 0) {
11
+ return { content: [{ type: "text", text: "No affiliate programs yet. Use create_partner_program to set one up." }] };
12
+ }
13
+ const summary = programs.map((p) => {
14
+ const pr = p;
15
+ return `• ${pr.name} (${pr.id}) — ${pr.status} / ${pr.visibility} / approval ${pr.approvalMode}`;
16
+ }).join("\n");
17
+ return { content: [{ type: "text", text: `${programs.length} program${programs.length === 1 ? "" : "s"}:\n\n${summary}\n\nFull data:\n${JSON.stringify(data, null, 2)}` }] };
18
+ },
19
+ },
20
+ create_partner_program: {
21
+ description: "Create a new affiliate program. Partners can join via marketplace (public+auto), by invite only (private), or via application (public+manual). Commission can be a flat CPA amount or a percentage of sale (RevShare).",
22
+ schema: z.object({
23
+ name: z.string().describe("Public program name, shown in marketplace + partner portal"),
24
+ description: z.string().optional().describe("<= 600 chars, marketplace card body"),
25
+ vertical: z.enum(["saas", "ecommerce", "fintech", "marketplace", "hardware", "enterprise", "creator_tools", "other"]).describe("Drives marketplace filters"),
26
+ commissionStructure: z.object({
27
+ type: z.enum(["cpa", "revshare"]),
28
+ amountUsd: z.number().optional().describe("For CPA: flat commission"),
29
+ percentage: z.number().optional().describe("For RevShare: 0-100"),
30
+ appliesTo: z.enum(["install", "purchase", "subscription"]).describe("Which conversion event pays the commission"),
31
+ }),
32
+ visibility: z.enum(["public", "private"]).optional().default("public"),
33
+ approvalMode: z.enum(["auto", "manual"]).optional().default("auto").describe("Manual = merchant reviews every application"),
34
+ }),
35
+ handler: async (args) => {
36
+ const data = await apiPost("/api/mobile/affiliates/programs", args);
37
+ return { content: [{ type: "text", text: `Program created.\n\n${JSON.stringify(data, null, 2)}` }] };
38
+ },
39
+ },
40
+ update_partner_program: {
41
+ description: "Update an existing program (pause/resume, change visibility, edit default commission). Changing default commission does NOT apply to existing members — use apply_program_default_to_members for that.",
42
+ schema: z.object({
43
+ programId: z.string(),
44
+ updates: z.record(z.unknown()).describe("Fields to update: name, description, status, visibility, commissionStructure, vertical, tagline, landingPageUrl, autoPayoutPolicy, etc."),
45
+ }),
46
+ handler: async (args) => {
47
+ const data = await apiPatch(`/api/mobile/affiliates/programs/${args.programId}`, args.updates);
48
+ return { content: [{ type: "text", text: `Program updated.\n\n${JSON.stringify(data, null, 2)}` }] };
49
+ },
50
+ },
51
+ list_partner_program_members: {
52
+ description: "List every partner bound to a specific program. Shows each member's handle, current commission (with source: program_default | membership_override | invite_override), totalEarnedUsd, approvedConversions count.",
53
+ schema: z.object({ programId: z.string() }),
54
+ handler: async (args) => {
55
+ const data = await apiGet(`/api/mobile/affiliates/programs/${args.programId}/members`);
56
+ const members = Array.isArray(data) ? data : [];
57
+ if (members.length === 0) {
58
+ return { content: [{ type: "text", text: "No partners on this program yet." }] };
59
+ }
60
+ const summary = members.map((m) => {
61
+ const mem = m;
62
+ const ms = mem.membership;
63
+ return `• @${ms.handle} — ${ms.totalEarnedUsd ?? 0} lifetime, ${ms.approvedConversions ?? 0} conversions`;
64
+ }).join("\n");
65
+ return { content: [{ type: "text", text: `${members.length} partner${members.length === 1 ? "" : "s"}:\n\n${summary}\n\nFull data:\n${JSON.stringify(data, null, 2)}` }] };
66
+ },
67
+ },
68
+ apply_program_default_to_members: {
69
+ description: "Apply the program's current default commission to every existing member whose commission is a program_default source. Members with sticky overrides (membership_override / invite_override) are NOT touched. Fires partner_commission_changed emails to affected partners.",
70
+ schema: z.object({ programId: z.string() }),
71
+ handler: async (args) => {
72
+ const data = await apiPost(`/api/mobile/affiliates/programs/${args.programId}/apply-to-members`, {});
73
+ return { content: [{ type: "text", text: `Applied default to ${data.updated} member${data.updated === 1 ? "" : "s"}.` }] };
74
+ },
75
+ },
76
+ update_membership_rate: {
77
+ description: "Override a single partner's commission rate on this merchant's program. Sticky — survives future program default updates. Opens the per-membership commission history with `source: membership_override` for audit.",
78
+ schema: z.object({
79
+ profileId: z.string().describe("Partner profile id (starts with prof_)"),
80
+ commissionStructure: z.object({
81
+ type: z.enum(["cpa", "revshare"]),
82
+ amountUsd: z.number().optional(),
83
+ percentage: z.number().optional(),
84
+ appliesTo: z.enum(["install", "purchase", "subscription"]),
85
+ }),
86
+ reason: z.string().optional().describe("Audit log note — e.g. 'Volume discount Q3 2026'"),
87
+ }),
88
+ handler: async (args) => {
89
+ const data = await apiPost(`/api/mobile/affiliates/memberships/${args.profileId}/rate`, {
90
+ commissionStructure: args.commissionStructure,
91
+ reason: args.reason,
92
+ });
93
+ return { content: [{ type: "text", text: `Commission updated.\n\n${JSON.stringify(data, null, 2)}` }] };
94
+ },
95
+ },
96
+ reset_membership_rate: {
97
+ description: "Reset a partner's commission back to the program default, removing any prior override. Useful when a negotiated rate expires or a promo ends.",
98
+ schema: z.object({
99
+ profileId: z.string(),
100
+ reason: z.string().optional(),
101
+ }),
102
+ handler: async (args) => {
103
+ const data = await apiPost(`/api/mobile/affiliates/memberships/${args.profileId}/rate`, {
104
+ reset: true,
105
+ reason: args.reason,
106
+ });
107
+ return { content: [{ type: "text", text: `Rate reset to program default.\n\n${JSON.stringify(data, null, 2)}` }] };
108
+ },
109
+ },
110
+ invite_partner: {
111
+ description: "Send a magic-link invite to a partner for a specific program. Resolves existing profiles by email (no duplicate profile created) or creates a pending invite the partner redeems on first sign-in. Optional customRate overrides the program default for this partner's membership.",
112
+ schema: z.object({
113
+ email: z.string().email().describe("Partner's email — used for matching + the invite email"),
114
+ programId: z.string(),
115
+ inviterName: z.string().optional().describe("Name shown in the invite email's 'from' field"),
116
+ inviterMessage: z.string().optional().describe("Personal note from the merchant, shown in the invite email"),
117
+ customRate: z.object({
118
+ commissionStructure: z.object({
119
+ type: z.enum(["cpa", "revshare"]),
120
+ amountUsd: z.number().optional(),
121
+ percentage: z.number().optional(),
122
+ appliesTo: z.enum(["install", "purchase", "subscription"]),
123
+ }),
124
+ }).optional().describe("Override commission for this partner only (sticky)"),
125
+ }),
126
+ handler: async (args) => {
127
+ const data = await apiPost("/api/mobile/affiliates/invites", args);
128
+ return { content: [{ type: "text", text: `Invite sent.\n\n${JSON.stringify(data, null, 2)}` }] };
129
+ },
130
+ },
131
+ list_pending_payouts: {
132
+ description: "Every approved-but-unpaid commission this merchant owes, grouped into aging buckets: 0-30 / 30-60 / 60+ days. Returns totals per bucket + the effective autoPayoutPolicy + current merchant cap. Use before approving batches to see the backlog.",
133
+ schema: z.object({}),
134
+ handler: async () => {
135
+ const data = await apiGet("/api/mobile/affiliates/payouts/pending");
136
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
137
+ },
138
+ },
139
+ approve_payouts: {
140
+ description: "Approve one or more pending payouts. Each approved conversion: transitions to 'approved', writes a HoldbackEntry splitting commission into available + held portions per tier policy (25% held for NEW, 15% TRUSTED, 5% VERIFIED), stamps approvedAt. Transfer fires later via the scheduled payout orchestrator (run-payouts cron).",
141
+ schema: z.object({
142
+ conversionIds: z.array(z.string()).describe("Conversion ids from list_pending_payouts"),
143
+ }),
144
+ handler: async (args) => {
145
+ const data = await apiPost("/api/mobile/affiliates/payouts/approve", { conversionIds: args.conversionIds });
146
+ const { approved, skipped, failed } = data;
147
+ return { content: [{ type: "text", text: `Approved ${approved.length}, skipped ${skipped.length}, failed ${failed.length}.\n\n${JSON.stringify(data, null, 2)}` }] };
148
+ },
149
+ },
150
+ reject_payouts: {
151
+ description: "Reject pending payouts (e.g. suspicious patterns that don't warrant a FraudCase). Flips conversions to 'reversed'. Also opens a low-severity audit FraudCase per rejection so patterns surface if the same partner's payouts get rejected repeatedly.",
152
+ schema: z.object({
153
+ conversionIds: z.array(z.string()),
154
+ reason: z.string().optional().describe("Shown in the audit case — e.g. 'Duplicate event'"),
155
+ }),
156
+ handler: async (args) => {
157
+ const data = await apiPost("/api/mobile/affiliates/payouts/reject", args);
158
+ return { content: [{ type: "text", text: `Rejected.\n\n${JSON.stringify(data, null, 2)}` }] };
159
+ },
160
+ },
161
+ get_effective_fees: {
162
+ description: "Show the merchant's current fee schedule for every fee kind (facilitation_payout, identity_verification, instant_payout). Returns bps + flatUsd + source (platform_default | merchant_override | hardcoded_fallback) + isCustom flag. Useful for building pricing disclosure UIs or answering 'what am I charged?'.",
163
+ schema: z.object({}),
164
+ handler: async () => {
165
+ const data = await apiGet("/api/mobile/affiliates/fees");
166
+ const lines = Object.entries(data.fees).map(([kind, f]) => {
167
+ const parts = [];
168
+ if (f.bps && f.bps > 0)
169
+ parts.push(`${(f.bps / 100).toFixed(2)}%`);
170
+ if (f.flatUsd && f.flatUsd > 0)
171
+ parts.push(`$${f.flatUsd.toFixed(2)}`);
172
+ const display = parts.join(" + ") || "$0";
173
+ const tag = f.isCustom ? " (custom)" : "";
174
+ return `• ${kind}: ${display}${tag} — source: ${f.source}`;
175
+ }).join("\n");
176
+ return { content: [{ type: "text", text: `Fees for ${data.workspaceKey}:\n\n${lines}\n\nFull data:\n${JSON.stringify(data, null, 2)}` }] };
177
+ },
178
+ },
179
+ vouch_for_partner: {
180
+ description: "Vouch for a partner — bumps their trust tier by one level (NEW→TRUSTED or TRUSTED→VERIFIED) for 60 days. REQUIRES indemnityAcknowledged=true: if the partner commits fraud during the vouched window, your merchant account is liable for any clawback the reserve can't cover. Fails if the partner is already VERIFIED.",
181
+ schema: z.object({
182
+ profileId: z.string(),
183
+ indemnityAcknowledged: z.literal(true).describe("Must be exactly `true` — acknowledges merchant liability for fraud during vouch window"),
184
+ reason: z.string().optional().describe("Audit note — e.g. 'Long-standing professional relationship'"),
185
+ vouchDays: z.number().optional().describe("Custom window in days (default 60, max 90)"),
186
+ }),
187
+ handler: async (args) => {
188
+ const data = await apiPost(`/api/mobile/affiliates/${args.profileId}/vouch`, args);
189
+ return { content: [{ type: "text", text: `Vouch recorded.\n\n${JSON.stringify(data, null, 2)}` }] };
190
+ },
191
+ },
192
+ // ─── Wave 68cb — Audience Activation MCP tools ───────────────────
193
+ // Pair with the AudienceActivationWizard (Layer 2) to give agents
194
+ // a way to wire up audience instrumentation without leaving the
195
+ // editor. Both tools are PROJECT-SCOPED via the api-client's
196
+ // active-workspace context — the merchant's CLI run pins which
197
+ // workspace they're acting on.,
198
+ };
199
+ //# sourceMappingURL=partners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partners.js","sourceRoot":"","sources":["../../src/tools/partners.ts"],"names":[],"mappings":"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"}