@apex-inc/mcp-server 0.3.0 → 0.6.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 CHANGED
@@ -1,8 +1,12 @@
1
1
  # @apex-inc/mcp-server
2
2
 
3
- Persistent growth intelligence for AI agents and developer tools.
3
+ MCP server for Apex currently in **private beta**.
4
4
 
5
- The Apex MCP server gives your AI agent a persistent growth brain — beliefs, predictions, experiments, and calibration that compound across every session. Instead of starting from zero, your AI draws on everything your team has ever learned: which beliefs have been validated, which predictions were accurate, and what to test next.
5
+ ## Access
6
+
7
+ Apex is invite-only during the private-beta period. If you received an invite, your onboarding email contains the `APEX_URL` and `APEX_API_KEY` values you'll need below. Full documentation for tools, resources, and prompts is available in-app once your account is active.
8
+
9
+ Not in the beta yet? Request access at [apex.inc](https://apex.inc) (coming soon).
6
10
 
7
11
  ## Install
8
12
 
@@ -12,7 +16,7 @@ npm install @apex-inc/mcp-server
12
16
 
13
17
  ## Configure
14
18
 
15
- Add to `.cursor/mcp.json`:
19
+ Add to `.cursor/mcp.json` (or your MCP client's equivalent):
16
20
 
17
21
  ```json
18
22
  {
@@ -22,8 +26,7 @@ Add to `.cursor/mcp.json`:
22
26
  "args": ["@apex-inc/mcp-server"],
23
27
  "env": {
24
28
  "APEX_URL": "https://your-apex-instance.com",
25
- "APEX_API_URL": "https://your-apex-instance.com",
26
- "APEX_API_KEY": "apex_key_your_key_here",
29
+ "APEX_API_KEY": "your-api-key",
27
30
  "APEX_PROJECT_KEY": "your-project-key"
28
31
  }
29
32
  }
@@ -31,120 +34,11 @@ Add to `.cursor/mcp.json`:
31
34
  }
32
35
  ```
33
36
 
34
- ### Environment Variables
35
-
36
- | Variable | Required | Description |
37
- |----------|----------|-------------|
38
- | `APEX_URL` | No | Base URL of the Apex app (default: `http://localhost:3001`) |
39
- | `APEX_API_KEY` | Recommended | API key for authenticated access |
40
- | `APEX_PROJECT_KEY` | No | Project key for multi-project setups (default: `default`) |
41
-
42
- ## MCP Tools (19)
43
-
44
- ### Growth Intelligence
45
-
46
- Query the persistent knowledge system — beliefs, predictions, calibration, and recommendations.
47
-
48
- | Tool | Description |
49
- |------|-------------|
50
- | `suggest_experiment` | Context-aware experiment recommendations based on beliefs, past results, and confidence gaps |
51
- | `predict_impact` | Decision guardrail — predict impact using historical experiment data before committing |
52
- | `evaluate_feature` | Pre-build intelligence — evaluate a feature idea against the belief graph |
53
- | `create_belief` | Record a belief (confirms statement and confidence with user first) |
54
- | `log_prediction` | Log a prediction — feeds the calibration loop tracking team accuracy |
55
- | `record_outcome` | Record outcome with Bayesian belief update |
56
-
57
- ### Experiment Engine
58
-
59
- Design, run, and measure controlled experiments.
60
-
61
- | Tool | Description |
62
- |------|-------------|
63
- | `plan_experiment` | Analyze a goal against beliefs and experiments, returns structured options |
64
- | `start_reasoning` | Record a belief → hypothesis chain |
65
- | `create_experiment` | Create an A/B test — supports `preview=true` for dry run |
66
- | `activate_experiment` | Launch an experiment (changes draft → running) |
67
- | `pause_experiment` | Pause a running experiment (all visitors see control) |
68
- | `list_experiments` | List experiments with status and results. Pass `status: "archived"` or `"all"` |
69
- | `get_results` | Detailed results for a specific experiment |
70
- | `promote_winner` | Mark the winning variant and complete the experiment |
71
- | `archive_experiment` | Archive an experiment (preserves all data and belief connections) |
72
-
73
- ### Deployment & Tracking
74
-
75
- | Tool | Description |
76
- |------|-------------|
77
- | `track_deployment` | Record that experiment code has been committed and pushed |
78
- | `check_deployment` | Verify the experiment assignment endpoint is reachable |
79
- | `track_event` | Track a custom event (identical to SDK `track()` and snippet `apex.track()`) |
80
- | `identify_user` | Identify a user by email for identity stitching |
81
-
82
- ## Shipped skills (Cursor / AI assistants)
83
-
84
- Markdown skills ship in **`skills/`** inside this package (e.g. `skills/apex-experimentation/SKILL.md`). Copy each skill folder into **`.cursor/skills/<skill-name>/`** so your assistant learns when to suggest experiments and how to instrument tracking.
85
-
86
- Your Apex app also serves the same files at **`/shipped-skills/<skill-id>/SKILL.md`** (see **Install → JSON** response from `/api/mcp-install` for URLs and install steps).
87
-
88
- Set **`APEX_URL`** to your Apex base URL (the MCP client uses this; **`APEX_API_URL`** is accepted for compatibility).
89
-
90
- ## MCP Resources (6)
91
-
92
- | URI | Name | Description |
93
- |-----|------|-------------|
94
- | `apex://beliefs` | Assumptions | All tracked assumptions with certainty scores and test status |
95
- | `apex://experiments/active` | Running Experiments | Currently running experiments with results and assumption linkages |
96
- | `apex://ledger` | Learning Log | History of everything learned from experiments — decisions, reasoning, belief updates |
97
- | `apex://intelligence-score` | Learning Rate | How much of what you assume has been tested, and how fast you're learning |
98
- | `apex://intelligence` | Growth Intelligence | Full intelligence metrics: score breakdown, revenue data, learning velocity |
99
- | `apex://calibration` | Prediction Calibration | Prediction accuracy and calibration data — how well predictions match reality |
100
-
101
- ## MCP Prompts (2)
102
-
103
- | Prompt | Description |
104
- |--------|-------------|
105
- | `new-experiment` | Interactive experiment setup — guides through belief selection, prediction, variant design, and deployment |
106
- | `experiment-review` | Review results, update beliefs, promote winners, and plan next steps |
107
-
108
- ## Example Workflows
109
-
110
- ### Interactive experiment creation
111
-
112
- ```
113
- You: "I want to test a new headline on the landing page"
114
-
115
- Step 1 — AI calls plan_experiment({ goal: "test headline on landing page" })
116
- → Returns: suggested beliefs, metrics, confidence levels, traffic splits
117
- → AI presents these as structured choices
118
-
119
- Step 2 — You choose belief, confidence, and metric
120
- → AI calls start_reasoning with your choices
121
- → AI asks: "Want to log a prediction?"
122
-
123
- Step 3 — You pick metric and expected impact
124
- → AI calls log_prediction with your inputs
125
-
126
- Step 4 — AI proposes variant headlines for you to choose
127
- → You pick one or write your own
128
-
129
- Step 5 — AI calls create_experiment({ ..., preview: true })
130
- → Shows the full plan — you confirm → create_experiment({ ..., preview: false })
131
- ```
132
-
133
- ### Decision guardrail before a change
134
-
135
- ```
136
- Developer: "Let's increase signup form fields from 3 to 5"
137
- → AI calls predict_impact({ description: "increase signup form fields from 3 to 5" })
138
- → Returns: "Similar experiments decreased activation by 18%. Recommendation: RECONSIDER"
139
- ```
140
-
141
- ### Pre-build feature evaluation
142
-
143
- ```
144
- Developer: "Should we build a freemium tier?"
145
- → AI calls evaluate_feature({ feature: "freemium pricing tier", targetMetric: "activation" })
146
- → Returns: belief graph analysis, historical evidence, confidence gaps, and suggestion
147
- ```
37
+ | Variable | Required | Notes |
38
+ |----------|----------|-------|
39
+ | `APEX_URL` | Yes | Your Apex instance URL (provided in your invite) |
40
+ | `APEX_API_KEY` | Yes | API key generated in your Apex dashboard |
41
+ | `APEX_PROJECT_KEY` | No | Defaults to your first project |
148
42
 
149
43
  ## License
150
44
 
@@ -1,8 +1,41 @@
1
+ interface OrgInfo {
2
+ orgId: string;
3
+ orgName: string;
4
+ orgIcon?: string;
5
+ role: string;
6
+ projects: Array<{
7
+ projectKey: string;
8
+ name: string;
9
+ url: string;
10
+ }>;
11
+ }
12
+ interface UserContext {
13
+ userId: string;
14
+ userEmail: string;
15
+ orgs: OrgInfo[];
16
+ }
1
17
  export declare function setActiveProject(projectKey: string): void;
2
18
  export declare function getActiveProject(): string | undefined;
19
+ export declare function setActiveOrg(orgId: string): void;
20
+ export declare function getActiveOrg(): string | undefined;
21
+ export declare function getUserContext(): UserContext | undefined;
22
+ /**
23
+ * Discover orgs and projects on startup.
24
+ * Only works with user keys (apex_uk_). Falls back gracefully for org keys.
25
+ */
26
+ export declare function discoverContext(): Promise<string | undefined>;
3
27
  export declare function sendStartupPing(): Promise<void>;
4
28
  export declare function apiGet<T>(path: string): Promise<T>;
5
29
  export declare function apiPost<T>(path: string, body: unknown): Promise<T>;
30
+ /**
31
+ * MMP-085 — POST with an `idempotency-key` header.
32
+ *
33
+ * Used by Server Sensor tooling so retried agent calls don't
34
+ * double-count. Pass a stable key per logical operation (e.g.
35
+ * `${runId}:${eventType}`).
36
+ */
37
+ export declare function postWithIdempotency<T>(path: string, idempotencyKey: string, body: unknown): Promise<T>;
6
38
  export declare function apiDelete(path: string): Promise<void>;
7
39
  export declare function apiPatch<T>(path: string, body: unknown): Promise<T>;
40
+ export {};
8
41
  //# sourceMappingURL=api-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,QAElD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAUD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CASxD;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAWxE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3D;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAWzE"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAIA,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAID,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,QAElD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,QAMzC;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAgB,cAAc,IAAI,WAAW,GAAG,SAAS,CAExD;AAUD;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwBnE;AA2BD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CASxD;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAWxE;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3D;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAWzE"}
@@ -1,14 +1,26 @@
1
- // Resolve the Apex API URL. Supports APEX_URL and APEX_API_URL env vars,
2
- // with fallback to localhost. When the user migrates to a custom domain
3
- // (e.g. apex.inc), they only need to update this env var in their MCP config.
4
1
  const BASE_URL = process.env.APEX_URL || process.env.APEX_API_URL || "http://localhost:3001";
5
2
  let activeProjectKey = process.env.APEX_PROJECT_KEY;
3
+ let activeOrgId;
4
+ let userContext;
6
5
  export function setActiveProject(projectKey) {
7
6
  activeProjectKey = projectKey;
8
7
  }
9
8
  export function getActiveProject() {
10
9
  return activeProjectKey;
11
10
  }
11
+ export function setActiveOrg(orgId) {
12
+ activeOrgId = orgId;
13
+ const org = userContext?.orgs.find((o) => o.orgId === orgId);
14
+ if (org?.projects.length) {
15
+ activeProjectKey = org.projects[0].projectKey;
16
+ }
17
+ }
18
+ export function getActiveOrg() {
19
+ return activeOrgId;
20
+ }
21
+ export function getUserContext() {
22
+ return userContext;
23
+ }
12
24
  function authHeaders() {
13
25
  const key = process.env.APEX_API_KEY;
14
26
  const headers = { "x-apex-source": "mcp-server" };
@@ -18,6 +30,54 @@ function authHeaders() {
18
30
  headers["x-apex-project"] = activeProjectKey;
19
31
  return headers;
20
32
  }
33
+ /**
34
+ * Discover orgs and projects on startup.
35
+ * Only works with user keys (apex_uk_). Falls back gracefully for org keys.
36
+ */
37
+ export async function discoverContext() {
38
+ const key = process.env.APEX_API_KEY;
39
+ if (!key?.startsWith("apex_uk_"))
40
+ return undefined;
41
+ try {
42
+ const res = await fetch(`${BASE_URL}/api/user/orgs`, {
43
+ headers: { ...authHeaders() },
44
+ });
45
+ if (!res.ok)
46
+ return undefined;
47
+ userContext = (await res.json());
48
+ if (userContext.orgs.length > 0) {
49
+ const firstOrg = userContext.orgs[0];
50
+ activeOrgId = firstOrg.orgId;
51
+ if (!activeProjectKey && firstOrg.projects.length > 0) {
52
+ activeProjectKey = firstOrg.projects[0].projectKey;
53
+ }
54
+ }
55
+ return buildStartupMessage();
56
+ }
57
+ catch {
58
+ return undefined;
59
+ }
60
+ }
61
+ function buildStartupMessage() {
62
+ if (!userContext)
63
+ return "Connected to Apex.";
64
+ const { userEmail, orgs } = userContext;
65
+ const activeOrg = orgs.find((o) => o.orgId === activeOrgId);
66
+ if (!activeOrg)
67
+ return `Connected as ${userEmail}. No organizations found.`;
68
+ const projectCount = activeOrg.projects.length;
69
+ const orgCount = orgs.length;
70
+ let msg = `Connected as ${userEmail} — active org: ${activeOrg.orgName} (${projectCount} project${projectCount !== 1 ? "s" : ""})`;
71
+ if (activeProjectKey) {
72
+ const proj = activeOrg.projects.find((p) => p.projectKey === activeProjectKey);
73
+ if (proj)
74
+ msg += `, active project: ${proj.name}`;
75
+ }
76
+ if (orgCount > 1) {
77
+ msg += `. You have access to ${orgCount} orgs — use switch_org to change.`;
78
+ }
79
+ return msg;
80
+ }
21
81
  export async function sendStartupPing() {
22
82
  try {
23
83
  await fetch(`${BASE_URL}/api/mcp-ping`, {
@@ -27,7 +87,7 @@ export async function sendStartupPing() {
27
87
  });
28
88
  }
29
89
  catch {
30
- // fire-and-forget — don't block server startup
90
+ // fire-and-forget
31
91
  }
32
92
  }
33
93
  export async function apiGet(path) {
@@ -52,6 +112,29 @@ export async function apiPost(path, body) {
52
112
  }
53
113
  return res.json();
54
114
  }
115
+ /**
116
+ * MMP-085 — POST with an `idempotency-key` header.
117
+ *
118
+ * Used by Server Sensor tooling so retried agent calls don't
119
+ * double-count. Pass a stable key per logical operation (e.g.
120
+ * `${runId}:${eventType}`).
121
+ */
122
+ export async function postWithIdempotency(path, idempotencyKey, body) {
123
+ const res = await fetch(`${BASE_URL}${path}`, {
124
+ method: "POST",
125
+ headers: {
126
+ "Content-Type": "application/json",
127
+ "idempotency-key": idempotencyKey,
128
+ ...authHeaders(),
129
+ },
130
+ body: JSON.stringify(body),
131
+ });
132
+ if (!res.ok) {
133
+ const text = await res.text().catch(() => "");
134
+ throw new Error(`POST ${path} failed (${res.status}): ${text}`);
135
+ }
136
+ return res.json();
137
+ }
55
138
  export async function apiDelete(path) {
56
139
  const res = await fetch(`${BASE_URL}${path}`, {
57
140
  method: "DELETE",
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,13 +5,16 @@ import { z } from "zod";
5
5
  import { toolDefinitions } from "./tools.js";
6
6
  import { resourceDefinitions } from "./resources.js";
7
7
  import { promptDefinitions } from "./prompts.js";
8
- import { sendStartupPing } from "./api-client.js";
9
- const server = new McpServer({ name: "apex", version: "0.3.0" }, {
8
+ import { sendStartupPing, discoverContext } from "./api-client.js";
9
+ const server = new McpServer({ name: "apex", version: "0.6.1" }, {
10
10
  instructions: [
11
- "You are connected to the Apex growth platform.",
12
- "When a user mentions experiments, or at the start of a conversation about their product,",
13
- "check for experiments that need attention using list_experiments.",
14
- "If any experiments show PENDING GRADUATION, proactively mention them and offer to",
11
+ "You are connected to the Apex growth platform, which manages A/B tests and growth experiments.",
12
+ "Only use these tools when the user's request is explicitly about Apex, experiments, A/B tests,",
13
+ "variants, or graduating experiment changes. Do NOT call any Apex tool — especially list_experiments",
14
+ "for unrelated coding, debugging, or product work that does not mention experiments or Apex.",
15
+ "When the user does ask about their experiments (e.g. 'what experiments are running?',",
16
+ "'check Apex', 'any experiments ready to graduate?'), use list_experiments to check their status.",
17
+ "If any experiments show PENDING GRADUATION in that context, mention them and offer to",
15
18
  "make the winning changes permanent using graduate_experiment.",
16
19
  "Graduation is optional — the Apex snippet keeps serving the winner — but graduating",
17
20
  "removes the runtime dependency and makes the changes part of the source code.",
@@ -45,6 +48,10 @@ server.prompt("experiment-review", "Review experiment results, see what you lear
45
48
  async function main() {
46
49
  const transport = new StdioServerTransport();
47
50
  await server.connect(transport);
51
+ const startupMsg = await discoverContext();
52
+ if (startupMsg) {
53
+ console.error(`[apex] ${startupMsg}`);
54
+ }
48
55
  sendStartupPing();
49
56
  }
50
57
  main().catch((err) => {
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":"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"}
@@ -77,5 +77,31 @@ export declare const resourceDefinitions: {
77
77
  }[];
78
78
  }>;
79
79
  };
80
+ communications: {
81
+ uri: string;
82
+ name: string;
83
+ description: string;
84
+ mimeType: string;
85
+ handler: () => Promise<{
86
+ contents: {
87
+ uri: string;
88
+ text: string;
89
+ mimeType: string;
90
+ }[];
91
+ }>;
92
+ };
93
+ communicationEvents: {
94
+ uri: string;
95
+ name: string;
96
+ description: string;
97
+ mimeType: string;
98
+ handler: () => Promise<{
99
+ contents: {
100
+ uri: string;
101
+ text: string;
102
+ mimeType: string;
103
+ }[];
104
+ }>;
105
+ };
80
106
  };
81
107
  //# sourceMappingURL=resources.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AA8EA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwN/B,CAAC"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AA8EA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+T/B,CAAC"}
package/dist/resources.js CHANGED
@@ -182,5 +182,101 @@ export const resourceDefinitions = {
182
182
  };
183
183
  },
184
184
  },
185
+ // ─── Communications ─────────────────────────────────────────────────────────
186
+ communications: {
187
+ uri: "apex://communications",
188
+ name: "Communications",
189
+ description: "Tenant communications — lifecycle emails and push notifications with status, channels, and trigger events.",
190
+ mimeType: "application/json",
191
+ handler: async () => {
192
+ try {
193
+ const comms = await apiGet("/api/communications");
194
+ const list = Array.isArray(comms) ? comms : [];
195
+ const summary = {
196
+ total: list.length,
197
+ byStatus: list.reduce((acc, c) => {
198
+ const s = c.status || "unknown";
199
+ acc[s] = (acc[s] || 0) + 1;
200
+ return acc;
201
+ }, {}),
202
+ communications: list.map((c) => ({
203
+ id: c.id,
204
+ title: c.title,
205
+ status: c.status,
206
+ channels: c.channels,
207
+ triggerEventId: c.triggerEventId,
208
+ journeyStage: c.journeyStage,
209
+ })),
210
+ };
211
+ return {
212
+ contents: [{
213
+ uri: "apex://communications",
214
+ text: JSON.stringify(summary, null, 2),
215
+ mimeType: "application/json",
216
+ }],
217
+ };
218
+ }
219
+ catch {
220
+ return {
221
+ contents: [{
222
+ uri: "apex://communications",
223
+ text: JSON.stringify({ total: 0, communications: [], note: "No communications configured yet." }),
224
+ mimeType: "application/json",
225
+ }],
226
+ };
227
+ }
228
+ },
229
+ },
230
+ communicationEvents: {
231
+ uri: "apex://communications/events",
232
+ name: "Communication Events",
233
+ description: "Event taxonomy for the project's vertical plus integration tracking status — which events have been seen and which are missing.",
234
+ mimeType: "application/json",
235
+ handler: async () => {
236
+ try {
237
+ const [taxonomy, status] = await Promise.all([
238
+ apiGet("/api/communications/events").catch(() => []),
239
+ apiGet("/api/communications/events/status").catch(() => []),
240
+ ]);
241
+ const taxList = Array.isArray(taxonomy) ? taxonomy : [];
242
+ const statusList = Array.isArray(status) ? status : [];
243
+ const statusMap = new Map(statusList.map((s) => [s.eventId, s]));
244
+ const events = taxList.map((t) => {
245
+ const tracking = statusMap.get(t.id);
246
+ return {
247
+ id: t.id,
248
+ name: t.name,
249
+ description: t.description,
250
+ sdkExample: t.sdkExample,
251
+ integrated: !!tracking,
252
+ totalCount: tracking ? tracking.totalCount : 0,
253
+ lastSeen: tracking ? tracking.lastSeen : null,
254
+ };
255
+ });
256
+ const integrated = events.filter((e) => e.integrated).length;
257
+ return {
258
+ contents: [{
259
+ uri: "apex://communications/events",
260
+ text: JSON.stringify({
261
+ totalEvents: events.length,
262
+ integrated,
263
+ missing: events.length - integrated,
264
+ events,
265
+ }, null, 2),
266
+ mimeType: "application/json",
267
+ }],
268
+ };
269
+ }
270
+ catch {
271
+ return {
272
+ contents: [{
273
+ uri: "apex://communications/events",
274
+ text: JSON.stringify({ totalEvents: 0, events: [], note: "No event taxonomy configured." }),
275
+ mimeType: "application/json",
276
+ }],
277
+ };
278
+ }
279
+ },
280
+ },
185
281
  };
186
282
  //# sourceMappingURL=resources.js.map
@@ -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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"}