@apex-inc/mcp-server 0.9.8 → 0.9.9
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/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/screenshot-cli.d.ts +16 -0
- package/dist/screenshot-cli.d.ts.map +1 -0
- package/dist/screenshot-cli.js +170 -0
- package/dist/screenshot-cli.js.map +1 -0
- package/package.json +4 -1
package/dist/index.js
CHANGED
|
@@ -7,6 +7,14 @@ import { resourceDefinitions } from "./resources.js";
|
|
|
7
7
|
import { promptDefinitions } from "./prompts.js";
|
|
8
8
|
import { sendStartupPing, discoverContext } from "./api-client.js";
|
|
9
9
|
import { MCP_SERVER_VERSION } from "./version.js";
|
|
10
|
+
// Subcommand dispatch: `npx @apex-inc/mcp-server screenshot <opts>` runs the
|
|
11
|
+
// Playwright capture flow and exits, instead of starting the stdio server.
|
|
12
|
+
// The default (no subcommand) behavior stays: start the MCP server.
|
|
13
|
+
if (process.argv[2] === "screenshot") {
|
|
14
|
+
const { runScreenshotCli } = await import("./screenshot-cli.js");
|
|
15
|
+
await runScreenshotCli(process.argv.slice(3));
|
|
16
|
+
process.exit(process.exitCode ?? 0);
|
|
17
|
+
}
|
|
10
18
|
const server = new McpServer({ name: "apex", version: MCP_SERVER_VERSION }, {
|
|
11
19
|
instructions: [
|
|
12
20
|
"You are connected to the Apex growth platform, which manages A/B tests and growth experiments.",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,6EAA6E;AAC7E,2EAA2E;AAC3E,oEAAoE;AACpE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;IACrC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjE,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAC7C;IACE,YAAY,EAAE;QACZ,gGAAgG;QAChG,gGAAgG;QAChG,uGAAuG;QACvG,6FAA6F;QAC7F,uFAAuF;QACvF,kGAAkG;QAClG,uFAAuF;QACvF,+DAA+D;QAC/D,qFAAqF;QACrF,+EAA+E;KAChF,CAAC,IAAI,CAAC,GAAG,CAAC;CACZ,CACF,CAAC;AAEF,yBAAyB;AAEzB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;IAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;QAC3F,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,IAAa,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6BAA6B;AAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC;IACrD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;QACtG,OAAO,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2BAA2B;AAE3B,MAAM,CAAC,MAAM,CACX,gBAAgB,EAChB,+FAA+F,EAC/F,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,EACxE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,IAA8B,CAAC,CACtF,CAAC;AAEF,MAAM,CAAC,MAAM,CACX,mBAAmB,EACnB,6EAA6E,EAC7E,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,EACpE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,IAA8B,CAAC,CACzF,CAAC;AAEF,gBAAgB;AAEhB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E;IAC1E,+DAA+D;IAC/D,MAAM,UAAU,GAAG,MAAM,eAAe,EAAE,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,eAAe,EAAE,CAAC;AACpB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `screenshot` CLI subcommand for the Apex MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Invoked as `npx @apex-inc/mcp-server screenshot <opts>` (dispatched from
|
|
5
|
+
* index.ts when `process.argv[2] === "screenshot"`). It captures a variant
|
|
6
|
+
* screenshot with Playwright and uploads it to Apex via the existing assets
|
|
7
|
+
* endpoint (`POST /api/experiments/{id}/assets`, source: "agent").
|
|
8
|
+
*
|
|
9
|
+
* Playwright is a LAZY / OPTIONAL dependency: it lives in optionalDependencies,
|
|
10
|
+
* is never imported at the top level, and is resolved with a runtime
|
|
11
|
+
* `await import("playwright")`. If it isn't installed we print a friendly
|
|
12
|
+
* install hint and exit 1. Because it's only imported dynamically (and typed
|
|
13
|
+
* with a minimal local interface below), tsc builds cleanly without the package.
|
|
14
|
+
*/
|
|
15
|
+
export declare function runScreenshotCli(argv: string[]): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=screenshot-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot-cli.d.ts","sourceRoot":"","sources":["../src/screenshot-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmJH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEpE"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `screenshot` CLI subcommand for the Apex MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Invoked as `npx @apex-inc/mcp-server screenshot <opts>` (dispatched from
|
|
5
|
+
* index.ts when `process.argv[2] === "screenshot"`). It captures a variant
|
|
6
|
+
* screenshot with Playwright and uploads it to Apex via the existing assets
|
|
7
|
+
* endpoint (`POST /api/experiments/{id}/assets`, source: "agent").
|
|
8
|
+
*
|
|
9
|
+
* Playwright is a LAZY / OPTIONAL dependency: it lives in optionalDependencies,
|
|
10
|
+
* is never imported at the top level, and is resolved with a runtime
|
|
11
|
+
* `await import("playwright")`. If it isn't installed we print a friendly
|
|
12
|
+
* install hint and exit 1. Because it's only imported dynamically (and typed
|
|
13
|
+
* with a minimal local interface below), tsc builds cleanly without the package.
|
|
14
|
+
*/
|
|
15
|
+
import { apiPost } from "./api-client.js";
|
|
16
|
+
const VIEWPORT_WIDTHS = {
|
|
17
|
+
desktop: 1280,
|
|
18
|
+
tablet: 834,
|
|
19
|
+
mobile: 390,
|
|
20
|
+
};
|
|
21
|
+
const VIEWPORT_HEIGHTS = {
|
|
22
|
+
desktop: 800,
|
|
23
|
+
tablet: 1112,
|
|
24
|
+
mobile: 844,
|
|
25
|
+
};
|
|
26
|
+
/** Parse `--flag value` and `--bool` style argv into a typed options bag. */
|
|
27
|
+
function parseArgs(argv) {
|
|
28
|
+
const opts = {};
|
|
29
|
+
for (let i = 0; i < argv.length; i++) {
|
|
30
|
+
const arg = argv[i];
|
|
31
|
+
if (!arg.startsWith("--"))
|
|
32
|
+
continue;
|
|
33
|
+
const flag = arg.slice(2);
|
|
34
|
+
const next = argv[i + 1];
|
|
35
|
+
// Boolean flags take no value (next arg is missing or another flag).
|
|
36
|
+
if (flag === "full-page" || flag === "preview") {
|
|
37
|
+
opts[flag] = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (next === undefined || next.startsWith("--")) {
|
|
41
|
+
opts[flag] = true;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
opts[flag] = next;
|
|
45
|
+
i++;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const required = (name) => {
|
|
49
|
+
const v = opts[name];
|
|
50
|
+
if (typeof v !== "string" || v.length === 0) {
|
|
51
|
+
throw new Error(`Missing required flag --${name}. Usage:\n` +
|
|
52
|
+
` apex-mcp screenshot --experiment <id> --variant <key> --url <url> ` +
|
|
53
|
+
`[--viewport desktop|tablet|mobile] [--full-page] [--preview] ` +
|
|
54
|
+
`[--commit <sha>] [--wait <ms>]`);
|
|
55
|
+
}
|
|
56
|
+
return v;
|
|
57
|
+
};
|
|
58
|
+
const viewport = typeof opts.viewport === "string" ? opts.viewport : "desktop";
|
|
59
|
+
if (!(viewport in VIEWPORT_WIDTHS)) {
|
|
60
|
+
throw new Error(`Invalid --viewport "${viewport}". Must be one of: desktop, tablet, mobile.`);
|
|
61
|
+
}
|
|
62
|
+
let wait;
|
|
63
|
+
if (typeof opts.wait === "string") {
|
|
64
|
+
wait = Number(opts.wait);
|
|
65
|
+
if (!Number.isFinite(wait) || wait < 0) {
|
|
66
|
+
throw new Error(`Invalid --wait "${opts.wait}". Must be a non-negative number of ms.`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
experiment: required("experiment"),
|
|
71
|
+
variant: required("variant"),
|
|
72
|
+
url: required("url"),
|
|
73
|
+
viewport,
|
|
74
|
+
fullPage: opts["full-page"] === true,
|
|
75
|
+
preview: opts.preview === true,
|
|
76
|
+
commit: typeof opts.commit === "string" ? opts.commit : undefined,
|
|
77
|
+
wait,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/** Lazily load Playwright; print an actionable hint + exit 1 if it's missing. */
|
|
81
|
+
async function loadPlaywright() {
|
|
82
|
+
// Non-literal specifier so tsc does NOT statically resolve (and thus require)
|
|
83
|
+
// the playwright types at build time — it stays a true runtime-only import.
|
|
84
|
+
const specifier = "playwright";
|
|
85
|
+
try {
|
|
86
|
+
return (await import(specifier));
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
const code = err?.code;
|
|
90
|
+
const isMissing = code === "MODULE_NOT_FOUND" ||
|
|
91
|
+
code === "ERR_MODULE_NOT_FOUND" ||
|
|
92
|
+
/Cannot find (module|package) ['"]playwright/.test(String(err?.message));
|
|
93
|
+
if (isMissing) {
|
|
94
|
+
console.error("Playwright is required for the screenshot CLI. Install it with: " +
|
|
95
|
+
"npm i -D playwright && npx playwright install chromium");
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Append the Apex preview params so the variant renders on the page. */
|
|
102
|
+
function applyPreview(url, exp, variant) {
|
|
103
|
+
const sep = url.includes("?") ? "&" : "?";
|
|
104
|
+
return (`${url}${sep}_apex_preview=${encodeURIComponent(variant)}` +
|
|
105
|
+
`&_apex_exp=${encodeURIComponent(exp)}`);
|
|
106
|
+
}
|
|
107
|
+
export async function runScreenshotCli(argv) {
|
|
108
|
+
let opts;
|
|
109
|
+
try {
|
|
110
|
+
opts = parseArgs(argv);
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
console.error(err.message);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
const targetUrl = opts.preview
|
|
117
|
+
? applyPreview(opts.url, opts.experiment, opts.variant)
|
|
118
|
+
: opts.url;
|
|
119
|
+
const { chromium } = await loadPlaywright();
|
|
120
|
+
let browser;
|
|
121
|
+
try {
|
|
122
|
+
browser = await chromium.launch({ headless: true });
|
|
123
|
+
const page = await browser.newPage();
|
|
124
|
+
await page.setViewportSize({
|
|
125
|
+
width: VIEWPORT_WIDTHS[opts.viewport],
|
|
126
|
+
height: VIEWPORT_HEIGHTS[opts.viewport],
|
|
127
|
+
});
|
|
128
|
+
console.error(`[apex] Capturing ${targetUrl} (${opts.viewport})…`);
|
|
129
|
+
await page.goto(targetUrl, { waitUntil: "networkidle", timeout: 60_000 });
|
|
130
|
+
if (opts.wait && opts.wait > 0) {
|
|
131
|
+
await page.waitForTimeout(opts.wait);
|
|
132
|
+
}
|
|
133
|
+
const buffer = await page.screenshot({ fullPage: opts.fullPage, type: "png" });
|
|
134
|
+
const imageBase64 = Buffer.from(buffer).toString("base64");
|
|
135
|
+
console.error("[apex] Uploading screenshot to Apex…");
|
|
136
|
+
const res = await apiPost(`/api/experiments/${encodeURIComponent(opts.experiment)}/assets`, {
|
|
137
|
+
variantKey: opts.variant,
|
|
138
|
+
source: "agent",
|
|
139
|
+
viewport: opts.viewport,
|
|
140
|
+
imageBase64,
|
|
141
|
+
format: "png",
|
|
142
|
+
label: `Captured by CLI (${opts.viewport})`,
|
|
143
|
+
...(opts.commit ? { commitSha: opts.commit } : {}),
|
|
144
|
+
});
|
|
145
|
+
const assetUrl = res?.data?.url;
|
|
146
|
+
if (assetUrl) {
|
|
147
|
+
console.log(assetUrl);
|
|
148
|
+
console.error("[apex] Done. This screenshot now appears on the experiment's dashboard " +
|
|
149
|
+
"card and in its screenshot gallery.");
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.error("[apex] Upload succeeded but the response did not include an asset URL.");
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
console.error(`[apex] Screenshot failed: ${err.message}`);
|
|
157
|
+
process.exitCode = 1;
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
if (browser) {
|
|
161
|
+
try {
|
|
162
|
+
await browser.close();
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
/* best-effort */
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=screenshot-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot-cli.js","sourceRoot":"","sources":["../src/screenshot-cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apex-inc/mcp-server",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.9",
|
|
4
4
|
"description": "MCP server for Apex — currently in private beta.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,6 +30,9 @@
|
|
|
30
30
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
31
31
|
"zod": "^3.25.23"
|
|
32
32
|
},
|
|
33
|
+
"optionalDependencies": {
|
|
34
|
+
"playwright": "^1.45.0"
|
|
35
|
+
},
|
|
33
36
|
"devDependencies": {
|
|
34
37
|
"@types/node": "^20",
|
|
35
38
|
"typescript": "^5"
|