@soldy_ai/mcp 0.1.6 → 0.1.7

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
@@ -4,9 +4,19 @@ A Model Context Protocol (MCP) server for [Soldy AI](https://soldy.ai) — gener
4
4
 
5
5
  ## Installation
6
6
 
7
- ### Claude Desktop / Cursor
7
+ ### Cursor / Claude Code (Recommended — via Skills)
8
8
 
9
- Add to your MCP configuration (`claude_desktop_config.json`):
9
+ The fastest way to set up the Soldy MCP in Cursor or Claude Code is to let the agent install it for you:
10
+
11
+ ```
12
+ npx skills add https://github.com/solgers/soldy-mcp
13
+ ```
14
+
15
+ This installs the Soldy skill which auto-configures the MCP server and provides contextual guidance to the agent.
16
+
17
+ ### Claude Desktop / Cursor (Manual)
18
+
19
+ Add to your MCP configuration (`claude_desktop_config.json` or `.cursor/mcp.json`):
10
20
 
11
21
  ```json
12
22
  {
@@ -1,11 +1,14 @@
1
1
  import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
2
  import type { SoldyAPIClient } from "./client.js";
3
3
  /**
4
- * Bridges WebSocket project subscriptions to MCP resource update notifications.
4
+ * Bridges project subscriptions to MCP resource update notifications.
5
5
  *
6
- * When an MCP client subscribes to a resource URI (e.g. `soldy://project/{id}/status`),
7
- * this bridge connects to the API WebSocket, subscribes to the project, and forwards
8
- * relevant events as `sendResourceUpdated` notifications.
6
+ * Primary transport: WebSocket (real-time, low latency).
7
+ * Fallback transport: HTTP polling (activates automatically when WebSocket
8
+ * is unavailable or repeatedly fails to connect).
9
+ *
10
+ * Both transports emit the same `sendResourceUpdated` notifications so MCP
11
+ * clients get a consistent experience regardless of the underlying transport.
9
12
  */
10
13
  export declare class SubscriptionBridge {
11
14
  private client;
@@ -20,24 +23,38 @@ export declare class SubscriptionBridge {
20
23
  /** Brand task polling: taskId → { interval, lastStatus } */
21
24
  private brandTaskPolls;
22
25
  private static readonly BRAND_TASK_POLL_MS;
26
+ /** HTTP polling fallback state */
27
+ private pollInterval;
28
+ private static readonly PROJECT_POLL_MS;
29
+ private projectSnapshots;
30
+ private wsConsecutiveFailures;
31
+ private static readonly WS_FAILURE_THRESHOLD;
32
+ private usingPollingFallback;
33
+ private lastConnectTime;
34
+ private static readonly RAPID_CLOSE_MS;
23
35
  constructor(client: SoldyAPIClient, _apiUrl: string, apiKey: string);
24
36
  /** Attach the low-level MCP Server instance for sending notifications. */
25
37
  setServer(server: Server): void;
26
- /** Subscribe to a project's WebSocket events. Call when MCP client subscribes to a resource. */
38
+ /** Subscribe to a project's updates. Tries WebSocket first, falls back to HTTP polling. */
27
39
  subscribeProject(projectId: string): Promise<void>;
28
- /** Unsubscribe from a project. Call when no more MCP subscriptions reference it. */
40
+ /** Unsubscribe from a project. */
29
41
  unsubscribeProject(projectId: string): void;
30
42
  /** Subscribe to brand task status changes via polling. */
31
43
  subscribeBrandTask(taskId: string): void;
32
44
  /** Stop polling a brand task. */
33
45
  unsubscribeBrandTask(taskId: string): void;
34
- /** Disconnect the WebSocket and stop all polling. */
46
+ /** Disconnect all transports and stop all polling. */
35
47
  disconnect(): void;
36
48
  private ensureConnected;
37
49
  private connect;
38
50
  private scheduleReconnect;
39
51
  private sendProjectSubscribe;
40
52
  private handleMessage;
53
+ private activatePollingFallback;
54
+ private ensurePolling;
55
+ private stopPolling;
56
+ private pollAllProjects;
57
+ private pollProject;
41
58
  }
42
59
  /** Extract project_id from a soldy://project/... resource URI. */
43
60
  export declare function extractProjectId(uri: string): string | null;
@@ -1,3 +1,4 @@
1
+ import WebSocket from "ws";
1
2
  /** Events that indicate project status changed. */
2
3
  const STATUS_EVENTS = new Set([
3
4
  "RunStarted",
@@ -34,11 +35,14 @@ const MESSAGE_EVENTS = new Set([
34
35
  ...STATUS_EVENTS,
35
36
  ]);
36
37
  /**
37
- * Bridges WebSocket project subscriptions to MCP resource update notifications.
38
+ * Bridges project subscriptions to MCP resource update notifications.
38
39
  *
39
- * When an MCP client subscribes to a resource URI (e.g. `soldy://project/{id}/status`),
40
- * this bridge connects to the API WebSocket, subscribes to the project, and forwards
41
- * relevant events as `sendResourceUpdated` notifications.
40
+ * Primary transport: WebSocket (real-time, low latency).
41
+ * Fallback transport: HTTP polling (activates automatically when WebSocket
42
+ * is unavailable or repeatedly fails to connect).
43
+ *
44
+ * Both transports emit the same `sendResourceUpdated` notifications so MCP
45
+ * clients get a consistent experience regardless of the underlying transport.
42
46
  */
43
47
  export class SubscriptionBridge {
44
48
  client;
@@ -53,6 +57,15 @@ export class SubscriptionBridge {
53
57
  /** Brand task polling: taskId → { interval, lastStatus } */
54
58
  brandTaskPolls = new Map();
55
59
  static BRAND_TASK_POLL_MS = 3000;
60
+ /** HTTP polling fallback state */
61
+ pollInterval = null;
62
+ static PROJECT_POLL_MS = 3000;
63
+ projectSnapshots = new Map();
64
+ wsConsecutiveFailures = 0;
65
+ static WS_FAILURE_THRESHOLD = 3;
66
+ usingPollingFallback = false;
67
+ lastConnectTime = 0;
68
+ static RAPID_CLOSE_MS = 3000;
56
69
  constructor(client, _apiUrl, apiKey) {
57
70
  this.client = client;
58
71
  this.apiKey = apiKey;
@@ -61,18 +74,31 @@ export class SubscriptionBridge {
61
74
  setServer(server) {
62
75
  this.server = server;
63
76
  }
64
- /** Subscribe to a project's WebSocket events. Call when MCP client subscribes to a resource. */
77
+ /** Subscribe to a project's updates. Tries WebSocket first, falls back to HTTP polling. */
65
78
  async subscribeProject(projectId) {
66
79
  if (this.subscribedProjects.has(projectId))
67
80
  return;
68
81
  this.subscribedProjects.add(projectId);
69
- await this.ensureConnected();
70
- this.sendProjectSubscribe(projectId);
82
+ if (this.usingPollingFallback) {
83
+ this.ensurePolling();
84
+ return;
85
+ }
86
+ try {
87
+ await this.ensureConnected();
88
+ this.sendProjectSubscribe(projectId);
89
+ }
90
+ catch {
91
+ console.error("[SubscriptionBridge] WebSocket unavailable, activating HTTP polling fallback");
92
+ this.activatePollingFallback();
93
+ }
71
94
  }
72
- /** Unsubscribe from a project. Call when no more MCP subscriptions reference it. */
95
+ /** Unsubscribe from a project. */
73
96
  unsubscribeProject(projectId) {
74
97
  this.subscribedProjects.delete(projectId);
75
- // WebSocket protocol doesn't support unsubscribe, but we stop sending notifications
98
+ this.projectSnapshots.delete(projectId);
99
+ if (this.subscribedProjects.size === 0) {
100
+ this.stopPolling();
101
+ }
76
102
  }
77
103
  /** Subscribe to brand task status changes via polling. */
78
104
  subscribeBrandTask(taskId) {
@@ -95,7 +121,6 @@ export class SubscriptionBridge {
95
121
  this.server.sendResourceUpdated({
96
122
  uri: `soldy://brand/task/${taskId}`,
97
123
  });
98
- // Also notify brand list when a new brand is extracted
99
124
  if (task.status === "finished") {
100
125
  this.server.sendResourceUpdated({ uri: "soldy://brands" });
101
126
  if (task.brand_id) {
@@ -103,11 +128,9 @@ export class SubscriptionBridge {
103
128
  uri: `soldy://brand/${task.brand_id}`,
104
129
  });
105
130
  }
106
- // Task completed — stop polling
107
131
  this.unsubscribeBrandTask(taskId);
108
132
  }
109
133
  else if (task.status === "failed") {
110
- // Task failed — stop polling
111
134
  this.unsubscribeBrandTask(taskId);
112
135
  }
113
136
  }
@@ -127,7 +150,7 @@ export class SubscriptionBridge {
127
150
  this.brandTaskPolls.delete(taskId);
128
151
  }
129
152
  }
130
- /** Disconnect the WebSocket and stop all polling. */
153
+ /** Disconnect all transports and stop all polling. */
131
154
  disconnect() {
132
155
  if (this.reconnectTimer) {
133
156
  clearTimeout(this.reconnectTimer);
@@ -138,23 +161,34 @@ export class SubscriptionBridge {
138
161
  this.ws = null;
139
162
  }
140
163
  this.connecting = false;
141
- // Stop all brand task polls
142
- for (const [taskId, entry] of this.brandTaskPolls) {
164
+ this.stopPolling();
165
+ this.projectSnapshots.clear();
166
+ for (const [, entry] of this.brandTaskPolls) {
143
167
  clearInterval(entry.interval);
144
- this.brandTaskPolls.delete(taskId);
145
168
  }
169
+ this.brandTaskPolls.clear();
146
170
  }
171
+ // ---------------------------------------------------------------------------
172
+ // WebSocket transport
173
+ // ---------------------------------------------------------------------------
147
174
  async ensureConnected() {
148
175
  if (this.ws?.readyState === WebSocket.OPEN)
149
176
  return;
150
177
  if (this.connecting) {
151
- // Wait for ongoing connection
152
- await new Promise((resolve) => {
178
+ await new Promise((resolve, reject) => {
179
+ const timeout = setTimeout(() => reject(new Error("WebSocket connect timeout")), 15_000);
153
180
  const check = () => {
154
- if (this.ws?.readyState === WebSocket.OPEN)
181
+ if (this.ws?.readyState === WebSocket.OPEN) {
182
+ clearTimeout(timeout);
155
183
  resolve();
156
- else
184
+ }
185
+ else if (!this.connecting) {
186
+ clearTimeout(timeout);
187
+ reject(new Error("WebSocket connection failed"));
188
+ }
189
+ else {
157
190
  setTimeout(check, 100);
191
+ }
158
192
  };
159
193
  check();
160
194
  });
@@ -166,33 +200,58 @@ export class SubscriptionBridge {
166
200
  this.connecting = true;
167
201
  const wsUrl = this.client.getWebSocketUrl(this.apiKey);
168
202
  return new Promise((resolve, reject) => {
169
- const ws = new WebSocket(wsUrl);
170
- ws.onopen = () => {
203
+ let ws;
204
+ try {
205
+ ws = new WebSocket(wsUrl);
206
+ }
207
+ catch (err) {
208
+ this.connecting = false;
209
+ this.wsConsecutiveFailures++;
210
+ reject(err instanceof Error ? err : new Error("WebSocket creation failed"));
211
+ return;
212
+ }
213
+ const connectTimeout = setTimeout(() => {
214
+ this.connecting = false;
215
+ this.wsConsecutiveFailures++;
216
+ ws.close();
217
+ reject(new Error("WebSocket connect timeout"));
218
+ }, 10_000);
219
+ ws.on("open", () => {
220
+ clearTimeout(connectTimeout);
171
221
  this.ws = ws;
172
222
  this.connecting = false;
173
- this.reconnectDelay = 1000;
223
+ this.lastConnectTime = Date.now();
174
224
  console.error("[SubscriptionBridge] WebSocket connected");
175
- // Re-subscribe all projects
176
225
  for (const projectId of this.subscribedProjects) {
177
226
  this.sendProjectSubscribe(projectId);
178
227
  }
179
228
  resolve();
180
- };
181
- ws.onmessage = (event) => {
182
- this.handleMessage(String(event.data));
183
- };
184
- ws.onclose = () => {
185
- console.error("[SubscriptionBridge] WebSocket closed");
229
+ });
230
+ ws.on("message", (data) => {
231
+ this.handleMessage(String(data));
232
+ });
233
+ ws.on("close", (code) => {
234
+ const uptime = Date.now() - this.lastConnectTime;
186
235
  this.ws = null;
187
236
  this.connecting = false;
237
+ if (this.lastConnectTime > 0 &&
238
+ uptime < SubscriptionBridge.RAPID_CLOSE_MS) {
239
+ this.wsConsecutiveFailures++;
240
+ console.error(`[SubscriptionBridge] WebSocket closed (code=${code}) after ${uptime}ms (rapid disconnect #${this.wsConsecutiveFailures})`);
241
+ }
242
+ else {
243
+ console.error(`[SubscriptionBridge] WebSocket closed (code=${code})`);
244
+ }
188
245
  this.scheduleReconnect();
189
- };
190
- ws.onerror = (err) => {
191
- console.error("[SubscriptionBridge] WebSocket error:", err);
246
+ });
247
+ ws.on("error", (err) => {
248
+ clearTimeout(connectTimeout);
249
+ console.error("[SubscriptionBridge] WebSocket error:", err.message);
192
250
  this.connecting = false;
251
+ this.wsConsecutiveFailures++;
193
252
  if (!this.ws)
194
253
  reject(new Error("WebSocket connection failed"));
195
- };
254
+ });
196
255
  });
197
256
  }
198
257
  scheduleReconnect() {
@@ -200,14 +259,19 @@ export class SubscriptionBridge {
200
259
  return;
201
260
  if (this.reconnectTimer)
202
261
  return;
262
+ if (this.wsConsecutiveFailures >= SubscriptionBridge.WS_FAILURE_THRESHOLD &&
263
+ !this.usingPollingFallback) {
264
+ console.error(`[SubscriptionBridge] ${this.wsConsecutiveFailures} consecutive WebSocket failures, activating HTTP polling fallback`);
265
+ this.activatePollingFallback();
266
+ }
267
+ const delay = Math.min(this.reconnectDelay * 2 ** Math.max(0, this.wsConsecutiveFailures - 1), this.maxReconnectDelay);
203
268
  this.reconnectTimer = setTimeout(() => {
204
269
  this.reconnectTimer = null;
205
270
  this.connect().catch((err) => {
206
- console.error("[SubscriptionBridge] Reconnect failed:", err);
207
- this.reconnectDelay = Math.min(this.reconnectDelay * 2, this.maxReconnectDelay);
271
+ console.error("[SubscriptionBridge] Reconnect failed:", err.message);
208
272
  this.scheduleReconnect();
209
273
  });
210
- }, this.reconnectDelay);
274
+ }, delay);
211
275
  }
212
276
  sendProjectSubscribe(projectId) {
213
277
  if (this.ws?.readyState !== WebSocket.OPEN)
@@ -230,15 +294,20 @@ export class SubscriptionBridge {
230
294
  const projectId = msg.context?.project_id;
231
295
  if (!projectId || !this.subscribedProjects.has(projectId))
232
296
  return;
297
+ if (this.usingPollingFallback) {
298
+ console.error("[SubscriptionBridge] WebSocket recovered, stopping HTTP polling fallback");
299
+ this.stopPolling();
300
+ this.usingPollingFallback = false;
301
+ }
302
+ this.wsConsecutiveFailures = 0;
303
+ this.reconnectDelay = 1000;
233
304
  const event = msg.event;
234
305
  const runId = msg.context?.run_id;
235
- // Status change notifications
236
306
  if (STATUS_EVENTS.has(event)) {
237
307
  this.server.sendResourceUpdated({
238
308
  uri: `soldy://project/${projectId}/status`,
239
309
  });
240
310
  }
241
- // Message notifications
242
311
  if (MESSAGE_EVENTS.has(event)) {
243
312
  this.server.sendResourceUpdated({
244
313
  uri: `soldy://project/${projectId}/messages`,
@@ -249,7 +318,6 @@ export class SubscriptionBridge {
249
318
  });
250
319
  }
251
320
  }
252
- // Material notifications
253
321
  if (msg.message?.materials?.length) {
254
322
  this.server.sendResourceUpdated({
255
323
  uri: `soldy://project/${projectId}/materials`,
@@ -261,6 +329,76 @@ export class SubscriptionBridge {
261
329
  }
262
330
  }
263
331
  }
332
+ // ---------------------------------------------------------------------------
333
+ // HTTP polling fallback — activated when WebSocket is unavailable
334
+ // ---------------------------------------------------------------------------
335
+ activatePollingFallback() {
336
+ this.usingPollingFallback = true;
337
+ this.ensurePolling();
338
+ }
339
+ ensurePolling() {
340
+ if (this.pollInterval)
341
+ return;
342
+ if (this.subscribedProjects.size === 0)
343
+ return;
344
+ console.error(`[SubscriptionBridge] Starting HTTP polling for ${this.subscribedProjects.size} project(s)`);
345
+ this.pollInterval = setInterval(() => {
346
+ this.pollAllProjects();
347
+ }, SubscriptionBridge.PROJECT_POLL_MS);
348
+ this.pollAllProjects();
349
+ }
350
+ stopPolling() {
351
+ if (this.pollInterval) {
352
+ clearInterval(this.pollInterval);
353
+ this.pollInterval = null;
354
+ }
355
+ }
356
+ async pollAllProjects() {
357
+ if (!this.server)
358
+ return;
359
+ const projects = [...this.subscribedProjects];
360
+ await Promise.allSettled(projects.map((id) => this.pollProject(id)));
361
+ }
362
+ async pollProject(projectId) {
363
+ if (!this.server)
364
+ return;
365
+ try {
366
+ const [project, { total: messageCount }, materials] = await Promise.all([
367
+ this.client.getProject(projectId),
368
+ this.client.listMessages(projectId, 1, 1),
369
+ this.client.getMaterials(projectId),
370
+ ]);
371
+ if (!project)
372
+ return;
373
+ const prev = this.projectSnapshots.get(projectId);
374
+ const current = {
375
+ status: project.status,
376
+ messageCount,
377
+ materialCount: materials.length,
378
+ };
379
+ this.projectSnapshots.set(projectId, current);
380
+ if (!prev)
381
+ return;
382
+ if (current.status !== prev.status) {
383
+ this.server.sendResourceUpdated({
384
+ uri: `soldy://project/${projectId}/status`,
385
+ });
386
+ }
387
+ if (current.messageCount !== prev.messageCount) {
388
+ this.server.sendResourceUpdated({
389
+ uri: `soldy://project/${projectId}/messages`,
390
+ });
391
+ }
392
+ if (current.materialCount !== prev.materialCount) {
393
+ this.server.sendResourceUpdated({
394
+ uri: `soldy://project/${projectId}/materials`,
395
+ });
396
+ }
397
+ }
398
+ catch (err) {
399
+ console.error(`[SubscriptionBridge] Poll error (project ${projectId}):`, err instanceof Error ? err.message : err);
400
+ }
401
+ }
264
402
  }
265
403
  /** Extract project_id from a soldy://project/... resource URI. */
266
404
  export function extractProjectId(uri) {
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soldy_ai/mcp",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Soldy AI MCP Server — video ad generation via Claude Desktop, Cursor, Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,7 +10,6 @@
10
10
  "build": "tsc",
11
11
  "dev": "tsx src/index.ts",
12
12
  "start": "node dist/index.js",
13
- "pack:dist": "npm run build && npm pack --pack-destination ../web/public/mcp",
14
13
  "lint": "biome check src/",
15
14
  "lint:fix": "biome check --write src/"
16
15
  },
@@ -18,9 +17,11 @@
18
17
  "@modelcontextprotocol/sdk": "^1.29.0",
19
18
  "@types/node": "^22.0.0",
20
19
  "typescript": "^5.7.0",
20
+ "ws": "^8.20.0",
21
21
  "zod": "^4.0.0"
22
22
  },
23
23
  "devDependencies": {
24
+ "@types/ws": "^8.18.1",
24
25
  "tsx": "^4.19.0"
25
26
  },
26
27
  "files": [