@framedash/mcp-server 0.1.1 → 0.1.2

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 CHANGED
@@ -15,7 +15,7 @@ Add to your `claude_desktop_config.json`:
15
15
  "command": "npx",
16
16
  "args": ["@framedash/mcp-server"],
17
17
  "env": {
18
- "FRAMEDASH_API_KEY": "fd_admin_xxx",
18
+ "FRAMEDASH_API_KEY": "fd_xxx",
19
19
  "FRAMEDASH_PROJECT_ID": "your-project-uuid"
20
20
  }
21
21
  }
@@ -34,7 +34,7 @@ Add to your VS Code settings:
34
34
  "command": "npx",
35
35
  "args": ["@framedash/mcp-server"],
36
36
  "env": {
37
- "FRAMEDASH_API_KEY": "fd_admin_xxx",
37
+ "FRAMEDASH_API_KEY": "fd_xxx",
38
38
  "FRAMEDASH_PROJECT_ID": "your-project-uuid"
39
39
  }
40
40
  }
@@ -46,7 +46,7 @@ Add to your VS Code settings:
46
46
 
47
47
  | Variable | Required | Description |
48
48
  |----------|----------|-------------|
49
- | `FRAMEDASH_API_KEY` | Yes | Admin API key (`fd_admin_` prefix) |
49
+ | `FRAMEDASH_API_KEY` | Yes | API key with `analytics:read` for the aggregate tools; the raw `query` tool additionally requires `data:admin` |
50
50
  | `FRAMEDASH_PROJECT_ID` | No | Default project UUID for project-scoped tools |
51
51
  | `FRAMEDASH_BASE_URL` | No | API base URL (default: `https://app.framedash.dev`) |
52
52
 
package/dist/api.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Thin fetch helpers shared by resources.ts and tools/project.ts so each
3
+ * endpoint path is defined in exactly one place.
4
+ *
5
+ * The fetchProject* helpers hit project-scoped routes via
6
+ * ApiClient.projectPath(); fetchContent hits the global /api/v1/content
7
+ * list (path built by the api-client buildContentPath builder) -- pass a
8
+ * projectClient-derived client to scope it via the X-Project-Id header.
9
+ */
10
+ import { type ApiClient } from "@framedash/api-client";
11
+ /**
12
+ * Fetch project status (/api/v1/projects/{id}/status).
13
+ */
14
+ export declare function fetchProjectStatus(client: ApiClient): Promise<unknown>;
15
+ /**
16
+ * Fetch project maps (/api/v1/projects/{id}/maps).
17
+ */
18
+ export declare function fetchProjectMaps(client: ApiClient): Promise<unknown>;
19
+ /**
20
+ * Fetch project-scoped content (/api/v1/projects/{id}/content).
21
+ * Distinct from the global /api/v1/content list (fetchContent below).
22
+ */
23
+ export declare function fetchProjectContent(client: ApiClient): Promise<unknown>;
24
+ /**
25
+ * Fetch content registry entries (/api/v1/content).
26
+ * type is an optional filter.
27
+ */
28
+ export declare function fetchContent(apiClient: ApiClient, opts?: {
29
+ type?: string;
30
+ }): Promise<unknown>;
31
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,uBAAuB,CAAC;AAEzE;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAE5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAE7E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CACjC,SAAS,EAAE,SAAS,EACpB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1B,OAAO,CAAC,OAAO,CAAC,CAElB"}
package/dist/api.js ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Thin fetch helpers shared by resources.ts and tools/project.ts so each
3
+ * endpoint path is defined in exactly one place.
4
+ *
5
+ * The fetchProject* helpers hit project-scoped routes via
6
+ * ApiClient.projectPath(); fetchContent hits the global /api/v1/content
7
+ * list (path built by the api-client buildContentPath builder) -- pass a
8
+ * projectClient-derived client to scope it via the X-Project-Id header.
9
+ */
10
+ import { buildContentPath } from "@framedash/api-client";
11
+ /**
12
+ * Fetch project status (/api/v1/projects/{id}/status).
13
+ */
14
+ export async function fetchProjectStatus(client) {
15
+ return client.get(client.projectPath("status"));
16
+ }
17
+ /**
18
+ * Fetch project maps (/api/v1/projects/{id}/maps).
19
+ */
20
+ export async function fetchProjectMaps(client) {
21
+ return client.get(client.projectPath("maps"));
22
+ }
23
+ /**
24
+ * Fetch project-scoped content (/api/v1/projects/{id}/content).
25
+ * Distinct from the global /api/v1/content list (fetchContent below).
26
+ */
27
+ export async function fetchProjectContent(client) {
28
+ return client.get(client.projectPath("content"));
29
+ }
30
+ /**
31
+ * Fetch content registry entries (/api/v1/content).
32
+ * type is an optional filter.
33
+ */
34
+ export async function fetchContent(apiClient, opts = {}) {
35
+ return apiClient.get(buildContentPath(opts));
36
+ }
37
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAkB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAiB;IACzD,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAiB;IACvD,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAiB;IAC1D,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,SAAoB,EACpB,OAA0B,EAAE;IAE5B,OAAO,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC"}
@@ -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;AAIvD,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAe9C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO;;;;;EAEvC;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO;;;;;;EAKvC;AAID,gEAAgE;AAChE,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,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO;;;;;;EAKvC;AAID,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAMpF"}
package/dist/helpers.js CHANGED
@@ -1,20 +1,156 @@
1
1
  const MAX_RESPONSE_SIZE = 50 * 1024; // 50 KB
2
- /** Truncate large responses to protect LLM context windows. */
3
- export function truncate(data) {
2
+ const ARRAY_TRUNCATION_ROW_LIMIT = 50;
3
+ const ARRAY_OPEN_LENGTH = "[".length;
4
+ const ARRAY_CLOSE = "\n]";
5
+ const ARRAY_CLOSE_LENGTH = ARRAY_CLOSE.length;
6
+ const ARRAY_FIRST_ITEM_SEPARATOR_LENGTH = "\n".length;
7
+ const ARRAY_ITEM_SEPARATOR_LENGTH = ",\n".length;
8
+ const MIN_STRINGIFIED_ARRAY_ITEM_LENGTH = " 0".length;
9
+ const TRUNCATED_FOOTER_PREFIX = "\n\n[truncated: showing first ";
10
+ const TRUNCATED_FOOTER_MIDDLE = " rows of ";
11
+ const TRUNCATED_FOOTER_SUFFIX = " total]";
12
+ const SIMPLE_TRUNCATED_FOOTER = "\n\n[truncated]";
13
+ const TRUNCATED_FOOTER_STATIC_LENGTH = TRUNCATED_FOOTER_PREFIX.length + TRUNCATED_FOOTER_MIDDLE.length + TRUNCATED_FOOTER_SUFFIX.length;
14
+ const FALLBACK_KEEP_LENGTH = Math.max(0, MAX_RESPONSE_SIZE - SIMPLE_TRUNCATED_FOOTER.length);
15
+ function applyArrayItemToJSON(value, index) {
16
+ if (value == null || (typeof value !== "object" && typeof value !== "function"))
17
+ return value;
18
+ const toJSON = value.toJSON;
19
+ if (typeof toJSON !== "function")
20
+ return value;
21
+ return toJSON.call(value, String(index));
22
+ }
23
+ function createArraySlotProxy(source) {
24
+ const proxyTarget = Array.isArray(source) ? new Array(source.length) : {};
25
+ return new Proxy(proxyTarget, {
26
+ get(target, prop) {
27
+ if (prop === "toJSON")
28
+ return undefined;
29
+ if (prop === "length" && Array.isArray(target))
30
+ return target.length;
31
+ return Reflect.get(source, prop, source);
32
+ },
33
+ getOwnPropertyDescriptor(target, prop) {
34
+ if (prop === "toJSON")
35
+ return undefined;
36
+ if (prop === "length" && Array.isArray(target)) {
37
+ return Reflect.getOwnPropertyDescriptor(target, prop);
38
+ }
39
+ const descriptor = Reflect.getOwnPropertyDescriptor(source, prop);
40
+ if (!descriptor)
41
+ return undefined;
42
+ return { ...descriptor, configurable: true };
43
+ },
44
+ ownKeys(target) {
45
+ const keys = new Set([...Reflect.ownKeys(target), ...Reflect.ownKeys(source)]);
46
+ keys.delete("toJSON");
47
+ return [...keys];
48
+ },
49
+ });
50
+ }
51
+ function stringifyArraySlotValue(value) {
52
+ if (value === undefined || typeof value === "function" || typeof value === "symbol")
53
+ return "null";
54
+ if (value == null || (typeof value !== "object" && typeof value !== "function")) {
55
+ return JSON.stringify(value, null, 2) ?? "null";
56
+ }
57
+ const target = value;
58
+ if (typeof target.toJSON !== "function")
59
+ return JSON.stringify(value, null, 2) ?? "null";
60
+ return JSON.stringify(createArraySlotProxy(value), null, 2) ?? "null";
61
+ }
62
+ function stringifyArrayItem(value, index) {
63
+ const text = stringifyArraySlotValue(applyArrayItemToJSON(value, index));
64
+ return text.replace(/^/gm, " ");
65
+ }
66
+ function truncatedArrayFooterLength(keep, total) {
67
+ return TRUNCATED_FOOTER_STATIC_LENGTH + String(keep).length + String(total).length;
68
+ }
69
+ function truncatedArrayFooter(keep, total) {
70
+ return `${TRUNCATED_FOOTER_PREFIX}${keep}${TRUNCATED_FOOTER_MIDDLE}${total}${TRUNCATED_FOOTER_SUFFIX}`;
71
+ }
72
+ function minimumFullArrayLength(fullLength, currentIndex, total) {
73
+ const remainingItems = Math.max(0, total - currentIndex);
74
+ if (remainingItems === 0)
75
+ return fullLength + ARRAY_CLOSE_LENGTH;
76
+ const firstSeparatorLength = currentIndex === 0 ? ARRAY_FIRST_ITEM_SEPARATOR_LENGTH : ARRAY_ITEM_SEPARATOR_LENGTH;
77
+ return (fullLength +
78
+ firstSeparatorLength +
79
+ MIN_STRINGIFIED_ARRAY_ITEM_LENGTH +
80
+ (remainingItems - 1) * (ARRAY_ITEM_SEPARATOR_LENGTH + MIN_STRINGIFIED_ARRAY_ITEM_LENGTH) +
81
+ ARRAY_CLOSE_LENGTH);
82
+ }
83
+ function truncateArrayFallback(firstItem) {
84
+ const text = `[\n${firstItem}`;
85
+ return `${text.slice(0, FALLBACK_KEEP_LENGTH)}${SIMPLE_TRUNCATED_FOOTER}`;
86
+ }
87
+ function stringifyArrayForResponse(data) {
88
+ if (data.length === 0)
89
+ return "[]";
90
+ const fullParts = ["["];
91
+ const prefixParts = ["["];
92
+ let fullLength = ARRAY_OPEN_LENGTH;
93
+ let prefixLength = ARRAY_OPEN_LENGTH;
94
+ let prefixKeep = 0;
95
+ let firstItem = "";
96
+ let canAppendToPrefix = true;
97
+ const total = data.length;
98
+ for (let i = 0; i < total; i++) {
99
+ const cannotFitFullArray = (i >= ARRAY_TRUNCATION_ROW_LIMIT || !canAppendToPrefix) &&
100
+ minimumFullArrayLength(fullLength, i, total) > MAX_RESPONSE_SIZE;
101
+ if (cannotFitFullArray) {
102
+ if (prefixKeep > 0) {
103
+ prefixParts.push(ARRAY_CLOSE);
104
+ return `${prefixParts.join("")}${truncatedArrayFooter(prefixKeep, total)}`;
105
+ }
106
+ return truncateArrayFallback(firstItem);
107
+ }
108
+ const separator = i === 0 ? "\n" : ",\n";
109
+ const item = stringifyArrayItem(data[i], i);
110
+ if (i === 0)
111
+ firstItem = item;
112
+ if (canAppendToPrefix && i < ARRAY_TRUNCATION_ROW_LIMIT) {
113
+ const nextKeep = i + 1;
114
+ const nextPrefixLength = prefixLength +
115
+ separator.length +
116
+ item.length +
117
+ ARRAY_CLOSE_LENGTH +
118
+ truncatedArrayFooterLength(nextKeep, total);
119
+ if (nextPrefixLength <= MAX_RESPONSE_SIZE) {
120
+ prefixParts.push(separator, item);
121
+ prefixLength += separator.length + item.length;
122
+ prefixKeep = nextKeep;
123
+ }
124
+ else {
125
+ canAppendToPrefix = false;
126
+ }
127
+ }
128
+ const nextFullLength = fullLength + separator.length + item.length + ARRAY_CLOSE_LENGTH;
129
+ if (nextFullLength > MAX_RESPONSE_SIZE) {
130
+ if (prefixKeep > 0) {
131
+ prefixParts.push(ARRAY_CLOSE);
132
+ return `${prefixParts.join("")}${truncatedArrayFooter(prefixKeep, total)}`;
133
+ }
134
+ return truncateArrayFallback(firstItem);
135
+ }
136
+ fullParts.push(separator, item);
137
+ fullLength += separator.length + item.length;
138
+ }
139
+ fullParts.push(ARRAY_CLOSE);
140
+ return fullParts.join("");
141
+ }
142
+ function stringifyAndTruncate(data) {
4
143
  const text = JSON.stringify(data, null, 2) ?? "null";
5
144
  if (text.length <= MAX_RESPONSE_SIZE)
6
145
  return text;
7
- if (Array.isArray(data)) {
8
- const total = data.length;
9
- for (let keep = Math.min(total, 50); keep > 0; keep--) {
10
- const slice = JSON.stringify(data.slice(0, keep), null, 2);
11
- const footer = `\n\n[truncated: showing first ${keep} rows of ${total} total]`;
12
- if (slice.length + footer.length <= MAX_RESPONSE_SIZE) {
13
- return slice + footer;
14
- }
15
- }
146
+ return `${text.slice(0, FALLBACK_KEEP_LENGTH)}${SIMPLE_TRUNCATED_FOOTER}`;
147
+ }
148
+ /** Truncate large responses to protect LLM context windows. */
149
+ export function truncate(data) {
150
+ if (Array.isArray(data) && typeof data.toJSON !== "function") {
151
+ return stringifyArrayForResponse(data);
16
152
  }
17
- return `${text.slice(0, MAX_RESPONSE_SIZE)}\n\n[truncated]`;
153
+ return stringifyAndTruncate(data);
18
154
  }
19
155
  export function textResult(data) {
20
156
  return { content: [{ type: "text", text: truncate(data) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ;AAE7C,+DAA+D;AAC/D,MAAM,UAAU,QAAQ,CAAC,IAAa;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC;IACrD,IAAI,IAAI,CAAC,MAAM,IAAI,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAElD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,iCAAiC,IAAI,YAAY,KAAK,SAAS,CAAC;YAC/E,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC;gBACvD,OAAO,KAAK,GAAG,MAAM,CAAC;YACvB,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAa;IACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAAC,GAAY;IAC3C,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACvC,OAAO;QACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,IAAa;KACtB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAElF,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,IAAe,EAAE,iBAA0B;IACxE,IAAI,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,12 @@
1
1
  #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
2
3
  import { ApiClient } from "@framedash/api-client";
3
4
  import { createServer } from "./server.js";
4
5
  import { StrictStdioServerTransport } from "./transport.js";
6
+ // Source the handshake version from package.json (same approach as the CLI) so
7
+ // the advertised server version cannot drift from the published package.
8
+ const VERSION = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"))
9
+ .version;
5
10
  const apiKey = process.env.FRAMEDASH_API_KEY;
6
11
  if (!apiKey) {
7
12
  process.stderr.write("Error: FRAMEDASH_API_KEY environment variable is required\n");
@@ -21,7 +26,7 @@ try {
21
26
  throw err;
22
27
  },
23
28
  });
24
- const server = createServer(client);
29
+ const server = createServer(client, VERSION);
25
30
  const transport = new StrictStdioServerTransport();
26
31
  await server.connect(transport);
27
32
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;IACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACpF,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,OAAO,CAAC,GAAG;YACV,MAAM,GAAG,CAAC;QACX,CAAC;KACD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,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"}
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;AAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;IACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACpF,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,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAG3F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA+E/E"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAI3F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA+E/E"}
package/dist/resources.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { fetchProjectContent, fetchProjectMaps, fetchProjectStatus } from "./api.js";
2
3
  import { getErrorMessage, projectClient, truncate } from "./helpers.js";
3
4
  export function registerResources(server, apiClient) {
4
5
  server.registerResource("projects", "framedash://projects", {
@@ -22,7 +23,7 @@ export function registerResources(server, apiClient) {
22
23
  }, async (uri, params) => {
23
24
  try {
24
25
  const client = projectClient(apiClient, String(params.projectId));
25
- const data = await client.get(client.projectPath("maps"));
26
+ const data = await fetchProjectMaps(client);
26
27
  return { contents: [{ uri: uri.href, text: truncate(data) }] };
27
28
  }
28
29
  catch (err) {
@@ -37,7 +38,7 @@ export function registerResources(server, apiClient) {
37
38
  }, async (uri, params) => {
38
39
  try {
39
40
  const client = projectClient(apiClient, String(params.projectId));
40
- const data = await client.get(client.projectPath("content"));
41
+ const data = await fetchProjectContent(client);
41
42
  return { contents: [{ uri: uri.href, text: truncate(data) }] };
42
43
  }
43
44
  catch (err) {
@@ -52,7 +53,7 @@ export function registerResources(server, apiClient) {
52
53
  }, async (uri, params) => {
53
54
  try {
54
55
  const client = projectClient(apiClient, String(params.projectId));
55
- const data = await client.get(client.projectPath("status"));
56
+ const data = await fetchProjectStatus(client);
56
57
  return { contents: [{ uri: uri.href, text: truncate(data) }] };
57
58
  }
58
59
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,4 +1,12 @@
1
1
  import type { ApiClient } from "@framedash/api-client";
2
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- export declare function createServer(apiClient: ApiClient): McpServer;
3
+ /**
4
+ * Build the Framedash MCP server around an ApiClient. `version` is the
5
+ * handshake version advertised to clients; hosts source it from this
6
+ * package's package.json (the stdio bin reads it with fs at boot, the hosted
7
+ * HTTP endpoint imports the JSON at build time) so it cannot drift from the
8
+ * published package. Keeping the fs read OUT of this module makes it
9
+ * bundler-safe for the Next.js remote endpoint.
10
+ */
11
+ export declare function createServer(apiClient: ApiClient, version: string): McpServer;
4
12
  //# sourceMappingURL=server.d.ts.map
@@ -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;AAOpE,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAa5D"}
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;AAOpE;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAa7E"}
package/dist/server.js CHANGED
@@ -4,10 +4,18 @@ import { registerAlertTools } from "./tools/alerts.js";
4
4
  import { registerAnalyticsTools } from "./tools/analytics.js";
5
5
  import { registerProjectTools } from "./tools/project.js";
6
6
  import { registerQueryTools } from "./tools/query.js";
7
- export function createServer(apiClient) {
7
+ /**
8
+ * Build the Framedash MCP server around an ApiClient. `version` is the
9
+ * handshake version advertised to clients; hosts source it from this
10
+ * package's package.json (the stdio bin reads it with fs at boot, the hosted
11
+ * HTTP endpoint imports the JSON at build time) so it cannot drift from the
12
+ * published package. Keeping the fs read OUT of this module makes it
13
+ * bundler-safe for the Next.js remote endpoint.
14
+ */
15
+ export function createServer(apiClient, version) {
8
16
  const server = new McpServer({
9
17
  name: "framedash",
10
- version: "0.1.0",
18
+ version,
11
19
  });
12
20
  registerQueryTools(server, apiClient);
13
21
  registerAnalyticsTools(server, apiClient);
@@ -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,MAAM,UAAU,YAAY,CAAC,SAAoB;IAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC5B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KAChB,CAAC,CAAC;IAEH,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,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"}
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;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,SAAoB,EAAE,OAAe;IACjE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC5B,IAAI,EAAE,WAAW;QACjB,OAAO;KACP,CAAC,CAAC;IAEH,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,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"}
@@ -1,4 +1,4 @@
1
- import type { ApiClient } from "@framedash/api-client";
1
+ import { type ApiClient } from "@framedash/api-client";
2
2
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  export declare function registerAnalyticsTools(server: McpServer, apiClient: ApiClient): void;
4
4
  //# sourceMappingURL=analytics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+BzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAsIpF"}
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;AAiCzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA8IpF"}
@@ -1,13 +1,16 @@
1
+ import { buildDashboardPath, buildFunnelPath, buildHeatmapPath, buildInsightsPath, buildRetentionPath, } from "@framedash/api-client";
1
2
  import { z } from "zod";
2
3
  import { errorResult, projectClient, textResult } from "../helpers.js";
3
4
  // The REST API rejects values outside these sets with HTTP 400. They mirror the
4
5
  // web app's constants (ALLOWED_DAYS / ALLOWED_LIMITS in lib/analytics/constants,
5
- // VALID_DAYS / VALID_CELL_SIZES in lib/heatmap-constants). The MCP server is a
6
- // separate package and cannot import them, so keep these in sync if the API changes.
7
- // Constraining the input schema lets the MCP client reject invalid values up front
8
- // instead of after a server round-trip.
6
+ // ALLOWED_WINDOW_SECONDS in the funnels route, VALID_DAYS / VALID_CELL_SIZES in
7
+ // lib/heatmap-constants). The MCP server is a separate package and cannot import
8
+ // them, so keep these in sync if the API changes. Constraining the input schema
9
+ // lets the MCP client reject invalid values up front instead of after a server
10
+ // round-trip.
9
11
  const ANALYTICS_DAYS = [7, 14, 30, 90];
10
12
  const INSIGHTS_LIMITS = [10, 20, 50];
13
+ const FUNNEL_WINDOWS = [3600, 21600, 86400, 604800];
11
14
  const HEATMAP_DAYS = [1, 7, 14, 30];
12
15
  const HEATMAP_CELL_SIZES = [5, 10, 25, 50];
13
16
  /**
@@ -32,11 +35,7 @@ export function registerAnalyticsTools(server, apiClient) {
32
35
  }, async (args) => {
33
36
  try {
34
37
  const client = projectClient(apiClient, args.project_id);
35
- const params = new URLSearchParams();
36
- if (args.days)
37
- params.set("days", String(args.days));
38
- const qs = params.toString() ? `?${params}` : "";
39
- const data = await client.get(client.projectPath(`dashboard${qs}`));
38
+ const data = await client.get(client.projectPath(buildDashboardPath({ days: args.days })));
40
39
  return textResult(data);
41
40
  }
42
41
  catch (err) {
@@ -53,11 +52,7 @@ export function registerAnalyticsTools(server, apiClient) {
53
52
  }, async (args) => {
54
53
  try {
55
54
  const client = projectClient(apiClient, args.project_id);
56
- const params = new URLSearchParams();
57
- if (args.days)
58
- params.set("days", String(args.days));
59
- const qs = params.toString() ? `?${params}` : "";
60
- const data = await client.get(client.projectPath(`retention${qs}`));
55
+ const data = await client.get(client.projectPath(buildRetentionPath({ days: args.days })));
61
56
  return textResult(data);
62
57
  }
63
58
  catch (err) {
@@ -71,14 +66,12 @@ export function registerAnalyticsTools(server, apiClient) {
71
66
  project_id: z.string().uuid().optional().describe("Override the default project ID"),
72
67
  steps: z.string().describe("Comma-separated event names (2-8 steps)"),
73
68
  days: allowedIntEnum(ANALYTICS_DAYS, "Time period: 7, 14, 30, or 90 days (default 30)"),
69
+ window: allowedIntEnum(FUNNEL_WINDOWS, "Conversion window in seconds: 3600, 21600, 86400, or 604800 (default 86400)"),
74
70
  },
75
71
  }, async (args) => {
76
72
  try {
77
73
  const client = projectClient(apiClient, args.project_id);
78
- const params = new URLSearchParams({ steps: args.steps });
79
- if (args.days)
80
- params.set("days", String(args.days));
81
- const data = await client.get(client.projectPath(`funnels?${params}`));
74
+ const data = await client.get(client.projectPath(buildFunnelPath({ steps: args.steps, days: args.days, window: args.window })));
82
75
  return textResult(data);
83
76
  }
84
77
  catch (err) {
@@ -99,17 +92,13 @@ export function registerAnalyticsTools(server, apiClient) {
99
92
  }, async (args) => {
100
93
  try {
101
94
  const client = projectClient(apiClient, args.project_id);
102
- const params = new URLSearchParams({
95
+ const data = await client.get(client.projectPath(buildInsightsPath({
103
96
  metric: args.metric,
104
97
  groupBy: args.group_by,
105
- });
106
- if (args.days)
107
- params.set("days", String(args.days));
108
- if (args.limit)
109
- params.set("limit", String(args.limit));
110
- if (args.event_name)
111
- params.set("eventName", args.event_name);
112
- const data = await client.get(client.projectPath(`insights?${params}`));
98
+ days: args.days,
99
+ limit: args.limit,
100
+ eventName: args.event_name,
101
+ })));
113
102
  return textResult(data);
114
103
  }
115
104
  catch (err) {
@@ -131,14 +120,12 @@ export function registerAnalyticsTools(server, apiClient) {
131
120
  }, async (args) => {
132
121
  try {
133
122
  const client = projectClient(apiClient, args.project_id);
134
- const params = new URLSearchParams({ mapId: args.map_id });
135
- if (args.cell_size)
136
- params.set("cellSize", String(args.cell_size));
137
- if (args.days)
138
- params.set("days", String(args.days));
139
- if (args.event_name)
140
- params.set("eventName", args.event_name);
141
- const data = await client.get(client.projectPath(`heatmap?${params}`));
123
+ const data = await client.get(client.projectPath(buildHeatmapPath({
124
+ mapId: args.map_id,
125
+ cellSize: args.cell_size,
126
+ days: args.days,
127
+ eventName: args.event_name,
128
+ })));
142
129
  return textResult(data);
143
130
  }
144
131
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,qFAAqF;AACrF,mFAAmF;AACnF,wCAAwC;AACxC,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAChD,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAC9C,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAC7C,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAEpD;;;;;;GAMG;AACH,SAAS,cAAc,CAAmB,MAA+B,EAAE,WAAmB;IAC7F,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAI9C,CAAC;IACF,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,SAAoB;IAC7E,MAAM,CAAC,YAAY,CAClB,eAAe,EACf;QACC,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,uEAAuE;QACpF,WAAW,EAAE;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACpF,IAAI,EAAE,cAAc,CAAC,cAAc,EAAE,iDAAiD,CAAC;SACvF;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,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,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,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;YACpE,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,eAAe,EACf;QACC,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACpF,IAAI,EAAE,cAAc,CAAC,cAAc,EAAE,iDAAiD,CAAC;SACvF;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,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,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,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;YACpE,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,YAAY,EACZ;QACC,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACpF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACrE,IAAI,EAAE,cAAc,CAAC,cAAc,EAAE,iDAAiD,CAAC;SACvF;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,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC;YACvE,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,cAAc,EACd;QACC,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAClF,IAAI,EAAE,cAAc,CAAC,cAAc,EAAE,iDAAiD,CAAC;YACvF,KAAK,EAAE,cAAc,CAAC,eAAe,EAAE,qCAAqC,CAAC;YAC7E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;SAClE;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,CAAC;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,QAAQ;aACtB,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC;YACxE,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,aAAa,EACb;QACC,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,wEAAwE;QACrF,WAAW,EAAE;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACpF,MAAM,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CAAC,+DAA+D,CAAC;YAC3E,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,0CAA0C,CAAC;YACzF,IAAI,EAAE,cAAc,CAAC,YAAY,EAAE,+CAA+C,CAAC;YACnF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;SAClE;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,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACnE,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC;YACvE,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
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.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;AAIzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAgFlF"}
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,CA+ElF"}
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { fetchContent, fetchProjectMaps, fetchProjectStatus } from "../api.js";
2
3
  import { errorResult, projectClient, textResult } from "../helpers.js";
3
4
  export function registerProjectTools(server, apiClient) {
4
5
  server.registerTool("list_projects", {
@@ -22,7 +23,7 @@ export function registerProjectTools(server, apiClient) {
22
23
  }, async (args) => {
23
24
  try {
24
25
  const client = projectClient(apiClient, args.project_id);
25
- const data = await client.get(client.projectPath("status"));
26
+ const data = await fetchProjectStatus(client);
26
27
  return textResult(data);
27
28
  }
28
29
  catch (err) {
@@ -38,7 +39,7 @@ export function registerProjectTools(server, apiClient) {
38
39
  }, async (args) => {
39
40
  try {
40
41
  const client = projectClient(apiClient, args.project_id);
41
- const data = await client.get(client.projectPath("maps"));
42
+ const data = await fetchProjectMaps(client);
42
43
  return textResult(data);
43
44
  }
44
45
  catch (err) {
@@ -54,12 +55,10 @@ export function registerProjectTools(server, apiClient) {
54
55
  },
55
56
  }, async (args) => {
56
57
  try {
58
+ // projectClient preserves the optional project_id override: the
59
+ // derived client sends X-Project-Id on this non-project-scoped path.
57
60
  const client = projectClient(apiClient, args.project_id);
58
- const params = new URLSearchParams();
59
- if (args.type)
60
- params.set("type", args.type);
61
- const qs = params.toString() ? `?${params}` : "";
62
- const data = await client.get(`/api/v1/content${qs}`);
61
+ const data = await fetchContent(client, { type: args.type });
63
62
  return textResult(data);
64
63
  }
65
64
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framedash/mcp-server",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "MCP server for the Framedash analytics platform",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -19,7 +19,12 @@
19
19
  ".": {
20
20
  "types": "./dist/index.d.ts",
21
21
  "default": "./dist/index.js"
22
- }
22
+ },
23
+ "./server": {
24
+ "types": "./dist/server.d.ts",
25
+ "default": "./dist/server.js"
26
+ },
27
+ "./package.json": "./package.json"
23
28
  },
24
29
  "scripts": {
25
30
  "build": "tsc -p tsconfig.build.json",
@@ -29,12 +34,12 @@
29
34
  "clean": "rm -rf dist"
30
35
  },
31
36
  "dependencies": {
32
- "@framedash/api-client": "0.1.1",
33
- "@modelcontextprotocol/sdk": "^1.27.0",
34
- "zod": "^3.25.0"
37
+ "@framedash/api-client": "0.1.3",
38
+ "@modelcontextprotocol/sdk": "^1.29.0",
39
+ "zod": "^4.3.6"
35
40
  },
36
41
  "engines": {
37
- "node": ">=18.0.0"
42
+ "node": ">=20.0.0"
38
43
  },
39
44
  "devDependencies": {
40
45
  "@types/node": "^22.0.0",