@framedash/mcp-server 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -2
- package/dist/helpers.d.ts +12 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +22 -0
- package/dist/helpers.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +3 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -5
- package/dist/server.js.map +1 -1
- package/dist/tools/alerts.js +2 -2
- package/dist/tools/alerts.js.map +1 -1
- package/dist/tools/analytics.d.ts.map +1 -1
- package/dist/tools/analytics.js +48 -19
- package/dist/tools/analytics.js.map +1 -1
- package/dist/tools/builds.d.ts +4 -0
- package/dist/tools/builds.d.ts.map +1 -0
- package/dist/tools/builds.js +74 -0
- package/dist/tools/builds.js.map +1 -0
- package/dist/tools/project.d.ts.map +1 -1
- package/dist/tools/project.js +4 -4
- package/dist/tools/project.js.map +1 -1
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +2 -1
- package/dist/tools/query.js.map +1 -1
- package/dist/tools/schemas.d.ts +4 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +7 -0
- package/dist/tools/schemas.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @framedash/mcp-server
|
|
2
2
|
|
|
3
|
-
MCP (Model Context Protocol) server for the Framedash game telemetry platform.
|
|
3
|
+
MCP (Model Context Protocol) server for the Framedash game telemetry platform. This server provides 14 read-only tools over stdio and 4 resources for querying analytics data from LLM-powered tools. Version 0.2.0 provides 12 tools and does not include the build comparison tools or structured heatmap context.
|
|
4
4
|
|
|
5
5
|
## Setup
|
|
6
6
|
|
|
@@ -69,6 +69,24 @@ require an explicit `project_id` argument per call.
|
|
|
69
69
|
| `list_content` | List content registry entries |
|
|
70
70
|
| `list_alerts` | List alert rules |
|
|
71
71
|
| `get_alert_history` | Alert trigger history |
|
|
72
|
+
| `list_builds` | List builds or find an exact build ID |
|
|
73
|
+
| `compare_builds` | Compare two builds without applying a CI threshold |
|
|
74
|
+
|
|
75
|
+
### Build comparison and heatmap context
|
|
76
|
+
|
|
77
|
+
When the hosted OAuth endpoint runs this server revision, it exposes 13 tools: `query` is omitted because OAuth cannot grant `data:admin`. Hosted availability depends on the deployed server revision.
|
|
78
|
+
|
|
79
|
+
| Tool | Scope | Input / output |
|
|
80
|
+
|------|-------|----------------|
|
|
81
|
+
| `list_builds` | `analytics:read` | Optional `project_id`, `days` (7/14/30/90; default 30), exact `build_id`, `fresh` (default false). Returns the existing builds payload; an exact build avoids the newest-50 list cap. |
|
|
82
|
+
| `compare_builds` | `analytics:read` | Required distinct `baseline`/`candidate` build IDs; optional `project_id`, `days` (7/14/30/90; default 30), `map_id`, `platform`, `fresh` (default false). Returns the existing P50/P95 comparison payload and sample/session counts; does not apply a CI threshold. |
|
|
83
|
+
| `get_heatmap` context | `analytics:read` | Legacy text remains unchanged. `structuredContent.cells` contains the same complete cells as the legacy JSON prefix; `total`, `returned`, and `truncated` describe response truncation. `context` records filters, world-coordinate units, metric units, and unknown axis/null causes; use `list_maps.upAxis` to determine X/Z versus X/Y. |
|
|
84
|
+
|
|
85
|
+
Heatmap response truncation is a presentation limit, not ingestion readiness or missing telemetry. Legacy text retains its existing 51,200 UTF-16-unit limit and, on overflow, at most 50 complete cells. Structured cells are recovered from that bounded JSON prefix without serializing the full source array again. If one cell exceeds the text limit and only a partial cell is displayed, structured cells are empty and `returned: 0, truncated: true` makes that omission explicit. `total` is the source cell count.
|
|
86
|
+
|
|
87
|
+
Metadata filter strings (`project_id`, `map_id`, `event_name`) are limited to 256 UTF-16 units. Names in `context.truncated_fields` identify prefix values; the actual API request uses the full filter. Metadata truncation is separate from cell truncation. Including both text and structured representations, the JSON-encoded tool result stays within `6 * 51,200 + 8,192 = 315,392` bytes: each bounded representation needs at most three UTF-8 bytes per UTF-16 unit, and 8 KiB covers the fixed context, capped filter values and result fields. JSON-RPC envelope IDs are client-controlled and outside this tool-result budget.
|
|
88
|
+
|
|
89
|
+
`compare_builds.isRegression` reports direction, not a threshold breach or statistical certainty. Sample/session counts do not verify expected samples or completed ingestion. Map/platform filters change the population; `load_time_ms` is unavailable with a map filter. Null metric causes remain unknown. The existing CLI `framedash perf-diff --threshold <pct> --fail-on-regression` provides an opt-in CI gate without requiring raw SQL access.
|
|
72
90
|
|
|
73
91
|
## Resources
|
|
74
92
|
|
|
@@ -95,7 +113,7 @@ pnpm --filter @framedash/mcp-server... build
|
|
|
95
113
|
pnpm --filter @framedash/mcp-server test
|
|
96
114
|
```
|
|
97
115
|
|
|
98
|
-
|
|
116
|
+
The trailing `...` selects the MCP package plus its workspace
|
|
99
117
|
dependencies, including `@framedash/api-client`, before compiling from a clean
|
|
100
118
|
checkout.
|
|
101
119
|
|
package/dist/helpers.d.ts
CHANGED
|
@@ -7,6 +7,18 @@ export declare function textResult(data: unknown): {
|
|
|
7
7
|
text: string;
|
|
8
8
|
}[];
|
|
9
9
|
};
|
|
10
|
+
export declare function structuredArrayResult(data: unknown): {
|
|
11
|
+
structuredContent: {
|
|
12
|
+
cells: unknown[];
|
|
13
|
+
total: number | null;
|
|
14
|
+
returned: number;
|
|
15
|
+
truncated: boolean;
|
|
16
|
+
};
|
|
17
|
+
content: {
|
|
18
|
+
type: "text";
|
|
19
|
+
text: string;
|
|
20
|
+
}[];
|
|
21
|
+
};
|
|
10
22
|
export declare function getErrorMessage(err: unknown): string;
|
|
11
23
|
export declare function errorResult(err: unknown): {
|
|
12
24
|
content: {
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA4KvD,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAM9C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO;;;;;EAEvC;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO;;;;;;EAKvC;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAMpF"}
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA4KvD,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAM9C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO;;;;;EAEvC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;EAqBlD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO;;;;;;EAKvC;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAMpF"}
|
package/dist/helpers.js
CHANGED
|
@@ -155,6 +155,28 @@ export function truncate(data) {
|
|
|
155
155
|
export function textResult(data) {
|
|
156
156
|
return { content: [{ type: "text", text: truncate(data) }] };
|
|
157
157
|
}
|
|
158
|
+
export function structuredArrayResult(data) {
|
|
159
|
+
const result = textResult(data);
|
|
160
|
+
const text = result.content[0]?.text ?? "null";
|
|
161
|
+
const footerStart = text.lastIndexOf(TRUNCATED_FOOTER_PREFIX);
|
|
162
|
+
const rowsTruncated = footerStart >= 0 && text.endsWith(TRUNCATED_FOOTER_SUFFIX);
|
|
163
|
+
const partial = text.endsWith(SIMPLE_TRUNCATED_FOOTER);
|
|
164
|
+
// Recover only the bounded legacy JSON, so structured output cannot revive omitted rows.
|
|
165
|
+
const decoded = JSON.parse(partial ? "null" : rowsTruncated ? text.slice(0, footerStart) : text);
|
|
166
|
+
const cells = Array.isArray(decoded) ? decoded : [];
|
|
167
|
+
const truncated = rowsTruncated || partial;
|
|
168
|
+
const total = truncated
|
|
169
|
+
? Array.isArray(data)
|
|
170
|
+
? data.length
|
|
171
|
+
: null
|
|
172
|
+
: Array.isArray(decoded)
|
|
173
|
+
? cells.length
|
|
174
|
+
: null;
|
|
175
|
+
return {
|
|
176
|
+
...result,
|
|
177
|
+
structuredContent: { cells, total, returned: cells.length, truncated },
|
|
178
|
+
};
|
|
179
|
+
}
|
|
158
180
|
export function getErrorMessage(err) {
|
|
159
181
|
return err instanceof Error ? err.message : String(err);
|
|
160
182
|
}
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { StrictStdioServerTransport } from "./transport.js";
|
|
|
7
7
|
// the advertised server version cannot drift from the published package.
|
|
8
8
|
const VERSION = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"))
|
|
9
9
|
.version;
|
|
10
|
-
const apiKey = process.env.FRAMEDASH_API_KEY;
|
|
10
|
+
const apiKey = process.env.FRAMEDASH_API_KEY?.trim();
|
|
11
11
|
if (!apiKey) {
|
|
12
12
|
process.stderr.write("Error: FRAMEDASH_API_KEY environment variable is required. Create an API key on your project's API Keys page at https://app.framedash.dev and set FRAMEDASH_API_KEY. Docs: https://docs.framedash.dev\n");
|
|
13
13
|
process.exit(1);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,+EAA+E;AAC/E,yEAAyE;AACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;KAC3F,OAAiB,CAAC;AAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,+EAA+E;AAC/E,yEAAyE;AACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;KAC3F,OAAiB,CAAC;AAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;AACrD,IAAI,CAAC,MAAM,EAAE,CAAC;IACb,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,yMAAyM,CACzM,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;AACzD,IAAI,CAAC,SAAS,EAAE,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,sGAAsG,CACtG,CAAC;AACH,CAAC;AACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,2BAA2B,CAAC;AAE9E,IAAI,CAAC;IACJ,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC5B,OAAO;QACP,MAAM;QACN,SAAS;QACT,cAAc,EAAE,OAAO;QACvB,OAAO,CAAC,GAAG;YACV,MAAM,GAAG,CAAC;QACX,CAAC;KACD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,0BAA0B,EAAE,CAAC;IACnD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,GAAG,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -6,5 +6,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
6
6
|
* JSON at build time) so it cannot drift from the published package. Keeping the fs read OUT of
|
|
7
7
|
* this module makes it bundler-safe for the Next.js remote endpoint.
|
|
8
8
|
*/
|
|
9
|
-
export declare function createServer(apiClient: ApiClient, version: string
|
|
9
|
+
export declare function createServer(apiClient: ApiClient, version: string, options?: {
|
|
10
|
+
queryEnabled?: boolean;
|
|
11
|
+
}): McpServer;
|
|
10
12
|
//# sourceMappingURL=server.d.ts.map
|
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,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE;;;;;GAKG;AACH,wBAAgB,YAAY,CAC3B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,SAAS,CAWX"}
|
package/dist/server.js
CHANGED
|
@@ -2,6 +2,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import { registerResources } from "./resources.js";
|
|
3
3
|
import { registerAlertTools } from "./tools/alerts.js";
|
|
4
4
|
import { registerAnalyticsTools } from "./tools/analytics.js";
|
|
5
|
+
import { registerBuildTools } from "./tools/builds.js";
|
|
5
6
|
import { registerProjectTools } from "./tools/project.js";
|
|
6
7
|
import { registerQueryTools } from "./tools/query.js";
|
|
7
8
|
/**
|
|
@@ -10,12 +11,12 @@ import { registerQueryTools } from "./tools/query.js";
|
|
|
10
11
|
* JSON at build time) so it cannot drift from the published package. Keeping the fs read OUT of
|
|
11
12
|
* this module makes it bundler-safe for the Next.js remote endpoint.
|
|
12
13
|
*/
|
|
13
|
-
export function createServer(apiClient, version) {
|
|
14
|
-
const server = new McpServer({ name: "framedash", version },
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
registerQueryTools(server, apiClient);
|
|
14
|
+
export function createServer(apiClient, version, options = {}) {
|
|
15
|
+
const server = new McpServer({ name: "framedash", version }, { maxToolInputElements: 16 });
|
|
16
|
+
if (options.queryEnabled !== false)
|
|
17
|
+
registerQueryTools(server, apiClient);
|
|
18
18
|
registerAnalyticsTools(server, apiClient);
|
|
19
|
+
registerBuildTools(server, apiClient);
|
|
19
20
|
registerProjectTools(server, apiClient);
|
|
20
21
|
registerAlertTools(server, apiClient);
|
|
21
22
|
registerResources(server, apiClient);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC3B,SAAoB,EACpB,OAAe,EACf,UAAsC,EAAE;IAExC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAAC;IAE3F,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK;QAAE,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1E,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AACf,CAAC"}
|
package/dist/tools/alerts.js
CHANGED
|
@@ -3,7 +3,7 @@ import { errorResult, projectClient, textResult } from "../helpers.js";
|
|
|
3
3
|
export function registerAlertTools(server, apiClient) {
|
|
4
4
|
server.registerTool("list_alerts", {
|
|
5
5
|
title: "List Alerts",
|
|
6
|
-
description: "List all alert rules in the project.",
|
|
6
|
+
description: "List all alert rules in the project. Requires analytics:read.",
|
|
7
7
|
inputSchema: {
|
|
8
8
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
9
9
|
},
|
|
@@ -19,7 +19,7 @@ export function registerAlertTools(server, apiClient) {
|
|
|
19
19
|
});
|
|
20
20
|
server.registerTool("get_alert_history", {
|
|
21
21
|
title: "Get Alert History",
|
|
22
|
-
description: "Get alert event history (trigger/resolve events).",
|
|
22
|
+
description: "Get alert event history (trigger/resolve events). Requires analytics:read.",
|
|
23
23
|
inputSchema: {
|
|
24
24
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
25
25
|
limit: z
|
package/dist/tools/alerts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../src/tools/alerts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,SAAoB;IACzE,MAAM,CAAC,YAAY,CAClB,aAAa,EACb;QACC,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../src/tools/alerts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,SAAoB;IACzE,MAAM,CAAC,YAAY,CAClB,aAAa,EACb;QACC,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SACpF;KACD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACd,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACF,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,mBAAmB,EACnB;QACC,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,4EAA4E;QACzF,WAAW,EAAE;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACpF,KAAK,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,mCAAmC,CAAC;SAC/C;KACD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACd,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACF,CAAC,CACD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EAMd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EAMd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA0LpF"}
|
package/dist/tools/analytics.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { buildDashboardPath, buildFunnelPath, buildHeatmapPath, buildInsightsPath, buildRetentionPath, } from "@framedash/api-client";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { errorResult, projectClient, textResult } from "../helpers.js";
|
|
3
|
+
import { errorResult, projectClient, structuredArrayResult, textResult } from "../helpers.js";
|
|
4
|
+
import { ANALYTICS_DAYS, allowedIntEnum } from "./schemas.js";
|
|
4
5
|
// The REST API rejects values outside these sets with HTTP 400. They mirror the
|
|
5
6
|
// web app's constants (ALLOWED_DAYS / ALLOWED_LIMITS in lib/analytics/constants,
|
|
6
7
|
// ALLOWED_WINDOW_SECONDS in the funnels route, VALID_DAYS / VALID_CELL_SIZES in
|
|
@@ -8,25 +9,15 @@ import { errorResult, projectClient, textResult } from "../helpers.js";
|
|
|
8
9
|
// them, so keep these in sync if the API changes. Constraining the input schema
|
|
9
10
|
// lets the MCP client reject invalid values up front instead of after a server
|
|
10
11
|
// round-trip.
|
|
11
|
-
const ANALYTICS_DAYS = [7, 14, 30, 90];
|
|
12
12
|
const INSIGHTS_LIMITS = [10, 20, 50];
|
|
13
13
|
const FUNNEL_WINDOWS = [3600, 21600, 86400, 604800];
|
|
14
14
|
const HEATMAP_DAYS = [1, 7, 14, 30];
|
|
15
15
|
const HEATMAP_CELL_SIZES = [5, 10, 25, 50];
|
|
16
|
-
|
|
17
|
-
* Built from z.union(z.literal(...)) rather than z.number().refine(...) so the allowed values
|
|
18
|
-
* serialize into the JSON Schema the MCP SDK publishes -- `refine` runs opaque JS and is
|
|
19
|
-
* dropped by the schema converter, which would leave the LLM unable to see the constraint and
|
|
20
|
-
* reject out-of-set values before a server round-trip.
|
|
21
|
-
*/
|
|
22
|
-
function allowedIntEnum(values, description) {
|
|
23
|
-
const literals = values.map((v) => z.literal(v));
|
|
24
|
-
return z.union(literals).optional().describe(description);
|
|
25
|
-
}
|
|
16
|
+
const CONTEXT_FIELD_LIMIT = 256;
|
|
26
17
|
export function registerAnalyticsTools(server, apiClient) {
|
|
27
18
|
server.registerTool("get_dashboard", {
|
|
28
19
|
title: "Get Dashboard",
|
|
29
|
-
description: "Get project dashboard metrics (KPIs, daily active users, top events).",
|
|
20
|
+
description: "Get project dashboard metrics (KPIs, daily active users, top events). Requires analytics:read.",
|
|
30
21
|
inputSchema: {
|
|
31
22
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
32
23
|
days: allowedIntEnum(ANALYTICS_DAYS, "Time period: 7, 14, 30, or 90 days (default 30)"),
|
|
@@ -43,7 +34,7 @@ export function registerAnalyticsTools(server, apiClient) {
|
|
|
43
34
|
});
|
|
44
35
|
server.registerTool("get_retention", {
|
|
45
36
|
title: "Get Retention",
|
|
46
|
-
description: "Get player retention cohort analysis.",
|
|
37
|
+
description: "Get player retention cohort analysis. Requires analytics:read.",
|
|
47
38
|
inputSchema: {
|
|
48
39
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
49
40
|
days: allowedIntEnum(ANALYTICS_DAYS, "Time period: 7, 14, 30, or 90 days (default 30)"),
|
|
@@ -60,7 +51,7 @@ export function registerAnalyticsTools(server, apiClient) {
|
|
|
60
51
|
});
|
|
61
52
|
server.registerTool("get_funnel", {
|
|
62
53
|
title: "Get Funnel",
|
|
63
|
-
description: "Analyze event funnels. Requires 2-8 event names as steps.",
|
|
54
|
+
description: "Analyze event funnels. Requires analytics:read and 2-8 event names as steps.",
|
|
64
55
|
inputSchema: {
|
|
65
56
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
66
57
|
steps: z.string().describe("Comma-separated event names (2-8 steps)"),
|
|
@@ -79,7 +70,7 @@ export function registerAnalyticsTools(server, apiClient) {
|
|
|
79
70
|
});
|
|
80
71
|
server.registerTool("get_insights", {
|
|
81
72
|
title: "Get Insights",
|
|
82
|
-
description: "Get aggregated insights for a metric grouped by a dimension.",
|
|
73
|
+
description: "Get aggregated insights for a metric grouped by a dimension. Requires analytics:read. Results are the top groups, not an exact-build event breakdown; use list_builds/compare_builds for readonly build comparisons.",
|
|
83
74
|
inputSchema: {
|
|
84
75
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
85
76
|
metric: z.string().describe("Metric to aggregate: count or unique_players"),
|
|
@@ -106,14 +97,14 @@ export function registerAnalyticsTools(server, apiClient) {
|
|
|
106
97
|
});
|
|
107
98
|
server.registerTool("get_heatmap", {
|
|
108
99
|
title: "Get Heatmap",
|
|
109
|
-
description:
|
|
100
|
+
description: "Get heatmap grid data for a map (analytics:read). Legacy text is unchanged; structuredContent.cells contains the same complete cell subset, with total/returned/truncated describing response truncation, not ingestion readiness. Context filter strings are prefixes when listed in context.truncated_fields. Coordinates and cell_size use engine world units, not image pixels. Consult list_maps for upAxis/bounds: Y-up maps (Unity, Godot) use x/z and omit y; otherwise x/y. Null metric causes are unknown.",
|
|
110
101
|
inputSchema: {
|
|
111
102
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
112
103
|
map_id: z
|
|
113
104
|
.string()
|
|
114
105
|
.describe("Map ID to query (accepts the row UUID or slug from list_maps)"),
|
|
115
106
|
cell_size: allowedIntEnum(HEATMAP_CELL_SIZES, "Cell size: 5, 10, 25, or 50 (default 25)"),
|
|
116
|
-
days: allowedIntEnum(HEATMAP_DAYS, "Time period: 1, 7, 14, or 30 days (default
|
|
107
|
+
days: allowedIntEnum(HEATMAP_DAYS, "Time period: 1, 7, 14, or 30 days (default 30)"),
|
|
117
108
|
event_name: z.string().optional().describe("Filter by event name"),
|
|
118
109
|
},
|
|
119
110
|
}, async (args) => {
|
|
@@ -126,7 +117,45 @@ export function registerAnalyticsTools(server, apiClient) {
|
|
|
126
117
|
eventName: args.event_name,
|
|
127
118
|
coordinates: "world",
|
|
128
119
|
})));
|
|
129
|
-
|
|
120
|
+
const result = structuredArrayResult(data);
|
|
121
|
+
const filters = {
|
|
122
|
+
project_id: client.currentProjectId,
|
|
123
|
+
map_id: args.map_id,
|
|
124
|
+
event_name: args.event_name || null,
|
|
125
|
+
};
|
|
126
|
+
const truncatedFields = Object.entries(filters)
|
|
127
|
+
.filter(([, value]) => value !== null && value.length > CONTEXT_FIELD_LIMIT)
|
|
128
|
+
.map(([field]) => field);
|
|
129
|
+
return {
|
|
130
|
+
...result,
|
|
131
|
+
structuredContent: {
|
|
132
|
+
...result.structuredContent,
|
|
133
|
+
context: {
|
|
134
|
+
...Object.fromEntries(Object.entries(filters).map(([field, value]) => [
|
|
135
|
+
field,
|
|
136
|
+
value?.slice(0, CONTEXT_FIELD_LIMIT) ?? null,
|
|
137
|
+
])),
|
|
138
|
+
truncated_fields: truncatedFields,
|
|
139
|
+
days: args.days ?? 30,
|
|
140
|
+
cell_size: args.cell_size ?? 25,
|
|
141
|
+
coordinates: "world",
|
|
142
|
+
up_axis: null,
|
|
143
|
+
axis_source: "list_maps.upAxis",
|
|
144
|
+
units: {
|
|
145
|
+
coordinates: "engine world units",
|
|
146
|
+
cell_size: "engine world units",
|
|
147
|
+
weight: "events",
|
|
148
|
+
event_count: "events",
|
|
149
|
+
avg_fps: "frames/s",
|
|
150
|
+
avg_frame_time: "ms",
|
|
151
|
+
avg_gpu_time: "ms",
|
|
152
|
+
avg_memory: "MiB",
|
|
153
|
+
avg_mem_vram: "MiB",
|
|
154
|
+
},
|
|
155
|
+
null_reason: "unknown",
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
};
|
|
130
159
|
}
|
|
131
160
|
catch (err) {
|
|
132
161
|
return errorResult(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builds.d.ts","sourceRoot":"","sources":["../../src/tools/builds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA0C,MAAM,uBAAuB,CAAC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwBzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA4EhF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { buildBuildComparePath, buildBuildsPath } from "@framedash/api-client";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { errorResult, projectClient, textResult } from "../helpers.js";
|
|
4
|
+
import { ANALYTICS_DAYS, allowedIntEnum } from "./schemas.js";
|
|
5
|
+
const days = allowedIntEnum(ANALYTICS_DAYS, "Time period: 7, 14, 30, or 90 days (default 30)");
|
|
6
|
+
// Zod's max counts code points; the REST filter limit counts UTF-16 units.
|
|
7
|
+
const filter = z
|
|
8
|
+
.string()
|
|
9
|
+
.trim()
|
|
10
|
+
.min(1)
|
|
11
|
+
.max(256)
|
|
12
|
+
.refine((value) => value.length <= 256 && [...value].every((char) => char.charCodeAt(0) >= 32), "Use 1-256 characters without control characters");
|
|
13
|
+
const projectId = z.string().uuid().optional().describe("Override the default project ID");
|
|
14
|
+
const fresh = z
|
|
15
|
+
.boolean()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Bypass the aggregation cache (default false); useful when checking newly ingested samples");
|
|
18
|
+
export function registerBuildTools(server, apiClient) {
|
|
19
|
+
server.registerTool("list_builds", {
|
|
20
|
+
title: "List Builds",
|
|
21
|
+
description: "List builds and event/session/player counts. Requires analytics:read. By default returns the newest 50 builds; use build_id for an exact older build. Event counts are not per-metric sample counts or proof that ingestion is complete.",
|
|
22
|
+
annotations: { readOnlyHint: true },
|
|
23
|
+
inputSchema: {
|
|
24
|
+
project_id: projectId,
|
|
25
|
+
days,
|
|
26
|
+
build_id: filter
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Exact SDK-reported build_id; avoids the newest-50 list cap"),
|
|
29
|
+
fresh,
|
|
30
|
+
},
|
|
31
|
+
}, async (args) => {
|
|
32
|
+
try {
|
|
33
|
+
const client = projectClient(apiClient, args.project_id);
|
|
34
|
+
return textResult(await client.get(client.projectPath(buildBuildsPath({ days: args.days, buildId: args.build_id, fresh: args.fresh }))));
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
return errorResult(err);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
server.registerTool("compare_builds", {
|
|
41
|
+
title: "Compare Builds",
|
|
42
|
+
description: "Compare two builds using the readonly builds/compare API (analytics:read; no SQL/admin access required). Returns P50/P95, sample/session counts and diffs. isRegression reports direction only, not a threshold breach or statistical certainty. Null metrics have an unknown cause; do not infer unsupported SDKs. Verify expected samples and ingestion readiness separately. Unfiltered comparisons include the whole build; map/platform filters change the population. A map filter excludes map_load events, so load_time_ms is unavailable under that filter. For an opt-in CI gate use framedash perf-diff --threshold <pct> --fail-on-regression.",
|
|
43
|
+
annotations: { readOnlyHint: true },
|
|
44
|
+
inputSchema: {
|
|
45
|
+
project_id: projectId,
|
|
46
|
+
baseline: filter.describe("Known-good SDK-reported build_id"),
|
|
47
|
+
candidate: filter.describe("Different SDK-reported build_id to compare"),
|
|
48
|
+
days,
|
|
49
|
+
map_id: filter
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Restrict to one spatial map_id; excludes map_load samples"),
|
|
52
|
+
platform: filter.optional().describe("Restrict to one platform"),
|
|
53
|
+
fresh,
|
|
54
|
+
},
|
|
55
|
+
}, async (args) => {
|
|
56
|
+
try {
|
|
57
|
+
if (args.baseline === args.candidate)
|
|
58
|
+
throw new Error("baseline and candidate must be different build IDs");
|
|
59
|
+
const client = projectClient(apiClient, args.project_id);
|
|
60
|
+
return textResult(await client.get(client.projectPath(buildBuildComparePath({
|
|
61
|
+
baseline: args.baseline,
|
|
62
|
+
candidate: args.candidate,
|
|
63
|
+
days: args.days,
|
|
64
|
+
mapId: args.map_id,
|
|
65
|
+
platform: args.platform,
|
|
66
|
+
fresh: args.fresh,
|
|
67
|
+
}))));
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return errorResult(err);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=builds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builds.js","sourceRoot":"","sources":["../../src/tools/builds.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAgFlF"}
|
package/dist/tools/project.js
CHANGED
|
@@ -4,7 +4,7 @@ import { errorResult, projectClient, textResult } from "../helpers.js";
|
|
|
4
4
|
export function registerProjectTools(server, apiClient) {
|
|
5
5
|
server.registerTool("list_projects", {
|
|
6
6
|
title: "List Projects",
|
|
7
|
-
description: "
|
|
7
|
+
description: "List projects accessible to the current credential. Requires analytics:read.",
|
|
8
8
|
}, async () => {
|
|
9
9
|
try {
|
|
10
10
|
const data = await apiClient.get("/api/v1/projects");
|
|
@@ -16,7 +16,7 @@ export function registerProjectTools(server, apiClient) {
|
|
|
16
16
|
});
|
|
17
17
|
server.registerTool("get_project_status", {
|
|
18
18
|
title: "Get Project Status",
|
|
19
|
-
description: "Get the status of a project (event counts, last event time, etc.).",
|
|
19
|
+
description: "Get the status of a project (event counts, last event time, etc.). Requires analytics:read.",
|
|
20
20
|
inputSchema: {
|
|
21
21
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
22
22
|
},
|
|
@@ -32,7 +32,7 @@ export function registerProjectTools(server, apiClient) {
|
|
|
32
32
|
});
|
|
33
33
|
server.registerTool("list_maps", {
|
|
34
34
|
title: "List Maps",
|
|
35
|
-
description: "List all maps in the project.",
|
|
35
|
+
description: "List all maps in the project, including upAxis and bounds for interpreting heatmap coordinates. Requires analytics:read.",
|
|
36
36
|
inputSchema: {
|
|
37
37
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
38
38
|
},
|
|
@@ -48,7 +48,7 @@ export function registerProjectTools(server, apiClient) {
|
|
|
48
48
|
});
|
|
49
49
|
server.registerTool("list_content", {
|
|
50
50
|
title: "List Content",
|
|
51
|
-
description: "List content registry entries (event names, display labels, etc.).",
|
|
51
|
+
description: "List content registry entries (event names, display labels, etc.). Requires analytics:read.",
|
|
52
52
|
inputSchema: {
|
|
53
53
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
|
54
54
|
type: z.string().optional().describe("Filter by content type"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,SAAoB;IAC3E,MAAM,CAAC,YAAY,CAClB,eAAe,EACf;QACC,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAkChF"}
|
package/dist/tools/query.js
CHANGED
|
@@ -3,7 +3,8 @@ import { errorResult, projectClient, textResult } from "../helpers.js";
|
|
|
3
3
|
export function registerQueryTools(server, apiClient) {
|
|
4
4
|
server.registerTool("query", {
|
|
5
5
|
title: "Query Events",
|
|
6
|
-
description: "Execute
|
|
6
|
+
description: "Execute SELECT-only SQL against the ClickHouse events table. Requires an API key with data:admin; analytics:read alone and OAuth tokens cannot use this tool. For readonly access use list_builds, compare_builds, or get_insights instead; do not request elevated credentials for those tasks. Returns up to limit rows (default 100, max 1000).",
|
|
7
|
+
annotations: { readOnlyHint: true },
|
|
7
8
|
inputSchema: {
|
|
8
9
|
sql: z.string().describe("SQL query to execute"),
|
|
9
10
|
project_id: z.string().uuid().optional().describe("Override the default project ID"),
|
package/dist/tools/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,SAAoB;IACzE,MAAM,CAAC,YAAY,CAClB,OAAO,EACP;QACC,KAAK,EAAE,cAAc;QACrB,WAAW,EACV,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,SAAoB;IACzE,MAAM,CAAC,YAAY,CAClB,OAAO,EACP;QACC,KAAK,EAAE,cAAc;QACrB,WAAW,EACV,oVAAoV;QACrV,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACZ,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAChD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACpF,KAAK,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;SAC9C;KACD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACd,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC/C,UAAU,EAAE,MAAM,CAAC,gBAAgB;gBACnC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG;aACxB,CAAC,CAAC;YACH,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACF,CAAC,CACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const ANALYTICS_DAYS: readonly [7, 14, 30, 90];
|
|
3
|
+
export declare function allowedIntEnum<T extends number>(values: readonly [T, T, ...T[]], description: string): z.ZodOptional<z.ZodUnion<[z.ZodLiteral<T>, z.ZodLiteral<T>, ...z.ZodLiteral<T>[]]>>;
|
|
4
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc,0BAA2B,CAAC;AAEvD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC9C,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAC/B,WAAW,EAAE,MAAM,uFAQnB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const ANALYTICS_DAYS = [7, 14, 30, 90];
|
|
3
|
+
export function allowedIntEnum(values, description) {
|
|
4
|
+
const literals = values.map((value) => z.literal(value));
|
|
5
|
+
return z.union(literals).optional().describe(description);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAEvD,MAAM,UAAU,cAAc,CAC7B,MAA+B,EAC/B,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAItD,CAAC;IACF,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@framedash/mcp-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "MCP server for Framedash game telemetry: query game analytics, heatmaps, perf regressions, retention, and alerts from Claude and other AI agents",
|
|
5
5
|
"mcpName": "io.github.crane-valley/framedash-mcp-server",
|
|
6
6
|
"keywords": [
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"clean": "rm -rf dist"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@framedash/api-client": "0.2.
|
|
53
|
+
"@framedash/api-client": "0.2.1",
|
|
54
54
|
"@modelcontextprotocol/sdk": "^1.32.0",
|
|
55
55
|
"zod": "^4.6.6"
|
|
56
56
|
},
|