@sudomock/mcp 1.1.0 → 1.3.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 +45 -34
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +475 -37
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
## Quick Start
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
This is a local **stdio** server: your MCP client launches it as a child process
|
|
10
|
+
via `npx` and authenticates with your `SUDOMOCK_API_KEY`.
|
|
10
11
|
|
|
11
12
|
```bash
|
|
12
13
|
claude mcp add sudomock \
|
|
@@ -35,29 +36,8 @@ Get your API key at [sudomock.com/dashboard/api-keys](https://sudomock.com/dashb
|
|
|
35
36
|
|
|
36
37
|
</details>
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
No API key needed. Your client opens a browser for login.
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
claude mcp add --transport http sudomock https://mcp.sudomock.com
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
<details>
|
|
47
|
-
<summary>JSON config for other clients</summary>
|
|
48
|
-
|
|
49
|
-
```json
|
|
50
|
-
{
|
|
51
|
-
"mcpServers": {
|
|
52
|
-
"sudomock": {
|
|
53
|
-
"type": "http",
|
|
54
|
-
"url": "https://mcp.sudomock.com"
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
</details>
|
|
39
|
+
> **Note:** A hosted remote (HTTP/OAuth) transport is not available yet. This
|
|
40
|
+
> package only ships the local stdio server shown above.
|
|
61
41
|
|
|
62
42
|
## Tools
|
|
63
43
|
|
|
@@ -66,28 +46,59 @@ claude mcp add --transport http sudomock https://mcp.sudomock.com
|
|
|
66
46
|
| `list_mockups` | List your uploaded mockup templates | 0 |
|
|
67
47
|
| `get_mockup_details` | Get smart object UUIDs, dimensions, blend modes | 0 |
|
|
68
48
|
| `render_mockup` | Render a mockup with your artwork | 1 |
|
|
69
|
-
| `
|
|
70
|
-
| `
|
|
49
|
+
| `render_2d_mockup` | Render artwork onto a saved 2D mockup template (no PSD) | 5 |
|
|
50
|
+
| `render_video` | Animate a mockup into an AI video clip (always async) | cost-based (free: 1/lifetime) |
|
|
51
|
+
| `upload_psd` | Upload a Photoshop PSD/PSB template (sync or async) | 0 |
|
|
52
|
+
| `list_2d_mockups` | List your saved SudoAI 2D mockup templates | 0 |
|
|
53
|
+
| `get_2d_mockup` | Get one 2D mockup's details + print-area UUIDs | 0 |
|
|
54
|
+
| `delete_2d_mockup` | Delete a 2D mockup template | 0 |
|
|
55
|
+
| `get_job` | Check the status of an async job by job_id | 0 |
|
|
56
|
+
| `wait_for_job` | Poll an async job until it succeeds or fails | 0 |
|
|
57
|
+
| `list_jobs` | List your async jobs (renders, videos, uploads) | 0 |
|
|
71
58
|
| `get_account` | Check plan, credits, and usage | 0 |
|
|
72
59
|
| `update_mockup` | Rename a mockup template | 0 |
|
|
73
60
|
| `delete_mockup` | Delete a mockup template | 0 |
|
|
74
61
|
| `create_studio_session` | Create an embedded editor session | 0 |
|
|
62
|
+
| `create_webhook_endpoint` | Register a webhook for async job completion | 0 |
|
|
63
|
+
| `list_webhook_endpoints` | List your webhook endpoints | 0 |
|
|
64
|
+
| `update_webhook_endpoint` | Edit or enable/disable a webhook endpoint | 0 |
|
|
65
|
+
| `delete_webhook_endpoint` | Delete a webhook endpoint | 0 |
|
|
66
|
+
| `rotate_webhook_secret` | Rotate a webhook signing secret | 0 |
|
|
67
|
+
| `test_webhook_endpoint` | Send a signed `webhook.test` event | 0 |
|
|
68
|
+
| `list_webhook_deliveries` | List delivery attempts for an endpoint | 0 |
|
|
69
|
+
| `replay_webhook_delivery` | Replay a single failed delivery | 0 |
|
|
70
|
+
|
|
71
|
+
### Async jobs
|
|
72
|
+
|
|
73
|
+
`render_mockup` and `upload_psd` accept `is_async: true`, and `render_video` is
|
|
74
|
+
always async. These return a `job_id` immediately (HTTP 202) instead of a
|
|
75
|
+
final result. Poll it with `get_job`, or let `wait_for_job` block until the job
|
|
76
|
+
reaches a terminal status and hands back `result_url`, `mockup_uuid`, `model`,
|
|
77
|
+
`credits_charged`, and `payg` (`{credits, unit_price, cost}` for pay-as-you-go
|
|
78
|
+
jobs, otherwise `null`).
|
|
79
|
+
|
|
80
|
+
### Webhooks
|
|
81
|
+
|
|
82
|
+
Register an endpoint with `create_webhook_endpoint` to be notified when async
|
|
83
|
+
jobs finish. Deliveries are signed with TWO headers: `X-SudoMock-Signature`
|
|
84
|
+
(a hex HMAC-SHA256 over `${timestamp}.${rawBody}` using the secret returned at
|
|
85
|
+
creation/rotation) and `X-SudoMock-Timestamp` (unix seconds). Verify in constant
|
|
86
|
+
time and reject if `|now - timestamp| > 300s`. The delivery body is
|
|
87
|
+
`{event, job_id, kind, status, result_url, error, created_at}`. Event types:
|
|
88
|
+
`render.succeeded`, `render.failed`, `upload.succeeded`, `video.succeeded`,
|
|
89
|
+
`video.failed`, `webhook.test`.
|
|
75
90
|
|
|
76
91
|
## Example Prompts
|
|
77
92
|
|
|
78
93
|
- "List my mockup templates"
|
|
79
94
|
- "Render the t-shirt mockup with this design: https://example.com/logo.png"
|
|
95
|
+
- "List my 2D mockups, then render the first one with this artwork: https://example.com/logo.png"
|
|
96
|
+
- "Render this design asynchronously and wait for it to finish"
|
|
97
|
+
- "Animate the hoodie mockup into a 5-second video clip"
|
|
80
98
|
- "Upload this PSD as a new template: https://example.com/mockup.psd"
|
|
99
|
+
- "Set up a webhook at https://example.com/hooks so I get notified when renders finish"
|
|
81
100
|
- "How many credits do I have left?"
|
|
82
101
|
|
|
83
|
-
## Resources
|
|
84
|
-
|
|
85
|
-
The server provides built-in documentation:
|
|
86
|
-
|
|
87
|
-
- **Quick Start Guide** -- How to use the tools step by step
|
|
88
|
-
- **Pricing** -- Live plan and credit information
|
|
89
|
-
- **Formats** -- Supported output formats, blend modes, and PSD requirements
|
|
90
|
-
|
|
91
102
|
## Links
|
|
92
103
|
|
|
93
104
|
- [Dashboard](https://sudomock.com/dashboard) -- Manage mockups and API keys
|
package/dist/index.d.ts
CHANGED
|
@@ -8,5 +8,20 @@
|
|
|
8
8
|
* Auth: SUDOMOCK_API_KEY environment variable
|
|
9
9
|
* Transport: stdio (local process)
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
|
+
/**
|
|
13
|
+
* A queued (202 Accepted) async submission carries a job_id + status_url.
|
|
14
|
+
* Surface that contract plainly so an agent knows to poll instead of hunting
|
|
15
|
+
* for a result_url that does not exist yet. Every async submit endpoint
|
|
16
|
+
* (/renders, /psd/upload, /renders/video) returns `job_id` in its 202 body.
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatJobAccepted(result: unknown): string;
|
|
19
|
+
export declare const TERMINAL_JOB_STATUSES: Set<string>;
|
|
20
|
+
/**
|
|
21
|
+
* A job is done when its status is terminal. The poll response (GET
|
|
22
|
+
* /api/v1/jobs/{job_id}) always reports the job state in the `status` field.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isTerminalJob(job: Record<string, unknown>): boolean;
|
|
25
|
+
declare const server: McpServer;
|
|
26
|
+
export { server };
|
|
12
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2GpE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAezD;AAED,eAAO,MAAM,qBAAqB,aAAmC,CAAC;AAWtE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAGnE;AAMD,QAAA,MAAM,MAAM,WAGV,CAAC;AAqxBH,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
12
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
13
|
+
import { pathToFileURL } from "node:url";
|
|
13
14
|
import { z } from "zod";
|
|
14
15
|
// ---------------------------------------------------------------------------
|
|
15
16
|
// Configuration
|
|
@@ -17,7 +18,7 @@ import { z } from "zod";
|
|
|
17
18
|
const BASE_URL = "https://api.sudomock.com";
|
|
18
19
|
const DEFAULT_TIMEOUT = 30_000;
|
|
19
20
|
const RENDER_TIMEOUT = 120_000;
|
|
20
|
-
const USER_AGENT = "SudoMock-MCP/1.0 (stdio)";
|
|
21
|
+
const USER_AGENT = "SudoMock-MCP/1.3.0 (stdio)";
|
|
21
22
|
function getApiKey() {
|
|
22
23
|
const key = process.env.SUDOMOCK_API_KEY;
|
|
23
24
|
if (!key) {
|
|
@@ -86,11 +87,52 @@ async function apiRequest({ method, path, params, body, timeout = DEFAULT_TIMEOU
|
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
// ---------------------------------------------------------------------------
|
|
90
|
+
// Async job helpers
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
/**
|
|
93
|
+
* A queued (202 Accepted) async submission carries a job_id + status_url.
|
|
94
|
+
* Surface that contract plainly so an agent knows to poll instead of hunting
|
|
95
|
+
* for a result_url that does not exist yet. Every async submit endpoint
|
|
96
|
+
* (/renders, /psd/upload, /renders/video) returns `job_id` in its 202 body.
|
|
97
|
+
*/
|
|
98
|
+
export function formatJobAccepted(result) {
|
|
99
|
+
const r = (result ?? {});
|
|
100
|
+
const jobId = r.job_id ?? null;
|
|
101
|
+
const statusUrl = r.status_url ?? (jobId ? `/api/v1/jobs/${jobId}` : null);
|
|
102
|
+
const summary = {
|
|
103
|
+
accepted: true,
|
|
104
|
+
job_id: jobId,
|
|
105
|
+
kind: r.kind ?? null,
|
|
106
|
+
status: r.status ?? "queued",
|
|
107
|
+
status_url: statusUrl,
|
|
108
|
+
next_step: "Poll get_job with this job_id, or call wait_for_job to block until it finishes.",
|
|
109
|
+
raw: result,
|
|
110
|
+
};
|
|
111
|
+
return JSON.stringify(summary, null, 2);
|
|
112
|
+
}
|
|
113
|
+
export const TERMINAL_JOB_STATUSES = new Set(["succeeded", "failed"]);
|
|
114
|
+
/** GET /api/v1/jobs/{job_id} -- owner-scoped job status snapshot. */
|
|
115
|
+
async function getJob(jobId) {
|
|
116
|
+
const result = (await apiRequest({
|
|
117
|
+
method: "GET",
|
|
118
|
+
path: `/api/v1/jobs/${jobId}`,
|
|
119
|
+
}));
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* A job is done when its status is terminal. The poll response (GET
|
|
124
|
+
* /api/v1/jobs/{job_id}) always reports the job state in the `status` field.
|
|
125
|
+
*/
|
|
126
|
+
export function isTerminalJob(job) {
|
|
127
|
+
const status = typeof job.status === "string" ? job.status : "";
|
|
128
|
+
return TERMINAL_JOB_STATUSES.has(status);
|
|
129
|
+
}
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
89
131
|
// Server
|
|
90
132
|
// ---------------------------------------------------------------------------
|
|
91
133
|
const server = new McpServer({
|
|
92
134
|
name: "SudoMock",
|
|
93
|
-
version: "1.
|
|
135
|
+
version: "1.3.0",
|
|
94
136
|
});
|
|
95
137
|
// ---------------------------------------------------------------------------
|
|
96
138
|
// Tool 1: list_mockups
|
|
@@ -99,13 +141,15 @@ server.tool("list_mockups", "List your uploaded mockup templates with UUIDs, nam
|
|
|
99
141
|
limit: z.number().min(1).max(100).default(20).describe("Results per page (1-100, default 20)"),
|
|
100
142
|
offset: z.number().min(0).default(0).describe("Pagination offset (default 0)"),
|
|
101
143
|
name: z.string().optional().describe("Filter by name (case-insensitive substring match)"),
|
|
102
|
-
|
|
144
|
+
created_after: z.string().optional().describe("Only mockups created after this ISO 8601 timestamp"),
|
|
145
|
+
created_before: z.string().optional().describe("Only mockups created before this ISO 8601 timestamp"),
|
|
146
|
+
sort_by: z.enum(["created_at", "updated_at", "name"]).default("created_at").describe("Sort field"),
|
|
103
147
|
sort_order: z.enum(["asc", "desc"]).default("desc").describe("Sort direction"),
|
|
104
|
-
}, async ({ limit, offset, name, sort_by, sort_order }) => {
|
|
148
|
+
}, async ({ limit, offset, name, created_after, created_before, sort_by, sort_order }) => {
|
|
105
149
|
const result = await apiRequest({
|
|
106
150
|
method: "GET",
|
|
107
151
|
path: "/api/v1/mockups",
|
|
108
|
-
params: { limit, offset, name, sort_by, sort_order },
|
|
152
|
+
params: { limit, offset, name, created_after, created_before, sort: sort_by, order: sort_order },
|
|
109
153
|
});
|
|
110
154
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
111
155
|
});
|
|
@@ -156,8 +200,8 @@ server.tool("render_mockup", "Render a mockup by placing artwork onto a PSD temp
|
|
|
156
200
|
artwork_url: z.string().describe("Public URL of the artwork image (PNG/JPG/WebP) to place on the mockup"),
|
|
157
201
|
fit: z.enum(["fill", "contain", "cover"]).default("fill").describe("How artwork fills the smart object area"),
|
|
158
202
|
image_format: z.enum(["webp", "png", "jpg"]).default("webp").describe("Output format"),
|
|
159
|
-
image_size: z.number().min(100).max(10000).default(
|
|
160
|
-
quality: z.number().min(1).max(100).default(
|
|
203
|
+
image_size: z.number().min(100).max(10000).default(2048).describe("Output width in pixels (default 2048)"),
|
|
204
|
+
quality: z.number().min(1).max(100).default(90).describe("Compression quality for webp/jpg (default 90)"),
|
|
161
205
|
dpi: z.number().int().min(72).max(2400).optional().describe("Print resolution 72-2400. Embeds a resolution tag into output metadata (JPEG Exif / PNG pHYs / WebP Exif). Does not change pixel size -- use image_size. jpg/png recommended for max compatibility."),
|
|
162
206
|
rotate: z.number().min(-360).max(360).default(0).describe("Rotate artwork in degrees"),
|
|
163
207
|
flip_horizontal: z.boolean().default(false).describe("Mirror artwork left-right"),
|
|
@@ -168,7 +212,13 @@ server.tool("render_mockup", "Render a mockup by placing artwork onto a PSD temp
|
|
|
168
212
|
contrast: z.number().min(-100).max(100).default(0).describe("Contrast adjustment"),
|
|
169
213
|
opacity: z.number().min(0).max(100).default(100).describe("Layer opacity percentage"),
|
|
170
214
|
saturation: z.number().min(-100).max(100).default(0).describe("Saturation adjustment"),
|
|
215
|
+
vibrance: z.number().min(-100).max(100).default(0).describe("Vibrance adjustment (-100 to 100)"),
|
|
216
|
+
blur: z.number().min(0).max(100).default(0).describe("Gaussian blur strength (0 to 100)"),
|
|
171
217
|
export_label: z.string().optional().describe("Optional label for file naming"),
|
|
218
|
+
is_async: z
|
|
219
|
+
.boolean()
|
|
220
|
+
.default(false)
|
|
221
|
+
.describe("Queue the render instead of waiting for it. When true the API returns 202 with a job_id immediately (no result_url yet) -- poll with get_job, or call wait_for_job to block until it finishes. Use for long renders or when running many in parallel."),
|
|
172
222
|
}, async (args) => {
|
|
173
223
|
const smartObject = {
|
|
174
224
|
uuid: args.smart_object_uuid,
|
|
@@ -186,12 +236,19 @@ server.tool("render_mockup", "Render a mockup by placing artwork onto a PSD temp
|
|
|
186
236
|
blending_mode: args.color_blend_mode ?? "normal",
|
|
187
237
|
};
|
|
188
238
|
}
|
|
189
|
-
if (args.brightness ||
|
|
239
|
+
if (args.brightness ||
|
|
240
|
+
args.contrast ||
|
|
241
|
+
args.opacity !== 100 ||
|
|
242
|
+
args.saturation ||
|
|
243
|
+
args.vibrance ||
|
|
244
|
+
args.blur) {
|
|
190
245
|
smartObject.adjustment_layers = {
|
|
191
246
|
brightness: args.brightness,
|
|
192
247
|
contrast: args.contrast,
|
|
193
248
|
opacity: args.opacity,
|
|
194
249
|
saturation: args.saturation,
|
|
250
|
+
vibrance: args.vibrance,
|
|
251
|
+
blur: args.blur,
|
|
195
252
|
};
|
|
196
253
|
}
|
|
197
254
|
const body = {
|
|
@@ -207,66 +264,314 @@ server.tool("render_mockup", "Render a mockup by placing artwork onto a PSD temp
|
|
|
207
264
|
if (args.export_label) {
|
|
208
265
|
body.export_label = args.export_label;
|
|
209
266
|
}
|
|
267
|
+
if (args.is_async) {
|
|
268
|
+
body.is_async = true;
|
|
269
|
+
}
|
|
210
270
|
const result = await apiRequest({
|
|
211
271
|
method: "POST",
|
|
212
272
|
path: "/api/v1/renders",
|
|
213
273
|
body,
|
|
214
274
|
timeout: RENDER_TIMEOUT,
|
|
215
275
|
});
|
|
276
|
+
if (args.is_async) {
|
|
277
|
+
return { content: [{ type: "text", text: formatJobAccepted(result) }] };
|
|
278
|
+
}
|
|
216
279
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
217
280
|
});
|
|
218
281
|
// ---------------------------------------------------------------------------
|
|
219
|
-
// Tool 6:
|
|
282
|
+
// Tool 6: render_2d_mockup
|
|
220
283
|
// ---------------------------------------------------------------------------
|
|
221
|
-
server.tool("
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
284
|
+
server.tool("render_2d_mockup", "Render artwork onto a saved 2D mockup template (no PSD needed) with perspective correction. Needs mockup_uuid + print_area_uuid. Use list_2d_mockups to find mockup_uuid, then get_2d_mockup to read its quads[].print_area_id for print_area_uuid. Returns the CDN URL of the rendered image. Costs 5 credits. The mockup must be in 'ready' status before it can be rendered.", {
|
|
285
|
+
mockup_uuid: z.string().describe("UUID of the 2D mockup template (from list_2d_mockups, returned as mockup_id)."),
|
|
286
|
+
print_area_uuid: z.string().describe("UUID of the print area to render into (from get_2d_mockup, returned as quads[].print_area_id)."),
|
|
287
|
+
artwork_url: z.string().describe("Public URL of the artwork image (PNG/JPG/WebP) to place on the mockup"),
|
|
288
|
+
blend_mode: z.string().default("multiply").describe("Blend mode for artwork over the product surface: 'multiply' (fabric texture, default) or 'normal' (no texture). Free-form string -- other Photoshop blend modes the API supports are accepted too."),
|
|
289
|
+
opacity: z.number().min(0).max(100).default(100).describe("Artwork opacity percentage (0-100)"),
|
|
290
|
+
brightness: z.number().min(-150).max(150).default(0).describe("Brightness adjustment (-150 to 150)"),
|
|
291
|
+
contrast: z.number().min(-100).max(100).default(0).describe("Contrast adjustment (-100 to 100)"),
|
|
292
|
+
saturation: z.number().min(-100).max(100).default(0).describe("Saturation adjustment (-100 to 100)"),
|
|
293
|
+
warp_strength: z.number().min(0).max(2).default(1.5).describe("Warp strength for fabric curvature (0.0-2.0, 0=disabled, default 1.5). Higher = artwork conforms more closely to the surface."),
|
|
294
|
+
rotation: z.number().min(-360).max(360).default(0).describe("Rotate artwork in degrees (-360 to 360)"),
|
|
295
|
+
position: z
|
|
296
|
+
.enum([
|
|
297
|
+
"center",
|
|
298
|
+
"top_left",
|
|
299
|
+
"top_center",
|
|
300
|
+
"top_right",
|
|
301
|
+
"center_left",
|
|
302
|
+
"center_right",
|
|
303
|
+
"bottom_left",
|
|
304
|
+
"bottom_center",
|
|
305
|
+
"bottom_right",
|
|
306
|
+
])
|
|
307
|
+
.default("center")
|
|
308
|
+
.describe("Placement within the print area (default 'center')"),
|
|
309
|
+
coverage: z.number().min(10).max(100).default(70).describe("Percentage of the print area to cover (10-100, default 70)"),
|
|
310
|
+
fit: z.enum(["contain", "fill", "cover"]).default("contain").describe("How artwork fits the print area - 'contain' (fit inside, default), 'fill' (stretch), 'cover' (fill and crop)"),
|
|
311
|
+
image_format: z.enum(["webp", "png", "jpg"]).default("webp").describe("Output format - 'webp' (smaller, recommended), 'png' (lossless), 'jpg'"),
|
|
312
|
+
image_size: z.number().min(100).max(10000).default(2048).describe("Output width in pixels (100-10000, default 2048)"),
|
|
313
|
+
quality: z.number().min(1).max(100).default(90).describe("Compression quality for webp/jpg (1-100, default 90)"),
|
|
314
|
+
}, async (args) => {
|
|
230
315
|
const body = {
|
|
231
|
-
|
|
232
|
-
|
|
316
|
+
mockup_uuid: args.mockup_uuid,
|
|
317
|
+
print_areas: [
|
|
318
|
+
{
|
|
319
|
+
uuid: args.print_area_uuid,
|
|
320
|
+
artwork_url: args.artwork_url,
|
|
321
|
+
adjustments: {
|
|
322
|
+
blend_mode: args.blend_mode,
|
|
323
|
+
opacity: args.opacity,
|
|
324
|
+
brightness: args.brightness,
|
|
325
|
+
contrast: args.contrast,
|
|
326
|
+
saturation: args.saturation,
|
|
327
|
+
warp_strength: args.warp_strength,
|
|
328
|
+
},
|
|
329
|
+
placement: {
|
|
330
|
+
position: args.position,
|
|
331
|
+
coverage: args.coverage,
|
|
332
|
+
fit: args.fit,
|
|
333
|
+
rotation: args.rotation,
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
],
|
|
233
337
|
export_options: {
|
|
234
|
-
image_format,
|
|
235
|
-
|
|
236
|
-
|
|
338
|
+
image_format: args.image_format,
|
|
339
|
+
image_size: args.image_size,
|
|
340
|
+
quality: args.quality,
|
|
237
341
|
},
|
|
238
342
|
};
|
|
239
|
-
if (product_type)
|
|
240
|
-
body.product_type = product_type;
|
|
241
|
-
if (segment_index !== undefined)
|
|
242
|
-
body.segment_index = segment_index;
|
|
243
343
|
const result = await apiRequest({
|
|
244
344
|
method: "POST",
|
|
245
|
-
path: "/api/v1/sudoai/render",
|
|
345
|
+
path: "/api/v1/sudoai/2d-mockup/render",
|
|
246
346
|
body,
|
|
247
347
|
timeout: RENDER_TIMEOUT,
|
|
248
348
|
});
|
|
249
349
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
250
350
|
});
|
|
251
351
|
// ---------------------------------------------------------------------------
|
|
352
|
+
// Tool: list_2d_mockups
|
|
353
|
+
// ---------------------------------------------------------------------------
|
|
354
|
+
server.tool("list_2d_mockups", "List your saved SudoAI 2D mockup templates (no PSD). Returns each mockup's mockup_id, name, status, thumbnail, dimensions, and print_areas. Use the mockup_id with get_2d_mockup (to read print_area UUIDs) or render_2d_mockup. Costs 0 credits.", {
|
|
355
|
+
limit: z.number().min(1).max(100).default(20).describe("Results per page (1-100, default 20)"),
|
|
356
|
+
offset: z.number().min(0).default(0).describe("Pagination offset (default 0)"),
|
|
357
|
+
}, async ({ limit, offset }) => {
|
|
358
|
+
const result = await apiRequest({
|
|
359
|
+
method: "GET",
|
|
360
|
+
path: "/api/v1/sudoai/2d-mockups",
|
|
361
|
+
params: { limit, offset },
|
|
362
|
+
});
|
|
363
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
364
|
+
});
|
|
365
|
+
// ---------------------------------------------------------------------------
|
|
366
|
+
// Tool: get_2d_mockup
|
|
367
|
+
// ---------------------------------------------------------------------------
|
|
368
|
+
server.tool("get_2d_mockup", "Get one SudoAI 2D mockup's full details: status, thumbnail, source dimensions, and quads[] (each with print_area_id). Use a quads[].print_area_id as the print_area_uuid for render_2d_mockup. Costs 0 credits.", {
|
|
369
|
+
mockup_id: z.string().describe("UUID of the 2D mockup (mockup_id from list_2d_mockups)"),
|
|
370
|
+
}, async ({ mockup_id }) => {
|
|
371
|
+
const result = await apiRequest({
|
|
372
|
+
method: "GET",
|
|
373
|
+
path: `/api/v1/sudoai/2d-mockup/${mockup_id}`,
|
|
374
|
+
});
|
|
375
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
376
|
+
});
|
|
377
|
+
// ---------------------------------------------------------------------------
|
|
378
|
+
// Tool: delete_2d_mockup
|
|
379
|
+
// ---------------------------------------------------------------------------
|
|
380
|
+
server.tool("delete_2d_mockup", "Permanently delete a SudoAI 2D mockup template and all of its data. Cannot be undone. Costs 0 credits.", {
|
|
381
|
+
mockup_id: z.string().describe("UUID of the 2D mockup to delete (mockup_id from list_2d_mockups)"),
|
|
382
|
+
}, async ({ mockup_id }) => {
|
|
383
|
+
const result = await apiRequest({
|
|
384
|
+
method: "DELETE",
|
|
385
|
+
path: `/api/v1/sudoai/2d-mockup/${mockup_id}`,
|
|
386
|
+
});
|
|
387
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
388
|
+
});
|
|
389
|
+
// ---------------------------------------------------------------------------
|
|
252
390
|
// Tool 7: upload_psd
|
|
253
391
|
// ---------------------------------------------------------------------------
|
|
254
392
|
server.tool("upload_psd", "Upload a Photoshop PSD/PSB file as a new mockup template. The PSD must have at least one Smart Object layer. Processing takes 5-30 seconds.", {
|
|
255
393
|
psd_file_url: z.string().describe("Public URL to a .psd or .psb file (up to Adobe's official PSD file size limit)"),
|
|
256
394
|
psd_name: z.string().optional().describe("Display name for the template (auto-generated from filename if omitted)"),
|
|
257
|
-
|
|
395
|
+
is_async: z
|
|
396
|
+
.boolean()
|
|
397
|
+
.default(false)
|
|
398
|
+
.describe("Queue the upload instead of blocking. When true the API returns 202 with a job_id immediately -- poll with get_job (or wait_for_job) to learn when processing finishes and get the new mockup_uuid. Always free (0 credits), sync or async."),
|
|
399
|
+
}, async ({ psd_file_url, psd_name, is_async }) => {
|
|
258
400
|
const body = { psd_file_url };
|
|
259
401
|
if (psd_name)
|
|
260
402
|
body.psd_name = psd_name;
|
|
403
|
+
if (is_async)
|
|
404
|
+
body.is_async = true;
|
|
261
405
|
const result = await apiRequest({
|
|
262
406
|
method: "POST",
|
|
263
407
|
path: "/api/v1/psd/upload",
|
|
264
408
|
body,
|
|
265
409
|
timeout: RENDER_TIMEOUT,
|
|
266
410
|
});
|
|
411
|
+
if (is_async) {
|
|
412
|
+
return { content: [{ type: "text", text: formatJobAccepted(result) }] };
|
|
413
|
+
}
|
|
414
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
415
|
+
});
|
|
416
|
+
// ---------------------------------------------------------------------------
|
|
417
|
+
// Tool: get_job
|
|
418
|
+
// ---------------------------------------------------------------------------
|
|
419
|
+
server.tool("get_job", "Get the current status of an async job (render, video, or PSD upload) by its job_id. Returns status (queued|running|succeeded|failed), and once succeeded: result_url, mockup_uuid, model, credits_charged, and payg ({credits, unit_price, cost} for pay-as-you-go jobs, else null) -- or error if failed. Get the job_id from a render_mockup/upload_psd call with is_async=true, or from render_video. To block until done, use wait_for_job instead.", {
|
|
420
|
+
job_id: z.string().describe("The job_id returned by an async submission (render_mockup is_async, upload_psd is_async, or render_video)"),
|
|
421
|
+
}, async ({ job_id }) => {
|
|
422
|
+
const result = await getJob(job_id);
|
|
267
423
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
268
424
|
});
|
|
269
425
|
// ---------------------------------------------------------------------------
|
|
426
|
+
// Tool: list_jobs
|
|
427
|
+
// ---------------------------------------------------------------------------
|
|
428
|
+
server.tool("list_jobs", "List your async jobs (renders, videos, PSD uploads), newest first. Use this to enumerate in-flight or finished jobs when you do not already hold a job_id. Keyset-paginated: pass the returned next_cursor to fetch the next page. Each job carries job_id, kind, status, model, result_url, mockup_uuid, credits_charged, and (for video) duration_seconds/audio.", {
|
|
429
|
+
kind: z.enum(["video", "render", "upload"]).optional().describe("Filter by job kind. Omit for all kinds."),
|
|
430
|
+
mockup_uuid: z.string().optional().describe("Filter by source mockup UUID (e.g. one mockup's videos). Raw-image videos are never returned by this filter."),
|
|
431
|
+
limit: z.number().int().min(1).max(50).default(20).describe("Max jobs per page (1-50, default 20)"),
|
|
432
|
+
cursor: z.string().optional().describe("Opaque keyset cursor from a prior page's next_cursor"),
|
|
433
|
+
}, async ({ kind, mockup_uuid, limit, cursor }) => {
|
|
434
|
+
const result = await apiRequest({
|
|
435
|
+
method: "GET",
|
|
436
|
+
path: "/api/v1/jobs",
|
|
437
|
+
params: { kind, mockup_uuid, limit, cursor },
|
|
438
|
+
});
|
|
439
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
440
|
+
});
|
|
441
|
+
// ---------------------------------------------------------------------------
|
|
442
|
+
// Tool: wait_for_job
|
|
443
|
+
// ---------------------------------------------------------------------------
|
|
444
|
+
server.tool("wait_for_job", "Poll an async job until it reaches a terminal status (succeeded or failed), then return the final job. Blocks while polling. Use after render_mockup/upload_psd with is_async=true or after render_video. On success the result includes result_url, mockup_uuid, model, credits_charged, and payg ({credits, unit_price, cost} or null); on failure it includes error.", {
|
|
445
|
+
job_id: z.string().describe("The job_id to wait on (from an async submission or render_video)"),
|
|
446
|
+
poll_interval_seconds: z
|
|
447
|
+
.number()
|
|
448
|
+
.min(1)
|
|
449
|
+
.max(30)
|
|
450
|
+
.default(3)
|
|
451
|
+
.describe("Seconds between status checks (1-30, default 3)"),
|
|
452
|
+
timeout_seconds: z
|
|
453
|
+
.number()
|
|
454
|
+
.min(5)
|
|
455
|
+
.max(900)
|
|
456
|
+
.default(300)
|
|
457
|
+
.describe("Give up after this many seconds if the job has not finished (5-900, default 300)"),
|
|
458
|
+
}, async ({ job_id, poll_interval_seconds, timeout_seconds }) => {
|
|
459
|
+
const deadline = Date.now() + timeout_seconds * 1000;
|
|
460
|
+
let job = await getJob(job_id);
|
|
461
|
+
while (!isTerminalJob(job)) {
|
|
462
|
+
if (Date.now() >= deadline) {
|
|
463
|
+
const timedOut = {
|
|
464
|
+
timed_out: true,
|
|
465
|
+
job_id,
|
|
466
|
+
waited_seconds: timeout_seconds,
|
|
467
|
+
last_status: job.status ?? "unknown",
|
|
468
|
+
message: "Job did not reach a terminal state within timeout_seconds. It may still be running -- call get_job later to check.",
|
|
469
|
+
last_job: job,
|
|
470
|
+
};
|
|
471
|
+
return { content: [{ type: "text", text: JSON.stringify(timedOut, null, 2) }] };
|
|
472
|
+
}
|
|
473
|
+
await new Promise((resolve) => setTimeout(resolve, poll_interval_seconds * 1000));
|
|
474
|
+
job = await getJob(job_id);
|
|
475
|
+
}
|
|
476
|
+
return { content: [{ type: "text", text: JSON.stringify(job, null, 2) }] };
|
|
477
|
+
});
|
|
478
|
+
// ---------------------------------------------------------------------------
|
|
479
|
+
// Tool: render_video
|
|
480
|
+
// ---------------------------------------------------------------------------
|
|
481
|
+
server.tool("render_video", "Animate a mockup into an AI video clip. TWO input modes (supply exactly one): RENDER mode (mockup_uuid + smart_object_uuid + artwork) produces a still render from the mockup (same shape as render_mockup), then animates it; RAW-IMAGE mode (image_url) animates a public image URL directly with no render step. Either way an auto-routed image-to-video model does the animation. ALWAYS async: returns 202 with a job_id immediately -- pair with get_job or wait_for_job. Credit cost is computed from model x duration x audio. duration_seconds must be one of the chosen model's allowed durations or the call fails with 400.", {
|
|
482
|
+
mockup_uuid: z.string().optional().describe("RENDER MODE: UUID of the mockup to animate (from list_mockups or upload_psd). Required in render mode. In raw-image mode it is an optional association (groups the clip under that mockup's 'Past clips')."),
|
|
483
|
+
smart_object_uuid: z.string().optional().describe("RENDER MODE: UUID of the smart object layer to place artwork on (from get_mockup_details). Required in render mode; omit in raw-image mode."),
|
|
484
|
+
artwork_url: z.string().optional().describe("RENDER MODE: public URL of the artwork image (PNG/JPG/WebP) to place on the mockup before animating. Provide this OR artwork_base64. Omit in raw-image mode."),
|
|
485
|
+
artwork_base64: z.string().optional().describe("RENDER MODE: raw base64-encoded artwork bytes (no data: prefix). Alternative to artwork_url that skips a server-side download (faster). Provide this OR artwork_url."),
|
|
486
|
+
artwork_content_type: z.enum(["image/png", "image/jpeg", "image/webp", "image/gif"]).optional().describe("MIME type for artwork_base64 (defaults to image/png if omitted)."),
|
|
487
|
+
image_url: z.string().optional().describe("RAW-IMAGE MODE: a public https png/jpg URL to animate directly (general image-to-video, no render step). Supply this OR (mockup_uuid + smart_object_uuid + artwork), never both."),
|
|
488
|
+
fit: z.enum(["fill", "contain", "cover"]).default("fill").describe("RENDER MODE: how artwork fills the smart object area in the still frame"),
|
|
489
|
+
asset_width: z.number().int().min(1).optional().describe("RENDER MODE: custom artwork width in pixels (overrides fit sizing)."),
|
|
490
|
+
asset_height: z.number().int().min(1).optional().describe("RENDER MODE: custom artwork height in pixels (overrides fit sizing)."),
|
|
491
|
+
asset_top: z.number().int().optional().describe("RENDER MODE: artwork top offset in pixels within the smart object area."),
|
|
492
|
+
asset_left: z.number().int().optional().describe("RENDER MODE: artwork left offset in pixels within the smart object area."),
|
|
493
|
+
duration_seconds: z
|
|
494
|
+
.number()
|
|
495
|
+
.int()
|
|
496
|
+
.min(1)
|
|
497
|
+
.max(15)
|
|
498
|
+
.default(5)
|
|
499
|
+
.describe("Clip length in seconds chosen by you. Must be one of the auto-routed model's allowed durations (e.g. Veo [4,5,6,8], Kling [5,10]) or the call is rejected with 400 (INVALID_VIDEO_DURATION). The 1-15 bound here is a coarse guard; the per-model set is the real constraint. The credit cost scales with this value."),
|
|
500
|
+
audio: z
|
|
501
|
+
.boolean()
|
|
502
|
+
.default(false)
|
|
503
|
+
.describe("Generate audio. Default off (muted clips are cheaper). Audio cost depends on the routed model: Veo bundles audio at a premium, Kling v3/2.6 charge an audio premium; Seedance and Wan add no audio cost."),
|
|
504
|
+
motion: z
|
|
505
|
+
.enum(["ambient", "showcase"])
|
|
506
|
+
.default("ambient")
|
|
507
|
+
.describe("'ambient' = subtle looping hero motion that keeps the print readable; 'showcase' = one deliberate camera/product move."),
|
|
508
|
+
advanced_model: z
|
|
509
|
+
.string()
|
|
510
|
+
.optional()
|
|
511
|
+
.describe("Escape hatch: explicit roster model id to override the auto-router (e.g. 'kling-v3-pro'). Eliminated/unknown ids are rejected. Omit to auto-route (recommended)."),
|
|
512
|
+
image_format: z.enum(["webp", "png", "jpg"]).default("webp").describe("Output format of the still input frame"),
|
|
513
|
+
image_size: z.number().min(100).max(10000).default(2048).describe("Width in pixels of the still input frame (default 2048)"),
|
|
514
|
+
quality: z.number().min(1).max(100).default(90).describe("Compression quality for the still input frame (webp/jpg, default 90)"),
|
|
515
|
+
webhook_url: z
|
|
516
|
+
.string()
|
|
517
|
+
.optional()
|
|
518
|
+
.describe("Optional completion webhook URL. Best-effort push; polling get_job remains the source of truth."),
|
|
519
|
+
}, async (args) => {
|
|
520
|
+
const video = {
|
|
521
|
+
duration_seconds: args.duration_seconds,
|
|
522
|
+
audio: args.audio,
|
|
523
|
+
motion: args.motion,
|
|
524
|
+
};
|
|
525
|
+
if (args.advanced_model) {
|
|
526
|
+
video.advanced_model = args.advanced_model;
|
|
527
|
+
}
|
|
528
|
+
const body = {
|
|
529
|
+
export_options: {
|
|
530
|
+
image_format: args.image_format,
|
|
531
|
+
image_size: args.image_size,
|
|
532
|
+
quality: args.quality,
|
|
533
|
+
},
|
|
534
|
+
video,
|
|
535
|
+
};
|
|
536
|
+
if (args.image_url) {
|
|
537
|
+
// RAW-IMAGE mode: animate the URL directly (no render). mockup_uuid, when
|
|
538
|
+
// present, is an optional association only -- the API ignores it as a render
|
|
539
|
+
// input. The two render-vs-raw modes are mutually exclusive (BE enforces XOR).
|
|
540
|
+
body.image_url = args.image_url;
|
|
541
|
+
if (args.mockup_uuid)
|
|
542
|
+
body.mockup_uuid = args.mockup_uuid;
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
// RENDER mode: build the i2v input still from the mockup + artwork.
|
|
546
|
+
const asset = { fit: args.fit };
|
|
547
|
+
if (args.artwork_url)
|
|
548
|
+
asset.url = args.artwork_url;
|
|
549
|
+
if (args.artwork_base64) {
|
|
550
|
+
asset.base64 = args.artwork_base64;
|
|
551
|
+
if (args.artwork_content_type)
|
|
552
|
+
asset.content_type = args.artwork_content_type;
|
|
553
|
+
}
|
|
554
|
+
if (args.asset_width !== undefined || args.asset_height !== undefined) {
|
|
555
|
+
asset.size = { width: args.asset_width, height: args.asset_height };
|
|
556
|
+
}
|
|
557
|
+
if (args.asset_top !== undefined || args.asset_left !== undefined) {
|
|
558
|
+
asset.position = { top: args.asset_top, left: args.asset_left };
|
|
559
|
+
}
|
|
560
|
+
body.mockup_uuid = args.mockup_uuid;
|
|
561
|
+
body.smart_objects = [{ uuid: args.smart_object_uuid, asset }];
|
|
562
|
+
}
|
|
563
|
+
if (args.webhook_url) {
|
|
564
|
+
body.webhook = { url: args.webhook_url };
|
|
565
|
+
}
|
|
566
|
+
const result = await apiRequest({
|
|
567
|
+
method: "POST",
|
|
568
|
+
path: "/api/v1/renders/video",
|
|
569
|
+
body,
|
|
570
|
+
timeout: RENDER_TIMEOUT,
|
|
571
|
+
});
|
|
572
|
+
return { content: [{ type: "text", text: formatJobAccepted(result) }] };
|
|
573
|
+
});
|
|
574
|
+
// ---------------------------------------------------------------------------
|
|
270
575
|
// Tool 8: get_account
|
|
271
576
|
// ---------------------------------------------------------------------------
|
|
272
577
|
server.tool("get_account", "Get your account info: subscription plan, credit balance, usage stats, billing period, and API key details.", {}, async () => {
|
|
@@ -279,14 +584,139 @@ server.tool("get_account", "Get your account info: subscription plan, credit bal
|
|
|
279
584
|
// ---------------------------------------------------------------------------
|
|
280
585
|
// Tool 9: create_studio_session
|
|
281
586
|
// ---------------------------------------------------------------------------
|
|
282
|
-
server.tool("create_studio_session", "Create an embedded studio session for interactive mockup editing in a web page. Returns a 15-minute session token for iframe embedding.", {
|
|
587
|
+
server.tool("create_studio_session", "Create an embedded studio session for interactive mockup editing in a web page. Returns a 15-minute session token (sess_...) for iframe embedding; the token auto-extends on use. Authenticated with your API key.", {
|
|
283
588
|
mockup_uuid: z.string().describe("UUID of the mockup to edit"),
|
|
284
|
-
|
|
285
|
-
}, async ({ mockup_uuid,
|
|
589
|
+
product_id: z.string().optional().describe("Optional platform product ID to associate with the session"),
|
|
590
|
+
}, async ({ mockup_uuid, product_id }) => {
|
|
591
|
+
const body = { mockup_uuid };
|
|
592
|
+
if (product_id)
|
|
593
|
+
body.product_id = product_id;
|
|
286
594
|
const result = await apiRequest({
|
|
287
595
|
method: "POST",
|
|
288
596
|
path: "/api/v1/studio/create-session",
|
|
289
|
-
body
|
|
597
|
+
body,
|
|
598
|
+
});
|
|
599
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
600
|
+
});
|
|
601
|
+
// ---------------------------------------------------------------------------
|
|
602
|
+
// Webhook endpoints
|
|
603
|
+
//
|
|
604
|
+
// Manage outbound webhooks so your endpoint is notified when async jobs finish.
|
|
605
|
+
// Deliveries are signed with TWO headers: "X-SudoMock-Signature: <hex>" (the
|
|
606
|
+
// HMAC-SHA256 over `${timestamp}.${rawBody}` with the endpoint's secret) and
|
|
607
|
+
// "X-SudoMock-Timestamp: <unix-seconds>". Verify in constant time and reject if
|
|
608
|
+
// |now - timestamp| > 300s (User-Agent SudoMock-Webhook/1.0). The delivery body
|
|
609
|
+
// is {event, job_id, kind, status, result_url, error, created_at}.
|
|
610
|
+
//
|
|
611
|
+
// Event types: render.succeeded, render.failed, upload.succeeded,
|
|
612
|
+
// video.succeeded, video.failed, webhook.test.
|
|
613
|
+
// ---------------------------------------------------------------------------
|
|
614
|
+
const WEBHOOK_EVENT_TYPES = [
|
|
615
|
+
"render.succeeded",
|
|
616
|
+
"render.failed",
|
|
617
|
+
"upload.succeeded",
|
|
618
|
+
"video.succeeded",
|
|
619
|
+
"video.failed",
|
|
620
|
+
"webhook.test",
|
|
621
|
+
];
|
|
622
|
+
server.tool("create_webhook_endpoint", "Register a webhook endpoint that SudoMock calls when async jobs finish. The signing secret is returned IN FULL exactly once here -- store it to verify the HMAC carried in the X-SudoMock-Signature header (with X-SudoMock-Timestamp) on incoming deliveries. URL must be https and publicly routable.", {
|
|
623
|
+
url: z.string().describe("https endpoint URL to receive POST deliveries (publicly routable; private/loopback hosts are rejected)"),
|
|
624
|
+
event_types: z
|
|
625
|
+
.array(z.enum(WEBHOOK_EVENT_TYPES))
|
|
626
|
+
.default([])
|
|
627
|
+
.describe("Event types to subscribe to (render.succeeded, render.failed, upload.succeeded, video.succeeded, video.failed, webhook.test). Pass an empty array (the default) to subscribe to ALL events."),
|
|
628
|
+
description: z.string().max(255).optional().describe("Optional human-readable label for this endpoint"),
|
|
629
|
+
}, async ({ url, event_types, description }) => {
|
|
630
|
+
const body = { url, event_types };
|
|
631
|
+
if (description)
|
|
632
|
+
body.description = description;
|
|
633
|
+
const result = await apiRequest({
|
|
634
|
+
method: "POST",
|
|
635
|
+
path: "/api/v1/webhook-endpoints",
|
|
636
|
+
body,
|
|
637
|
+
});
|
|
638
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
639
|
+
});
|
|
640
|
+
server.tool("list_webhook_endpoints", "List your registered webhook endpoints (id, url, subscribed event_types, enabled state). Secrets are NOT returned here -- only at creation and rotation.", {}, async () => {
|
|
641
|
+
const result = await apiRequest({
|
|
642
|
+
method: "GET",
|
|
643
|
+
path: "/api/v1/webhook-endpoints",
|
|
644
|
+
});
|
|
645
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
646
|
+
});
|
|
647
|
+
server.tool("update_webhook_endpoint", "Update a webhook endpoint in place: change its url, description, subscribed event_types, or enable/disable it (enabled:false pauses deliveries without losing the signing secret). All fields optional -- only the ones you pass are changed. The secret is NOT rotated or returned here.", {
|
|
648
|
+
endpoint_id: z.string().describe("The id of the webhook endpoint to update (from list_webhook_endpoints)"),
|
|
649
|
+
url: z.string().optional().describe("New https endpoint URL (publicly routable; private/loopback hosts are rejected)"),
|
|
650
|
+
description: z.string().max(255).optional().describe("New human-readable label"),
|
|
651
|
+
event_types: z
|
|
652
|
+
.array(z.enum(WEBHOOK_EVENT_TYPES))
|
|
653
|
+
.optional()
|
|
654
|
+
.describe("Replacement list of subscribed event types. Pass an empty array to subscribe to ALL events."),
|
|
655
|
+
enabled: z.boolean().optional().describe("Set false to pause deliveries (secret preserved), true to resume"),
|
|
656
|
+
}, async ({ endpoint_id, url, description, event_types, enabled }) => {
|
|
657
|
+
const body = {};
|
|
658
|
+
if (url !== undefined)
|
|
659
|
+
body.url = url;
|
|
660
|
+
if (description !== undefined)
|
|
661
|
+
body.description = description;
|
|
662
|
+
if (event_types !== undefined)
|
|
663
|
+
body.event_types = event_types;
|
|
664
|
+
if (enabled !== undefined)
|
|
665
|
+
body.enabled = enabled;
|
|
666
|
+
const result = await apiRequest({
|
|
667
|
+
method: "PATCH",
|
|
668
|
+
path: `/api/v1/webhook-endpoints/${endpoint_id}`,
|
|
669
|
+
body,
|
|
670
|
+
});
|
|
671
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
672
|
+
});
|
|
673
|
+
server.tool("delete_webhook_endpoint", "Permanently delete a webhook endpoint. SudoMock stops delivering to it. Cannot be undone.", {
|
|
674
|
+
endpoint_id: z.string().describe("The id of the webhook endpoint to delete (from list_webhook_endpoints)"),
|
|
675
|
+
}, async ({ endpoint_id }) => {
|
|
676
|
+
await apiRequest({
|
|
677
|
+
method: "DELETE",
|
|
678
|
+
path: `/api/v1/webhook-endpoints/${endpoint_id}`,
|
|
679
|
+
});
|
|
680
|
+
return { content: [{ type: "text", text: `Webhook endpoint ${endpoint_id} deleted successfully.` }] };
|
|
681
|
+
});
|
|
682
|
+
server.tool("rotate_webhook_secret", "Rotate the signing secret for a webhook endpoint. A new secret is returned IN FULL exactly once -- update your verifier with it. The old secret stops being valid.", {
|
|
683
|
+
endpoint_id: z.string().describe("The id of the webhook endpoint to rotate (from list_webhook_endpoints)"),
|
|
684
|
+
}, async ({ endpoint_id }) => {
|
|
685
|
+
const result = await apiRequest({
|
|
686
|
+
method: "POST",
|
|
687
|
+
path: `/api/v1/webhook-endpoints/${endpoint_id}/rotate-secret`,
|
|
688
|
+
});
|
|
689
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
690
|
+
});
|
|
691
|
+
server.tool("test_webhook_endpoint", "Send a synthetic webhook.test event through the real signed delivery path to verify your endpoint is reachable and your signature verification works. Returns the enqueued test job_id; check the result with list_webhook_deliveries.", {
|
|
692
|
+
endpoint_id: z.string().describe("The id of the webhook endpoint to test (from list_webhook_endpoints)"),
|
|
693
|
+
}, async ({ endpoint_id }) => {
|
|
694
|
+
const result = await apiRequest({
|
|
695
|
+
method: "POST",
|
|
696
|
+
path: `/api/v1/webhook-endpoints/${endpoint_id}/test`,
|
|
697
|
+
});
|
|
698
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
699
|
+
});
|
|
700
|
+
server.tool("list_webhook_deliveries", "List delivery attempts for a webhook endpoint (status, event_type, response code, timestamps). Use this to debug failed deliveries before replaying them.", {
|
|
701
|
+
endpoint_id: z.string().describe("The id of the webhook endpoint (from list_webhook_endpoints)"),
|
|
702
|
+
status: z.string().optional().describe("Filter by delivery status (e.g. 'failed', 'succeeded')"),
|
|
703
|
+
event_type: z.enum(WEBHOOK_EVENT_TYPES).optional().describe("Filter by event type"),
|
|
704
|
+
limit: z.number().int().min(1).max(200).default(50).describe("Max deliveries to return (1-200, default 50)"),
|
|
705
|
+
}, async ({ endpoint_id, status, event_type, limit }) => {
|
|
706
|
+
const result = await apiRequest({
|
|
707
|
+
method: "GET",
|
|
708
|
+
path: `/api/v1/webhook-endpoints/${endpoint_id}/deliveries`,
|
|
709
|
+
params: { status, event_type, limit },
|
|
710
|
+
});
|
|
711
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
712
|
+
});
|
|
713
|
+
server.tool("replay_webhook_delivery", "Re-enqueue a single webhook delivery with the SAME idempotency key (job_id:event_type), e.g. after fixing your endpoint. Get delivery_id from list_webhook_deliveries.", {
|
|
714
|
+
endpoint_id: z.string().describe("The id of the webhook endpoint (from list_webhook_endpoints)"),
|
|
715
|
+
delivery_id: z.string().describe("The id of the delivery to replay (from list_webhook_deliveries)"),
|
|
716
|
+
}, async ({ endpoint_id, delivery_id }) => {
|
|
717
|
+
const result = await apiRequest({
|
|
718
|
+
method: "POST",
|
|
719
|
+
path: `/api/v1/webhook-endpoints/${endpoint_id}/deliveries/${delivery_id}/replay`,
|
|
290
720
|
});
|
|
291
721
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
292
722
|
});
|
|
@@ -297,8 +727,16 @@ async function main() {
|
|
|
297
727
|
const transport = new StdioServerTransport();
|
|
298
728
|
await server.connect(transport);
|
|
299
729
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
730
|
+
// Only start the stdio transport when this file is executed directly (the bin
|
|
731
|
+
// entrypoint). When imported (e.g. by the test suite) we expose `server` without
|
|
732
|
+
// connecting, so tests can introspect it over an in-memory transport.
|
|
733
|
+
const isEntrypoint = process.argv[1] !== undefined &&
|
|
734
|
+
import.meta.url === pathToFileURL(process.argv[1]).href;
|
|
735
|
+
if (isEntrypoint) {
|
|
736
|
+
main().catch((err) => {
|
|
737
|
+
console.error("SudoMock MCP server failed to start:", err);
|
|
738
|
+
process.exit(1);
|
|
739
|
+
});
|
|
740
|
+
}
|
|
741
|
+
export { server };
|
|
304
742
|
//# sourceMappingURL=index.js.map
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sudomock/mcp",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"mcpName": "io.github.sudomock/mcp",
|
|
5
5
|
"description": "SudoMock MCP server for Claude, Cursor, and VS Code. Generate photorealistic product mockups from Photoshop PSD templates.",
|
|
6
6
|
"keywords": [
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"build": "tsc",
|
|
35
35
|
"dev": "tsc --watch",
|
|
36
36
|
"start": "node dist/index.js",
|
|
37
|
+
"test": "tsc -p tsconfig.test.json && node --test \".test-build/test/**/*.test.js\"",
|
|
37
38
|
"prepublishOnly": "npm run build"
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|