@clarvivo/mcp 0.1.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.
- package/README.md +33 -7
- package/dist/api.d.ts +79 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +40 -2
- package/dist/api.js.map +1 -1
- package/dist/payments.d.ts +12 -0
- package/dist/payments.d.ts.map +1 -0
- package/dist/payments.js +131 -0
- package/dist/payments.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +54 -1
- package/dist/server.js.map +1 -1
- package/dist/tools.d.ts +32 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +173 -8
- package/dist/tools.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `@clarvivo/mcp`
|
|
2
2
|
|
|
3
|
-
Install Clarvivo analytics without leaving your coding agent. The server detects the app framework, reuses or creates the right Clarvivo project, and returns the exact file and code edit. It can then verify real traffic and
|
|
3
|
+
Install Clarvivo analytics without leaving your coding agent. The server detects the app framework, reuses or creates the right Clarvivo project, and returns the exact file and code edit. It can then verify real traffic, connect payment revenue, and configure events, funnels, and alerts.
|
|
4
4
|
|
|
5
5
|
## The 60-second flow
|
|
6
6
|
|
|
@@ -20,10 +20,34 @@ The tracker observes `history.pushState`, `history.replaceState`, and `popstate`
|
|
|
20
20
|
| `get_install_snippet` | Get framework-specific instructions for an existing API key or project. |
|
|
21
21
|
| `verify_installation` | Prove the deployed snippet works from a proof-of-life event count, without reading analytics. |
|
|
22
22
|
| `list_projects` | List accessible projects and their public tracking API keys. |
|
|
23
|
-
| `get_stats` | Return a small summary for 1–90 days, capped to the top five pages and referrers. |
|
|
23
|
+
| `get_stats` | Return a small traffic and top-line revenue summary for 1–90 days, capped to the top five pages and referrers. |
|
|
24
|
+
| `connect_revenue` | Detect Stripe, Polar, Razorpay, Paddle, Lemon Squeezy, or Dodo; connect its webhook; and return the attribution edit. |
|
|
25
|
+
| `verify_revenue` | Summarise webhook proof-of-life and attribution coverage without dumping payment data. |
|
|
26
|
+
| `add_event` | Register an event and propose the `window.clarvivo.trackEvent(...)` edit and handler placement. |
|
|
27
|
+
| `create_funnel` | Create an ordered funnel or reuse one with the same name, then flag unmatched steps. |
|
|
28
|
+
| `create_alert` | Create a traffic/conversion alert or reuse an alert of the same type. |
|
|
29
|
+
| `list_funnels` | List funnels and their ordered steps. |
|
|
24
30
|
|
|
25
31
|
`setup_analytics` supports Next.js App Router, Next.js Pages Router, Vite (React/Vue/Svelte), Create React App, Astro, SvelteKit, Nuxt, Remix / React Router v7, Gatsby, Docusaurus, and static HTML.
|
|
26
32
|
|
|
33
|
+
## Connect payments
|
|
34
|
+
|
|
35
|
+
1. Ask the agent: **“Connect Clarvivo revenue for this project.”**
|
|
36
|
+
2. `connect_revenue` detects the payment SDK from `package.json`, connects the provider, and returns the webhook URL plus the exact events to enable.
|
|
37
|
+
3. Copy the provider signing secret from its webhook settings into Clarvivo at **Dashboard → Settings → Integrations**. Do not paste the secret into the agent or tool call.
|
|
38
|
+
4. Apply the returned client-to-server attribution edit. It reads `clv_vid` from browser local storage and puts it in the provider's supported metadata, custom data, or notes field. This is the step that makes revenue-by-channel work.
|
|
39
|
+
5. Complete a test payment, wait for delivery, then ask: **“Verify Clarvivo revenue.”**
|
|
40
|
+
|
|
41
|
+
The checkout snippet adapts to a Next.js route handler, Express handler, or serverless function. If no supported SDK is found, the tool returns a server-only signed `POST /api/ingest/:apiKey/revenue` example using `CLARVIVO_INGEST_SECRET`; that secret must never enter browser code.
|
|
42
|
+
|
|
43
|
+
## Track events & funnels
|
|
44
|
+
|
|
45
|
+
1. Ask: **“Track successful signups in Clarvivo.”** `add_event` registers the event and proposes a `window.clarvivo.trackEvent(...)` call for the success handler. The tool reports the edit; your coding agent applies it.
|
|
46
|
+
2. Ask: **“Create a Signup funnel with Landing, Pricing, and Success.”** `create_funnel` orders the steps, reuses an existing same-name funnel on retries, and points out steps that do not yet match a tracked page.
|
|
47
|
+
3. Ask: **“Alert me when conversion drops by 20%.”** `create_alert` reuses an existing alert of that type instead of creating duplicates.
|
|
48
|
+
|
|
49
|
+
The browser SDK global is `window.clarvivo`. It exposes `trackEvent(name, properties)`, `trackConversion(value, currency)`, and `trackPurchase(...)`.
|
|
50
|
+
|
|
27
51
|
## Configuration
|
|
28
52
|
|
|
29
53
|
Replace `clv_live_REPLACE_ME` below. Tokens are secrets; keep personal config files out of source control. The tracking API key returned by tools is intentionally public because it ships in page source.
|
|
@@ -199,6 +223,8 @@ Node.js 20 or newer is required.
|
|
|
199
223
|
|
|
200
224
|
Every tool checks for `CLARVIVO_API_TOKEN` before doing work. If it is missing, the tool returns the token URL and a copy-pasteable environment variable name. The bearer token is never included in tool output or logs.
|
|
201
225
|
|
|
226
|
+
Tools also report a missing token scope by name and link directly to the API-token settings page. Payment signing secrets are dashboard-only: `connect_revenue` has no secret input and sends only `{ provider, connected: true }` to Clarvivo.
|
|
227
|
+
|
|
202
228
|
Clarvivo has no free tier. If project creation returns `PROJECT_LIMIT_REACHED`, HTTP 402, or HTTP 403, the tool stops immediately and links to [billing](https://app.clarvivo.com/dashboard/billing). It does not retry or claim the project was created.
|
|
203
229
|
|
|
204
230
|
## Development
|
|
@@ -217,13 +243,13 @@ Set `CLARVIVO_BASE_URL=http://127.0.0.1:5000` when using a local Clarvivo server
|
|
|
217
243
|
No submission happens automatically. Complete these after the package and public repository are ready:
|
|
218
244
|
|
|
219
245
|
- [ ] **npm:** publish `clarvivo-mcp` publicly, confirm the `bin` is executable, and test a clean `npx -y @clarvivo/mcp` MCP initialize handshake. Use npm provenance/2FA and inspect `npm pack --dry-run` first.
|
|
220
|
-
- [ ] **Official MCP Registry:**
|
|
246
|
+
- [ ] **Official MCP Registry:** verify the `io.github.cracked-collective/clarvivo` namespace, publish the matching npm version first, then run `mcp-publisher login`, `mcp-publisher validate`, and `mcp-publisher publish` against the included `server.json`. The registry stores metadata, not the package. Follow the [official registry quickstart](https://modelcontextprotocol.io/registry/quickstart).
|
|
221
247
|
- [ ] **Smithery:** authenticate with the Smithery CLI and publish a local MCP bundle (`.mcpb`) under the Clarvivo namespace, or publish a hosted URL if an HTTP transport is added later: `smithery mcp publish <bundle.mcpb> -n clarvivo/clarvivo`. Smithery’s current publisher accepts hosted URLs or MCP bundles; see [Smithery CLI publishing](https://www.npmjs.com/package/@smithery/cli).
|
|
222
248
|
- [ ] **mcp.so:** use the [server submission form](https://mcp.so/submit?type=server). It currently requires a public repository URL and name; the paid path is optional and advertises immediate publishing.
|
|
223
|
-
- [ ] **PulseMCP:** use the site’s **Submit** flow and provide the public repository, npm install command,
|
|
224
|
-
- [ ] **Glama:** click **Add Server** in the [Glama registry](https://glama.ai/mcp/servers), submit the public GitHub repository, and add `glama.json` if organization ownership/metadata verification requests it. Confirm Glama can inspect all
|
|
249
|
+
- [ ] **PulseMCP:** use the site’s **Submit** flow and provide the public repository, npm install command, eleven-tool inventory, auth variable, license, and maintainer contact. Re-check the form at submission time because PulseMCP does not publish a stable submission schema.
|
|
250
|
+
- [ ] **Glama:** click **Add Server** in the [Glama registry](https://glama.ai/mcp/servers), submit the public GitHub repository, and add `glama.json` if organization ownership/metadata verification requests it. Confirm Glama can inspect all eleven tools.
|
|
225
251
|
- [ ] **Cursor Marketplace:** package the MCP config as an Agent Plugin or Cursor Plugin with a valid `plugin.json` / `.cursor-plugin/plugin.json`, public Git repository, README, and optional committed logo; declare the token variable in the manifest schema, then submit the repository at [cursor.com/marketplace/publish](https://cursor.com/marketplace/publish). Use the [official submission checklist](https://cursor.com/docs/reference/plugins).
|
|
226
252
|
- [ ] **awesome-mcp-servers:** first ensure the Glama listing exists, then fork [punkpeye/awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers), add one alphabetized line in the appropriate category with repository link and concise description, and open a PR following its [contribution guide](https://github.com/punkpeye/awesome-mcp-servers/blob/main/CONTRIBUTING.md).
|
|
227
253
|
- [ ] **Additional discovery:** submit the same canonical metadata to `mcpservers.org`, `MCP Central`, and `mcp-marketplace.io`; keep every listing pointed at the npm package and one canonical repository so versions and security notices do not drift.
|
|
228
254
|
|
|
229
|
-
For every listing, use the same name, description, repository, license, token variable, Node requirement,
|
|
255
|
+
For every listing, use the same name, description, repository, license, token variable, Node requirement, eleven-tool inventory, and install snippets from this README.
|
package/dist/api.d.ts
CHANGED
|
@@ -21,6 +21,45 @@ export interface RealtimeSnapshot {
|
|
|
21
21
|
count?: number;
|
|
22
22
|
[key: string]: unknown;
|
|
23
23
|
}
|
|
24
|
+
export interface FunnelStep {
|
|
25
|
+
name: string;
|
|
26
|
+
url: string;
|
|
27
|
+
order: number;
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
export interface ClarvivoFunnel {
|
|
31
|
+
id: number | string;
|
|
32
|
+
name: string;
|
|
33
|
+
steps: FunnelStep[];
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface ClarvivoAlert {
|
|
37
|
+
id: number | string;
|
|
38
|
+
type: string;
|
|
39
|
+
threshold: number | string | null;
|
|
40
|
+
isActive?: boolean;
|
|
41
|
+
[key: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
export interface RevenueSummary {
|
|
44
|
+
totalRevenue?: number | string;
|
|
45
|
+
eventCount?: number | string;
|
|
46
|
+
averageAmount?: number | string;
|
|
47
|
+
[key: string]: unknown;
|
|
48
|
+
}
|
|
49
|
+
export interface RevenueConnection {
|
|
50
|
+
provider: string;
|
|
51
|
+
connected: true;
|
|
52
|
+
webhookUrl: string;
|
|
53
|
+
secretConfigured: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface RevenueStatus {
|
|
56
|
+
connected: Record<string, boolean>;
|
|
57
|
+
secretConfigured: Record<string, boolean>;
|
|
58
|
+
eventsReceived: number;
|
|
59
|
+
lastEventAt: string | null;
|
|
60
|
+
lastSource: string | null;
|
|
61
|
+
attributedShare: number | null;
|
|
62
|
+
}
|
|
24
63
|
export interface InstallStatus {
|
|
25
64
|
installed: boolean;
|
|
26
65
|
eventsReceived: number;
|
|
@@ -37,11 +76,31 @@ export interface ClarvivoApi {
|
|
|
37
76
|
getInstallStatus(projectId: number | string): Promise<InstallStatus>;
|
|
38
77
|
getAnalytics(projectId: number | string, days: number): Promise<AnalyticsRow[]>;
|
|
39
78
|
getRealtime(projectId: number | string): Promise<RealtimeSnapshot>;
|
|
79
|
+
getRevenue(projectId: number | string): Promise<RevenueSummary>;
|
|
80
|
+
connectRevenue(projectId: number | string, provider: string): Promise<RevenueConnection>;
|
|
81
|
+
getRevenueStatus(projectId: number | string): Promise<RevenueStatus>;
|
|
82
|
+
createEvent(projectId: number | string, input: {
|
|
83
|
+
name: string;
|
|
84
|
+
type: string;
|
|
85
|
+
url?: string;
|
|
86
|
+
value?: number;
|
|
87
|
+
}): Promise<Record<string, unknown>>;
|
|
88
|
+
listFunnels(projectId: number | string): Promise<ClarvivoFunnel[]>;
|
|
89
|
+
createFunnel(projectId: number | string, input: {
|
|
90
|
+
name: string;
|
|
91
|
+
steps: FunnelStep[];
|
|
92
|
+
}): Promise<ClarvivoFunnel>;
|
|
93
|
+
listAlerts(projectId: number | string): Promise<ClarvivoAlert[]>;
|
|
94
|
+
createAlert(projectId: number | string, input: {
|
|
95
|
+
type: string;
|
|
96
|
+
threshold: number;
|
|
97
|
+
}): Promise<ClarvivoAlert>;
|
|
40
98
|
}
|
|
41
99
|
export declare class ClarvivoApiError extends Error {
|
|
42
100
|
readonly status: number;
|
|
43
101
|
readonly code?: string | undefined;
|
|
44
|
-
|
|
102
|
+
readonly scope?: string | undefined;
|
|
103
|
+
constructor(message: string, status: number, code?: string | undefined, scope?: string | undefined);
|
|
45
104
|
}
|
|
46
105
|
export declare const DEFAULT_BASE_URL = "https://app.clarvivo.com";
|
|
47
106
|
export declare function tokenSetupMessage(baseUrl?: string): string;
|
|
@@ -62,6 +121,25 @@ export declare class HttpClarvivoApi implements ClarvivoApi {
|
|
|
62
121
|
getInstallStatus(projectId: number | string): Promise<InstallStatus>;
|
|
63
122
|
getAnalytics(projectId: number | string, days: number): Promise<AnalyticsRow[]>;
|
|
64
123
|
getRealtime(projectId: number | string): Promise<RealtimeSnapshot>;
|
|
124
|
+
getRevenue(projectId: number | string): Promise<RevenueSummary>;
|
|
125
|
+
connectRevenue(projectId: number | string, provider: string): Promise<RevenueConnection>;
|
|
126
|
+
getRevenueStatus(projectId: number | string): Promise<RevenueStatus>;
|
|
127
|
+
createEvent(projectId: number | string, input: {
|
|
128
|
+
name: string;
|
|
129
|
+
type: string;
|
|
130
|
+
url?: string;
|
|
131
|
+
value?: number;
|
|
132
|
+
}): Promise<Record<string, unknown>>;
|
|
133
|
+
listFunnels(projectId: number | string): Promise<ClarvivoFunnel[]>;
|
|
134
|
+
createFunnel(projectId: number | string, input: {
|
|
135
|
+
name: string;
|
|
136
|
+
steps: FunnelStep[];
|
|
137
|
+
}): Promise<ClarvivoFunnel>;
|
|
138
|
+
listAlerts(projectId: number | string): Promise<ClarvivoAlert[]>;
|
|
139
|
+
createAlert(projectId: number | string, input: {
|
|
140
|
+
type: string;
|
|
141
|
+
threshold: number;
|
|
142
|
+
}): Promise<ClarvivoAlert>;
|
|
65
143
|
}
|
|
66
144
|
export declare function isPlanLimit(error: unknown): boolean;
|
|
67
145
|
export declare function isAnalyticsLockout(error: unknown): boolean;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACjF,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export class ClarvivoApiError extends Error {
|
|
2
2
|
status;
|
|
3
3
|
code;
|
|
4
|
-
|
|
4
|
+
scope;
|
|
5
|
+
constructor(message, status, code, scope) {
|
|
5
6
|
super(message);
|
|
6
7
|
this.status = status;
|
|
7
8
|
this.code = code;
|
|
9
|
+
this.scope = scope;
|
|
8
10
|
this.name = "ClarvivoApiError";
|
|
9
11
|
}
|
|
10
12
|
}
|
|
@@ -53,7 +55,7 @@ export class HttpClarvivoApi {
|
|
|
53
55
|
}
|
|
54
56
|
if (!response.ok) {
|
|
55
57
|
const object = body && typeof body === "object" ? body : {};
|
|
56
|
-
throw new ClarvivoApiError(typeof object.message === "string" ? object.message : `Clarvivo API request failed (${response.status}).`, response.status, typeof object.code === "string" ? object.code : undefined);
|
|
58
|
+
throw new ClarvivoApiError(typeof object.message === "string" ? object.message : `Clarvivo API request failed (${response.status}).`, response.status, typeof object.code === "string" ? object.code : undefined, typeof object.scope === "string" ? object.scope : undefined);
|
|
57
59
|
}
|
|
58
60
|
return body;
|
|
59
61
|
}
|
|
@@ -72,6 +74,42 @@ export class HttpClarvivoApi {
|
|
|
72
74
|
getRealtime(projectId) {
|
|
73
75
|
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/realtime/active`);
|
|
74
76
|
}
|
|
77
|
+
getRevenue(projectId) {
|
|
78
|
+
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/revenue`);
|
|
79
|
+
}
|
|
80
|
+
connectRevenue(projectId, provider) {
|
|
81
|
+
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/revenue-connection`, {
|
|
82
|
+
method: "PUT",
|
|
83
|
+
body: JSON.stringify({ provider, connected: true }),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
getRevenueStatus(projectId) {
|
|
87
|
+
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/revenue-status`);
|
|
88
|
+
}
|
|
89
|
+
createEvent(projectId, input) {
|
|
90
|
+
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/events`, {
|
|
91
|
+
method: "POST",
|
|
92
|
+
body: JSON.stringify(input),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
listFunnels(projectId) {
|
|
96
|
+
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/funnels`);
|
|
97
|
+
}
|
|
98
|
+
createFunnel(projectId, input) {
|
|
99
|
+
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/funnels`, {
|
|
100
|
+
method: "POST",
|
|
101
|
+
body: JSON.stringify(input),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
listAlerts(projectId) {
|
|
105
|
+
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/alerts`);
|
|
106
|
+
}
|
|
107
|
+
createAlert(projectId, input) {
|
|
108
|
+
return this.request(`/api/projects/${encodeURIComponent(String(projectId))}/alerts`, {
|
|
109
|
+
method: "POST",
|
|
110
|
+
body: JSON.stringify(input),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
75
113
|
}
|
|
76
114
|
export function isPlanLimit(error) {
|
|
77
115
|
return error instanceof ClarvivoApiError && (error.code === "PROJECT_LIMIT_REACHED" ||
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const revenueProviders: readonly ["stripe", "polar", "razorpay", "paddle", "lemonsqueezy", "dodo"];
|
|
2
|
+
export type RevenueProvider = (typeof revenueProviders)[number];
|
|
3
|
+
export declare function normalizeProvider(value: string): RevenueProvider | "custom";
|
|
4
|
+
export declare function detectRevenueProvider(root?: string): {
|
|
5
|
+
provider: RevenueProvider;
|
|
6
|
+
packageName: string;
|
|
7
|
+
} | undefined;
|
|
8
|
+
export type ServerFramework = "next-route-handler" | "next-api-route" | "express" | "serverless" | "generic";
|
|
9
|
+
export declare function detectServerFramework(root?: string): ServerFramework;
|
|
10
|
+
export declare function revenueChecklist(provider: RevenueProvider, webhookUrl: string, root?: string): string[];
|
|
11
|
+
export declare function signedRevenueSnippet(apiKey: string, baseUrl: string): string;
|
|
12
|
+
//# sourceMappingURL=payments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../src/payments.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,4EAA6E,CAAC;AAC3G,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAoChE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,QAAQ,CAI3E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,SAAgB,GAAG;IAAE,QAAQ,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAI1H;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAE7G,wBAAgB,qBAAqB,CAAC,IAAI,SAAgB,GAAG,eAAe,CAQ3E;AAmED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,MAAM,EAAE,CAQ9G;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5E"}
|
package/dist/payments.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { detectFramework } from "./frameworks.js";
|
|
4
|
+
export const revenueProviders = ["stripe", "polar", "razorpay", "paddle", "lemonsqueezy", "dodo"];
|
|
5
|
+
const packages = [
|
|
6
|
+
["stripe", "stripe"],
|
|
7
|
+
["@polar-sh/sdk", "polar"],
|
|
8
|
+
["razorpay", "razorpay"],
|
|
9
|
+
["@paddle/paddle-node-sdk", "paddle"],
|
|
10
|
+
["@lemonsqueezy/lemonsqueezy.js", "lemonsqueezy"],
|
|
11
|
+
["dodopayments", "dodo"],
|
|
12
|
+
];
|
|
13
|
+
const aliases = {
|
|
14
|
+
stripe: "stripe",
|
|
15
|
+
polar: "polar",
|
|
16
|
+
"polar.sh": "polar",
|
|
17
|
+
razorpay: "razorpay",
|
|
18
|
+
paddle: "paddle",
|
|
19
|
+
lemonsqueezy: "lemonsqueezy",
|
|
20
|
+
"lemon-squeezy": "lemonsqueezy",
|
|
21
|
+
dodo: "dodo",
|
|
22
|
+
dodopayments: "dodo",
|
|
23
|
+
custom: "custom",
|
|
24
|
+
};
|
|
25
|
+
function dependencies(root) {
|
|
26
|
+
try {
|
|
27
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
|
|
28
|
+
return { ...pkg.dependencies, ...pkg.devDependencies };
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function normalizeProvider(value) {
|
|
35
|
+
const provider = aliases[value.trim().toLowerCase()];
|
|
36
|
+
if (!provider)
|
|
37
|
+
throw new Error(`Unsupported payment provider "${value}". Use ${revenueProviders.join(", ")}, or custom.`);
|
|
38
|
+
return provider;
|
|
39
|
+
}
|
|
40
|
+
export function detectRevenueProvider(root = process.cwd()) {
|
|
41
|
+
const deps = dependencies(root);
|
|
42
|
+
const match = packages.find(([packageName]) => Boolean(deps[packageName]));
|
|
43
|
+
return match ? { packageName: match[0], provider: match[1] } : undefined;
|
|
44
|
+
}
|
|
45
|
+
export function detectServerFramework(root = process.cwd()) {
|
|
46
|
+
const framework = detectFramework(root);
|
|
47
|
+
if (framework?.framework === "next-app")
|
|
48
|
+
return "next-route-handler";
|
|
49
|
+
if (framework?.framework === "next-pages")
|
|
50
|
+
return "next-api-route";
|
|
51
|
+
const deps = dependencies(root);
|
|
52
|
+
if (deps.express)
|
|
53
|
+
return "express";
|
|
54
|
+
if (deps.serverless || deps["@netlify/functions"] || deps["@vercel/node"] || fs.existsSync(path.join(root, "serverless.yml")))
|
|
55
|
+
return "serverless";
|
|
56
|
+
return "generic";
|
|
57
|
+
}
|
|
58
|
+
const providerDetails = {
|
|
59
|
+
stripe: {
|
|
60
|
+
events: ["checkout.session.completed", "payment_intent.succeeded", "charge.refunded"],
|
|
61
|
+
dashboard: "Stripe Dashboard → Workbench → Webhooks → open this endpoint → Reveal secret",
|
|
62
|
+
},
|
|
63
|
+
lemonsqueezy: {
|
|
64
|
+
events: ["order_created", "order_refunded", "subscription_payment_success"],
|
|
65
|
+
dashboard: "Lemon Squeezy Dashboard → Settings → Webhooks → create/open this webhook → Signing secret",
|
|
66
|
+
},
|
|
67
|
+
polar: {
|
|
68
|
+
events: ["order.created", "subscription.created", "subscription.updated", "order.refunded"],
|
|
69
|
+
dashboard: "Polar Dashboard → organization Settings → Developers → Webhooks → create/open the endpoint → Secret",
|
|
70
|
+
},
|
|
71
|
+
paddle: {
|
|
72
|
+
events: ["transaction.completed", "adjustment.created", "adjustment.updated"],
|
|
73
|
+
dashboard: "Paddle Dashboard → Developer tools → Notifications → create/open the notification destination → Secret key",
|
|
74
|
+
},
|
|
75
|
+
razorpay: {
|
|
76
|
+
events: ["payment.captured", "refund.created"],
|
|
77
|
+
dashboard: "Razorpay Dashboard → Account & Settings → Webhooks → create/open the webhook → Secret",
|
|
78
|
+
},
|
|
79
|
+
dodo: {
|
|
80
|
+
events: ["payment.succeeded", "refund.succeeded"],
|
|
81
|
+
dashboard: "Dodo Payments Dashboard → Developer → Webhooks → create/open the endpoint → Signing secret",
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
function checkoutEdit(provider) {
|
|
85
|
+
const fields = "utm_source, utm_medium, utm_campaign";
|
|
86
|
+
switch (provider) {
|
|
87
|
+
case "stripe":
|
|
88
|
+
return `const session = await stripe.checkout.sessions.create({\n ...checkoutOptions,\n client_reference_id: clvVid,\n metadata: { ${fields} },\n});`;
|
|
89
|
+
case "polar":
|
|
90
|
+
return `const checkout = await polar.checkouts.create({\n ...checkoutOptions,\n metadata: { clv_visitor_id: clvVid, ${fields} },\n});`;
|
|
91
|
+
case "razorpay":
|
|
92
|
+
return `const order = await razorpay.orders.create({\n ...orderOptions,\n notes: { clv_visitor_id: clvVid, ${fields} },\n});`;
|
|
93
|
+
case "paddle":
|
|
94
|
+
return `const transaction = await paddle.transactions.create({\n ...transactionOptions,\n customData: { clv_visitor_id: clvVid, ${fields} }, // Paddle custom_data\n});`;
|
|
95
|
+
case "lemonsqueezy":
|
|
96
|
+
return `const checkout = await createCheckout(storeId, variantId, {\n ...checkoutOptions,\n checkoutData: { custom: { clv_visitor_id: clvVid, ${fields} } }, // checkout_data.custom\n});`;
|
|
97
|
+
case "dodo":
|
|
98
|
+
return `const payment = await client.payments.create({\n ...paymentOptions,\n metadata: { clv_visitor_id: clvVid, ${fields} },\n});`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function serverEdit(provider, framework) {
|
|
102
|
+
const prelude = framework === "next-route-handler"
|
|
103
|
+
? `// In app/api/checkout/route.ts\nexport async function POST(request: Request) {\n const { clvVid, utm_source, utm_medium, utm_campaign } = await request.json();`
|
|
104
|
+
: framework === "next-api-route"
|
|
105
|
+
? `// In pages/api/checkout.ts\nexport default async function handler(req, res) {\n const { clvVid, utm_source, utm_medium, utm_campaign } = req.body;`
|
|
106
|
+
: framework === "express"
|
|
107
|
+
? `// In the Express checkout POST handler\napp.post("/api/checkout", async (req, res) => {\n const { clvVid, utm_source, utm_medium, utm_campaign } = req.body;`
|
|
108
|
+
: framework === "serverless"
|
|
109
|
+
? `// In the checkout serverless function\nexport async function handler(event) {\n const { clvVid, utm_source, utm_medium, utm_campaign } = JSON.parse(event.body || "{}");`
|
|
110
|
+
: `// In the server-side checkout handler\nconst { clvVid, utm_source, utm_medium, utm_campaign } = checkoutRequestBody;`;
|
|
111
|
+
const ending = framework === "next-route-handler" ? "\n // Keep your existing checkout response here.\n}"
|
|
112
|
+
: framework === "next-api-route" ? "\n // Keep your existing checkout response here.\n}"
|
|
113
|
+
: framework === "express" ? "\n // Keep your existing checkout response here.\n});"
|
|
114
|
+
: framework === "serverless" ? "\n // Keep your existing checkout response here.\n}"
|
|
115
|
+
: "";
|
|
116
|
+
return `${prelude}\n\n ${checkoutEdit(provider).replace(/\n/g, "\n ")}${ending}`;
|
|
117
|
+
}
|
|
118
|
+
const browserAttribution = `// In the browser, immediately before calling your checkout endpoint\nconst params = new URLSearchParams(window.location.search);\nconst attribution = {\n clvVid: localStorage.getItem("clv_vid") || undefined,\n utm_source: params.get("utm_source") || undefined,\n utm_medium: params.get("utm_medium") || undefined,\n utm_campaign: params.get("utm_campaign") || undefined,\n};\nawait fetch("/api/checkout", {\n method: "POST",\n headers: { "Content-Type": "application/json" },\n body: JSON.stringify(attribution),\n});`;
|
|
119
|
+
export function revenueChecklist(provider, webhookUrl, root = process.cwd()) {
|
|
120
|
+
const details = providerDetails[provider];
|
|
121
|
+
const framework = detectServerFramework(root);
|
|
122
|
+
return [
|
|
123
|
+
`Paste this webhook URL into ${provider}: ${webhookUrl}\nEnable: ${details.events.join(", ")}.`,
|
|
124
|
+
`${details.dashboard}. Paste that signing secret into Clarvivo at /dashboard/settings → Integrations — do not paste it here.`,
|
|
125
|
+
`Make this attribution edit. It is what makes revenue-by-channel work.\n\n${browserAttribution}\n\n${serverEdit(provider, framework)}`,
|
|
126
|
+
];
|
|
127
|
+
}
|
|
128
|
+
export function signedRevenueSnippet(apiKey, baseUrl) {
|
|
129
|
+
return `// Server-side only. Keep CLARVIVO_INGEST_SECRET out of source control and browsers.\nimport crypto from "node:crypto";\n\nconst payload = JSON.stringify({\n amount: 49.00, currency: "USD", event_type: "payment_success",\n external_id: payment.id, visitor_id: clvVid,\n utm_source, utm_medium, utm_campaign,\n});\nconst timestamp = Math.floor(Date.now() / 1000).toString();\nconst digest = crypto.createHmac("sha256", process.env.CLARVIVO_INGEST_SECRET!)\n .update(\`\${timestamp}.revenue.\${payload}\`, "utf8").digest("hex");\nawait fetch("${baseUrl.replace(/\/$/, "")}/api/ingest/${apiKey}/revenue", {\n method: "POST",\n headers: {\n "Content-Type": "application/json",\n "X-Clarvivo-Signature": \`t=\${timestamp},v1=\${digest}\`,\n },\n body: payload,\n});`;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=payments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.js","sourceRoot":"","sources":["../src/payments.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,YAAY,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,YAAY,IAAI,SAAS,CA+GxC"}
|
package/dist/server.js
CHANGED
|
@@ -2,7 +2,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { createToolHandlers } from "./tools.js";
|
|
4
4
|
export function createServer() {
|
|
5
|
-
const server = new McpServer({ name: "clarvivo", version: "0.
|
|
5
|
+
const server = new McpServer({ name: "clarvivo", version: "0.2.0" });
|
|
6
6
|
const handlers = createToolHandlers();
|
|
7
7
|
const projectId = z.union([z.number(), z.string()]).describe("Clarvivo project ID");
|
|
8
8
|
server.registerTool("setup_analytics", {
|
|
@@ -46,6 +46,59 @@ export function createServer() {
|
|
|
46
46
|
},
|
|
47
47
|
annotations: { readOnlyHint: true, idempotentHint: true },
|
|
48
48
|
}, handlers.getStats);
|
|
49
|
+
server.registerTool("connect_revenue", {
|
|
50
|
+
title: "Connect payment revenue",
|
|
51
|
+
description: "Detect a supported payment SDK (or use the named provider), connect its Clarvivo webhook, and return a three-step setup checklist with the exact attribution edit. Never accepts or transmits webhook secrets.",
|
|
52
|
+
inputSchema: {
|
|
53
|
+
projectId,
|
|
54
|
+
provider: z.enum(["stripe", "polar", "razorpay", "paddle", "lemonsqueezy", "dodo", "custom"]).optional(),
|
|
55
|
+
},
|
|
56
|
+
annotations: { idempotentHint: true },
|
|
57
|
+
}, handlers.connectRevenue);
|
|
58
|
+
server.registerTool("verify_revenue", {
|
|
59
|
+
title: "Verify payment revenue",
|
|
60
|
+
description: "Check payment webhook proof-of-life and attribution coverage without returning revenue amounts or customer data.",
|
|
61
|
+
inputSchema: { projectId },
|
|
62
|
+
annotations: { readOnlyHint: true, idempotentHint: true },
|
|
63
|
+
}, handlers.verifyRevenue);
|
|
64
|
+
server.registerTool("add_event", {
|
|
65
|
+
title: "Register a tracked event",
|
|
66
|
+
description: "Register a Clarvivo event and propose the exact window.clarvivo.trackEvent call and handler placement. This tool does not edit files.",
|
|
67
|
+
inputSchema: {
|
|
68
|
+
projectId,
|
|
69
|
+
name: z.string().min(1),
|
|
70
|
+
type: z.enum(["click", "form_submit", "page_view", "purchase", "signup", "custom"]),
|
|
71
|
+
url: z.string().min(1).optional(),
|
|
72
|
+
value: z.number().finite().optional(),
|
|
73
|
+
where: z.string().min(1).optional().describe("Human-readable handler or file location for the proposed edit"),
|
|
74
|
+
},
|
|
75
|
+
}, handlers.addEvent);
|
|
76
|
+
server.registerTool("create_funnel", {
|
|
77
|
+
title: "Create a conversion funnel",
|
|
78
|
+
description: "Create an ordered funnel, reusing a case-insensitive name match so retries never duplicate it, and flag steps without a known tracked page.",
|
|
79
|
+
inputSchema: {
|
|
80
|
+
projectId,
|
|
81
|
+
name: z.string().min(1),
|
|
82
|
+
steps: z.array(z.object({ name: z.string().min(1), url: z.string().min(1) })).min(2),
|
|
83
|
+
},
|
|
84
|
+
annotations: { idempotentHint: true },
|
|
85
|
+
}, handlers.createFunnel);
|
|
86
|
+
server.registerTool("create_alert", {
|
|
87
|
+
title: "Create an analytics alert",
|
|
88
|
+
description: "Create a traffic or conversion alert, reusing an existing alert of the same type.",
|
|
89
|
+
inputSchema: {
|
|
90
|
+
projectId,
|
|
91
|
+
type: z.enum(["traffic_spike", "traffic_dip", "conversion_drop"]),
|
|
92
|
+
threshold: z.number().finite().nonnegative(),
|
|
93
|
+
},
|
|
94
|
+
annotations: { idempotentHint: true },
|
|
95
|
+
}, handlers.createAlert);
|
|
96
|
+
server.registerTool("list_funnels", {
|
|
97
|
+
title: "List conversion funnels",
|
|
98
|
+
description: "List the project's funnels and ordered steps.",
|
|
99
|
+
inputSchema: { projectId },
|
|
100
|
+
annotations: { readOnlyHint: true, idempotentHint: true },
|
|
101
|
+
}, handlers.listFunnels);
|
|
49
102
|
return server;
|
|
50
103
|
}
|
|
51
104
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -39,6 +39,38 @@ export declare function createToolHandlers(context?: ToolContext): {
|
|
|
39
39
|
projectId: number | string;
|
|
40
40
|
days?: number;
|
|
41
41
|
}) => Promise<ToolResult>;
|
|
42
|
+
connectRevenue: (input: {
|
|
43
|
+
projectId: number | string;
|
|
44
|
+
provider?: string;
|
|
45
|
+
[key: string]: unknown;
|
|
46
|
+
}) => Promise<ToolResult>;
|
|
47
|
+
verifyRevenue: (input: {
|
|
48
|
+
projectId: number | string;
|
|
49
|
+
}) => Promise<ToolResult>;
|
|
50
|
+
addEvent: (input: {
|
|
51
|
+
projectId: number | string;
|
|
52
|
+
name: string;
|
|
53
|
+
type: string;
|
|
54
|
+
url?: string;
|
|
55
|
+
value?: number;
|
|
56
|
+
where?: string;
|
|
57
|
+
}) => Promise<ToolResult>;
|
|
58
|
+
listFunnels: (input: {
|
|
59
|
+
projectId: number | string;
|
|
60
|
+
}) => Promise<ToolResult>;
|
|
61
|
+
createFunnel: (input: {
|
|
62
|
+
projectId: number | string;
|
|
63
|
+
name: string;
|
|
64
|
+
steps: Array<{
|
|
65
|
+
name: string;
|
|
66
|
+
url: string;
|
|
67
|
+
}>;
|
|
68
|
+
}) => Promise<ToolResult>;
|
|
69
|
+
createAlert: (input: {
|
|
70
|
+
projectId: number | string;
|
|
71
|
+
type: string;
|
|
72
|
+
threshold: number;
|
|
73
|
+
}) => Promise<ToolResult>;
|
|
42
74
|
};
|
|
43
75
|
export declare function workingDirectoryLabel(cwd?: string): string;
|
|
44
76
|
export {};
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.js
CHANGED
|
@@ -1,17 +1,63 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { HttpClarvivoApi, isAnalyticsLockout, isPlanLimit, payToReadMessage, planLimitMessage, requireToken, } from "./api.js";
|
|
2
|
+
import { ClarvivoApiError, HttpClarvivoApi, isAnalyticsLockout, isPlanLimit, payToReadMessage, planLimitMessage, requireToken, } from "./api.js";
|
|
3
3
|
import { detectFramework, getInstallInstructions, normalizeFramework, } from "./frameworks.js";
|
|
4
|
+
import { detectRevenueProvider, normalizeProvider, revenueChecklist, signedRevenueSnippet, } from "./payments.js";
|
|
4
5
|
function success(data) {
|
|
5
6
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }], structuredContent: data };
|
|
6
7
|
}
|
|
7
8
|
function failure(error, env, mode) {
|
|
8
|
-
const message =
|
|
9
|
-
?
|
|
10
|
-
: mode === "
|
|
11
|
-
?
|
|
12
|
-
:
|
|
9
|
+
const message = error instanceof ClarvivoApiError && error.code === "TOKEN_SCOPE_REQUIRED"
|
|
10
|
+
? `This tool needs the ${error.scope || "required"} scope. Open ${(env.CLARVIVO_BASE_URL || "https://app.clarvivo.com").replace(/\/$/, "")}/dashboard/settings?tab=api-tokens, add ${error.scope || "that scope"} to this API token (or create a token with it), then restart the MCP client and retry.`
|
|
11
|
+
: mode === "project-limit" && isPlanLimit(error)
|
|
12
|
+
? planLimitMessage(env.CLARVIVO_BASE_URL)
|
|
13
|
+
: mode === "analytics-lockout" && isAnalyticsLockout(error)
|
|
14
|
+
? payToReadMessage(env.CLARVIVO_BASE_URL)
|
|
15
|
+
: error instanceof Error ? error.message : "Clarvivo request failed.";
|
|
13
16
|
return { content: [{ type: "text", text: message }], isError: true };
|
|
14
17
|
}
|
|
18
|
+
function projectApiKey(projects, projectId) {
|
|
19
|
+
const project = projects.find((candidate) => String(candidate.id) === String(projectId));
|
|
20
|
+
if (!project)
|
|
21
|
+
throw new Error(`Project ${projectId} was not found.`);
|
|
22
|
+
return project.apiKey;
|
|
23
|
+
}
|
|
24
|
+
function relativeTime(value, now = Date.now()) {
|
|
25
|
+
if (!value)
|
|
26
|
+
return "never";
|
|
27
|
+
const elapsed = Math.max(0, now - new Date(value).getTime());
|
|
28
|
+
if (!Number.isFinite(elapsed))
|
|
29
|
+
return value;
|
|
30
|
+
const seconds = Math.round(elapsed / 1000);
|
|
31
|
+
if (seconds < 60)
|
|
32
|
+
return `${seconds}s ago`;
|
|
33
|
+
const minutes = Math.round(seconds / 60);
|
|
34
|
+
if (minutes < 60)
|
|
35
|
+
return `${minutes}m ago`;
|
|
36
|
+
const hours = Math.round(minutes / 60);
|
|
37
|
+
if (hours < 48)
|
|
38
|
+
return `${hours}h ago`;
|
|
39
|
+
return `${Math.round(hours / 24)}d ago`;
|
|
40
|
+
}
|
|
41
|
+
function knownPagePaths(rows) {
|
|
42
|
+
const paths = new Set();
|
|
43
|
+
for (const row of rows) {
|
|
44
|
+
for (const item of [...array(row.topPages), ...array(row.pageDetails)]) {
|
|
45
|
+
const value = item.path ?? item.page ?? item.url;
|
|
46
|
+
if (typeof value === "string")
|
|
47
|
+
paths.add(normalizePath(value));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return paths;
|
|
51
|
+
}
|
|
52
|
+
function normalizePath(value) {
|
|
53
|
+
try {
|
|
54
|
+
const parsed = new URL(value, "https://clarvivo.local");
|
|
55
|
+
return parsed.pathname.replace(/\/$/, "") || "/";
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return value.trim().replace(/\/$/, "") || "/";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
15
61
|
function canonicalDomain(input) {
|
|
16
62
|
const value = input.trim();
|
|
17
63
|
if (!value)
|
|
@@ -183,13 +229,132 @@ export function createToolHandlers(context = {}) {
|
|
|
183
229
|
try {
|
|
184
230
|
const api = resolveApi(context);
|
|
185
231
|
const days = Math.max(1, Math.min(90, Math.round(input.days ?? 7)));
|
|
186
|
-
const [rows, realtime] = await Promise.all([
|
|
187
|
-
|
|
232
|
+
const [rows, realtime, revenue] = await Promise.all([
|
|
233
|
+
api.getAnalytics(input.projectId, days),
|
|
234
|
+
api.getRealtime(input.projectId),
|
|
235
|
+
api.getRevenue(input.projectId),
|
|
236
|
+
]);
|
|
237
|
+
return success({
|
|
238
|
+
projectId: input.projectId,
|
|
239
|
+
...summarizeStats(rows, number(realtime.count), days),
|
|
240
|
+
revenue: {
|
|
241
|
+
total: number(revenue.totalRevenue),
|
|
242
|
+
events: number(revenue.eventCount),
|
|
243
|
+
average: number(revenue.averageAmount),
|
|
244
|
+
},
|
|
245
|
+
});
|
|
188
246
|
}
|
|
189
247
|
catch (error) {
|
|
190
248
|
return failure(error, env, "analytics-lockout");
|
|
191
249
|
}
|
|
192
250
|
},
|
|
251
|
+
connectRevenue: async (input) => {
|
|
252
|
+
try {
|
|
253
|
+
const api = resolveApi(context);
|
|
254
|
+
const detected = input.provider ? undefined : detectRevenueProvider(cwd);
|
|
255
|
+
const provider = input.provider ? normalizeProvider(input.provider) : detected?.provider;
|
|
256
|
+
if (!provider || provider === "custom") {
|
|
257
|
+
const apiKey = projectApiKey(await api.listProjects(), input.projectId);
|
|
258
|
+
return success({
|
|
259
|
+
projectId: input.projectId,
|
|
260
|
+
provider: "custom",
|
|
261
|
+
message: "No supported payment SDK was detected. Copy the ingest signing secret from Clarvivo Dashboard → Settings → Integrations into the server-only CLARVIVO_INGEST_SECRET environment variable, then use this signed revenue POST. Never run it in the browser or paste the secret into a tool call.",
|
|
262
|
+
snippet: signedRevenueSnippet(apiKey, baseUrl(context)),
|
|
263
|
+
attribution: "Pass clv_vid from browser localStorage to this server-side code as visitor_id. That is what makes revenue-by-channel work.",
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
const connection = await api.connectRevenue(input.projectId, provider);
|
|
267
|
+
const checklist = revenueChecklist(provider, connection.webhookUrl, cwd);
|
|
268
|
+
return success({
|
|
269
|
+
projectId: input.projectId,
|
|
270
|
+
provider,
|
|
271
|
+
detectedFrom: detected?.packageName,
|
|
272
|
+
connected: true,
|
|
273
|
+
secretConfigured: connection.secretConfigured,
|
|
274
|
+
checklist,
|
|
275
|
+
numberedChecklist: checklist.map((item, index) => `${index + 1}. ${item}`).join("\n\n"),
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
return failure(error, env);
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
verifyRevenue: async (input) => {
|
|
283
|
+
try {
|
|
284
|
+
const status = await resolveApi(context).getRevenueStatus(input.projectId);
|
|
285
|
+
const share = status.attributedShare == null ? 0 : Math.round(status.attributedShare * 100);
|
|
286
|
+
const provider = status.lastSource || Object.entries(status.connected).find(([, connected]) => connected)?.[0] || "revenue";
|
|
287
|
+
const summary = `${status.eventsReceived.toLocaleString("en-US")} events from ${provider}, last ${relativeTime(status.lastEventAt)}, ${share}% attributed.`;
|
|
288
|
+
const warning = status.eventsReceived > 0 && share === 0
|
|
289
|
+
? "Revenue is arriving, but the attribution edit is missing. Add clv_vid and UTM fields to checkout creation so revenue-by-channel works."
|
|
290
|
+
: undefined;
|
|
291
|
+
return success({ projectId: input.projectId, ...status, attributedPercent: share, summary, ...(warning ? { warning } : {}) });
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
return failure(error, env);
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
addEvent: async (input) => {
|
|
298
|
+
try {
|
|
299
|
+
const event = await resolveApi(context).createEvent(input.projectId, {
|
|
300
|
+
name: input.name,
|
|
301
|
+
type: input.type,
|
|
302
|
+
...(input.url ? { url: input.url } : {}),
|
|
303
|
+
...(input.value !== undefined ? { value: input.value } : {}),
|
|
304
|
+
});
|
|
305
|
+
const properties = input.value === undefined ? "{}" : `{ value: ${input.value} }`;
|
|
306
|
+
const where = input.where?.trim() || (input.type === "form_submit" || input.type === "signup"
|
|
307
|
+
? "the successful submit handler, after the server confirms success"
|
|
308
|
+
: input.type === "click" ? "the click handler for the intended control" : "the handler where this action succeeds");
|
|
309
|
+
return success({
|
|
310
|
+
projectId: input.projectId,
|
|
311
|
+
event,
|
|
312
|
+
proposedEdit: `window.clarvivo.trackEvent(${JSON.stringify(input.name)}, ${properties});`,
|
|
313
|
+
placement: `Add the proposed call in ${where}. This tool registered the event in Clarvivo; it did not edit your files.`,
|
|
314
|
+
sdk: "window.clarvivo also exposes trackConversion(value, currency) and trackPurchase(...).",
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
return failure(error, env);
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
listFunnels: async (input) => {
|
|
322
|
+
try {
|
|
323
|
+
const funnels = await resolveApi(context).listFunnels(input.projectId);
|
|
324
|
+
return success({ projectId: input.projectId, funnels, count: funnels.length });
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
return failure(error, env);
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
createFunnel: async (input) => {
|
|
331
|
+
try {
|
|
332
|
+
const api = resolveApi(context);
|
|
333
|
+
const existing = (await api.listFunnels(input.projectId)).find((funnel) => funnel.name.trim().toLowerCase() === input.name.trim().toLowerCase());
|
|
334
|
+
const ordered = input.steps.map((step, index) => ({ ...step, order: index + 1 }));
|
|
335
|
+
const funnel = existing ?? await api.createFunnel(input.projectId, { name: input.name, steps: ordered });
|
|
336
|
+
const rows = await api.getAnalytics(input.projectId, 90).catch(() => []);
|
|
337
|
+
const pages = knownPagePaths(rows);
|
|
338
|
+
const missingSteps = (existing?.steps ?? ordered)
|
|
339
|
+
.filter((step) => !pages.has(normalizePath(step.url)))
|
|
340
|
+
.map(({ name, url }) => ({ name, url, guidance: "No matching tracked page is visible yet; visit this deployed page or register a matching event." }));
|
|
341
|
+
return success({ projectId: input.projectId, funnel, reusedExistingFunnel: Boolean(existing), missingSteps });
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
return failure(error, env);
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
createAlert: async (input) => {
|
|
348
|
+
try {
|
|
349
|
+
const api = resolveApi(context);
|
|
350
|
+
const existing = (await api.listAlerts(input.projectId)).find((alert) => alert.type === input.type);
|
|
351
|
+
const alert = existing ?? await api.createAlert(input.projectId, { type: input.type, threshold: input.threshold });
|
|
352
|
+
return success({ projectId: input.projectId, alert, reusedExistingAlert: Boolean(existing) });
|
|
353
|
+
}
|
|
354
|
+
catch (error) {
|
|
355
|
+
return failure(error, env);
|
|
356
|
+
}
|
|
357
|
+
},
|
|
193
358
|
};
|
|
194
359
|
}
|
|
195
360
|
export function workingDirectoryLabel(cwd = process.cwd()) {
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clarvivo/mcp",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"mcpName": "io.github.cracked-collective/clarvivo-mcp",
|
|
4
|
+
"version": "0.2.0",
|
|
5
|
+
"description": "Install Clarvivo analytics, connect payments, and manage events, funnels, and alerts from your coding agent.",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"bin": {
|
|
7
8
|
"clarvivo-mcp": "dist/index.js"
|
|
@@ -40,6 +41,5 @@
|
|
|
40
41
|
"@types/node": "^22.18.0",
|
|
41
42
|
"typescript": "^5.9.2",
|
|
42
43
|
"vitest": "^3.2.4"
|
|
43
|
-
}
|
|
44
|
-
"mcpName": "io.github.cracked-collective/clarvivo-mcp"
|
|
44
|
+
}
|
|
45
45
|
}
|