shipshots-mcp 0.1.0

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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/api-client.d.ts +19 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +126 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +128 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/defaults.d.ts +86 -0
  12. package/dist/defaults.d.ts.map +1 -0
  13. package/dist/defaults.js +360 -0
  14. package/dist/defaults.js.map +1 -0
  15. package/dist/design.d.ts +26 -0
  16. package/dist/design.d.ts.map +1 -0
  17. package/dist/design.js +63 -0
  18. package/dist/design.js.map +1 -0
  19. package/dist/helpers.d.ts +12 -0
  20. package/dist/helpers.d.ts.map +1 -0
  21. package/dist/helpers.js +22 -0
  22. package/dist/helpers.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +44 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/tools/batch.d.ts +4 -0
  28. package/dist/tools/batch.d.ts.map +1 -0
  29. package/dist/tools/batch.js +253 -0
  30. package/dist/tools/batch.js.map +1 -0
  31. package/dist/tools/duplicate.d.ts +4 -0
  32. package/dist/tools/duplicate.d.ts.map +1 -0
  33. package/dist/tools/duplicate.js +91 -0
  34. package/dist/tools/duplicate.js.map +1 -0
  35. package/dist/tools/export.d.ts +4 -0
  36. package/dist/tools/export.d.ts.map +1 -0
  37. package/dist/tools/export.js +67 -0
  38. package/dist/tools/export.js.map +1 -0
  39. package/dist/tools/layers.d.ts +4 -0
  40. package/dist/tools/layers.d.ts.map +1 -0
  41. package/dist/tools/layers.js +493 -0
  42. package/dist/tools/layers.js.map +1 -0
  43. package/dist/tools/project.d.ts +4 -0
  44. package/dist/tools/project.d.ts.map +1 -0
  45. package/dist/tools/project.js +190 -0
  46. package/dist/tools/project.js.map +1 -0
  47. package/dist/tools/screen.d.ts +4 -0
  48. package/dist/tools/screen.d.ts.map +1 -0
  49. package/dist/tools/screen.js +295 -0
  50. package/dist/tools/screen.js.map +1 -0
  51. package/dist/tools/video.d.ts +4 -0
  52. package/dist/tools/video.d.ts.map +1 -0
  53. package/dist/tools/video.js +144 -0
  54. package/dist/tools/video.js.map +1 -0
  55. package/dist/types.d.ts +163 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +4 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +41 -0
@@ -0,0 +1,493 @@
1
+ import { z } from "zod";
2
+ import { createTextLayer, createDeviceLayer, createImageLayer, createShapeLayer, createBadgeLayer, createArrowLayer, autoPosition, } from "../defaults.js";
3
+ import { getProjectAndScreen, unescapeNewlines } from "../helpers.js";
4
+ export function registerLayerTools(server, api) {
5
+ server.tool("add_text_layer", `Add a text layer to a screen. Use \\n for line breaks. Auto-centered at top if no position given.
6
+
7
+ TYPOGRAPHY GUIDE:
8
+ - Headlines: 80-120px, fontWeight 800-900, letterSpacing -2 to -3, lineHeight 1.05
9
+ - Subtitles: 32-44px, fontWeight 400, letterSpacing 0 to 0.5, lineHeight 1.4, opacity 0.7-0.85
10
+ - Body/caption: 24-32px, fontWeight 400
11
+ - Badge/accent: 20-28px, fontWeight 600-700, often uppercase
12
+ Use fontWeight contrast (800 vs 400) within the same font family for hierarchy. Height auto-scales for multi-line text, but you can override it. In connected strips, text can span screens (x + width > 1260).`, {
13
+ project_id: z.string().describe("Project ID"),
14
+ screen_id: z.string().describe("Screen ID"),
15
+ text: z.string().describe("Text content to display"),
16
+ x: z.number().optional().describe("X position in pixels"),
17
+ y: z.number().optional().describe("Y position in pixels"),
18
+ width: z.number().optional().describe("Text box width"),
19
+ height: z.number().optional().describe("Text box height"),
20
+ fontSize: z.number().optional().describe("Font size in pixels (default: 64)"),
21
+ fontFamily: z.string().optional().describe('Font family (default: "Inter")'),
22
+ fontWeight: z.number().optional().describe("Font weight 100-900 (default: 700)"),
23
+ color: z.string().optional().describe('Text color hex (default: "#ffffff")'),
24
+ textAlign: z.enum(["left", "center", "right"]).optional().describe('Text alignment (default: "center")'),
25
+ letterSpacing: z.number().optional().describe("Letter spacing in pixels (default: -1)"),
26
+ lineHeight: z.number().optional().describe("Line height multiplier (default: 1.1)"),
27
+ fillType: z.enum(["solid", "gradient"]).optional().describe('Text fill type (default: "solid")'),
28
+ gradientColor2: z.string().optional().describe("Second gradient color hex"),
29
+ gradientDirection: z.number().optional().describe("Gradient angle in degrees 0-360 (default: 135)"),
30
+ strokeEnabled: z.boolean().optional().describe("Enable text stroke/outline (default: false)"),
31
+ strokeColor: z.string().optional().describe('Stroke color hex (default: "#000000")'),
32
+ strokeWidth: z.number().optional().describe("Stroke width in pixels 0-10 (default: 2)"),
33
+ opacity: z.number().min(0).max(1).optional().describe("Layer opacity 0-1 (default: 1)"),
34
+ shadowEnabled: z.boolean().optional().describe("Enable drop shadow (default: false)"),
35
+ shadowColor: z.string().optional().describe('Shadow color with alpha (default: "#00000040")'),
36
+ shadowBlur: z.number().optional().describe("Shadow blur radius in pixels (default: 20)"),
37
+ shadowOffsetX: z.number().optional().describe("Shadow horizontal offset (default: 0)"),
38
+ shadowOffsetY: z.number().optional().describe("Shadow vertical offset (default: 10)"),
39
+ }, async ({ project_id, screen_id, text, x, y, width, height, fontSize, fontFamily, fontWeight, color, textAlign, letterSpacing, lineHeight, fillType, gradientColor2, gradientDirection, strokeEnabled, strokeColor, strokeWidth, opacity, shadowEnabled, shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY }) => {
40
+ const result = await getProjectAndScreen(api, project_id, screen_id);
41
+ if ("error" in result) {
42
+ return { content: [{ type: "text", text: result.error }], isError: true };
43
+ }
44
+ const { project, screenIndex } = result;
45
+ const screen = project.screens[screenIndex];
46
+ const pos = autoPosition(screen.layers, "text");
47
+ const layer = createTextLayer({
48
+ text: unescapeNewlines(text),
49
+ ...(x !== undefined ? { x } : { x: pos.x }),
50
+ ...(y !== undefined ? { y } : { y: pos.y }),
51
+ ...(width !== undefined ? { width } : {}),
52
+ ...(height !== undefined ? { height } : {}),
53
+ ...(fontSize !== undefined ? { fontSize } : {}),
54
+ ...(fontFamily !== undefined ? { fontFamily } : {}),
55
+ ...(fontWeight !== undefined ? { fontWeight } : {}),
56
+ ...(color !== undefined ? { color } : {}),
57
+ ...(textAlign !== undefined ? { textAlign } : {}),
58
+ ...(letterSpacing !== undefined ? { letterSpacing } : {}),
59
+ ...(lineHeight !== undefined ? { lineHeight } : {}),
60
+ ...(fillType !== undefined ? { fillType } : {}),
61
+ ...(gradientColor2 !== undefined ? { gradientColor2 } : {}),
62
+ ...(gradientDirection !== undefined ? { gradientDirection } : {}),
63
+ ...(strokeEnabled !== undefined ? { strokeEnabled } : {}),
64
+ ...(strokeColor !== undefined ? { strokeColor } : {}),
65
+ ...(strokeWidth !== undefined ? { strokeWidth } : {}),
66
+ ...(opacity !== undefined ? { opacity } : {}),
67
+ ...(shadowEnabled !== undefined ? { shadowEnabled } : {}),
68
+ ...(shadowColor !== undefined ? { shadowColor } : {}),
69
+ ...(shadowBlur !== undefined ? { shadowBlur } : {}),
70
+ ...(shadowOffsetX !== undefined ? { shadowOffsetX } : {}),
71
+ ...(shadowOffsetY !== undefined ? { shadowOffsetY } : {}),
72
+ });
73
+ screen.layers.push(layer);
74
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
75
+ return {
76
+ content: [{ type: "text", text: JSON.stringify({ layerId: layer.id, message: `Text layer "${text}" added.` }, null, 2) }],
77
+ };
78
+ });
79
+ server.tool("add_device_frame_layer", `Add a device frame layer to a screen. Height is auto-calculated from aspect ratio. Use upload_screenshot to set the device screenshot after adding.
80
+
81
+ DEVICE ASPECT RATIOS (width:height):
82
+ - iPhone: ~1:2.17 (width=500 → height≈1085)
83
+ - Android: ~1:2.22 (width=500 → height≈1111)
84
+ - iPad: ~1:1.39 (width=500 → height≈697)
85
+ - MacBook: ~1.6:1 (width=700 → height≈437)
86
+ - Frameless: same as iPhone ratio
87
+
88
+ COMPOSITION PATTERNS:
89
+ - Centered: text at y=100-200, device at y=550+, width ~77% (~994px), rotation 0°
90
+ - Side/diagonal: text upper-left (x=80, y=180), device lower-right (x=300+, y=650+), rotation -5° to -8°
91
+ - Connected strip: device at x=650+, width=950, rotation 3-7° to cross into next screen`, {
92
+ project_id: z.string().describe("Project ID"),
93
+ screen_id: z.string().describe("Screen ID"),
94
+ deviceType: z.enum(["iphone", "android", "ipad", "macbook", "frameless"]).describe("Device type"),
95
+ screenshotUrl: z.string().optional().describe("Screenshot image URL to show inside the device"),
96
+ x: z.number().optional().describe("X position"),
97
+ y: z.number().optional().describe("Y position"),
98
+ width: z.number().optional().describe("Device width (height auto-calculated)"),
99
+ opacity: z.number().min(0).max(1).optional().describe("Layer opacity 0-1 (default: 1)"),
100
+ shadowEnabled: z.boolean().optional().describe("Enable drop shadow (default: false)"),
101
+ shadowColor: z.string().optional().describe('Shadow color with alpha (default: "#00000040")'),
102
+ shadowBlur: z.number().optional().describe("Shadow blur radius in pixels (default: 20)"),
103
+ shadowOffsetX: z.number().optional().describe("Shadow horizontal offset (default: 0)"),
104
+ shadowOffsetY: z.number().optional().describe("Shadow vertical offset (default: 10)"),
105
+ }, async ({ project_id, screen_id, deviceType, screenshotUrl, x, y, width, opacity, shadowEnabled, shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY }) => {
106
+ const result = await getProjectAndScreen(api, project_id, screen_id);
107
+ if ("error" in result) {
108
+ return { content: [{ type: "text", text: result.error }], isError: true };
109
+ }
110
+ const { project, screenIndex } = result;
111
+ const screen = project.screens[screenIndex];
112
+ const layer = createDeviceLayer({
113
+ deviceType: deviceType,
114
+ ...(screenshotUrl ? { screenshotUrl } : {}),
115
+ ...(x !== undefined ? { x } : {}),
116
+ ...(y !== undefined ? { y } : {}),
117
+ ...(width !== undefined ? { width } : {}),
118
+ ...(opacity !== undefined ? { opacity } : {}),
119
+ ...(shadowEnabled !== undefined ? { shadowEnabled } : {}),
120
+ ...(shadowColor !== undefined ? { shadowColor } : {}),
121
+ ...(shadowBlur !== undefined ? { shadowBlur } : {}),
122
+ ...(shadowOffsetX !== undefined ? { shadowOffsetX } : {}),
123
+ ...(shadowOffsetY !== undefined ? { shadowOffsetY } : {}),
124
+ });
125
+ screen.layers.push(layer);
126
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
127
+ return {
128
+ content: [{ type: "text", text: JSON.stringify({ layerId: layer.id, message: `${deviceType} device frame added.` }, null, 2) }],
129
+ };
130
+ });
131
+ server.tool("add_image_layer", `Add an image layer to a screen. Displays an image from a URL.`, {
132
+ project_id: z.string().describe("Project ID"),
133
+ screen_id: z.string().describe("Screen ID"),
134
+ imageUrl: z.string().describe("Image URL"),
135
+ x: z.number().optional().describe("X position"),
136
+ y: z.number().optional().describe("Y position"),
137
+ width: z.number().optional().describe("Image width"),
138
+ height: z.number().optional().describe("Image height"),
139
+ objectFit: z.enum(["cover", "contain", "fill"]).optional().describe('Image fit mode (default: "cover")'),
140
+ borderRadius: z.number().optional().describe("Border radius in pixels"),
141
+ opacity: z.number().min(0).max(1).optional().describe("Layer opacity 0-1 (default: 1)"),
142
+ shadowEnabled: z.boolean().optional().describe("Enable drop shadow (default: false)"),
143
+ shadowColor: z.string().optional().describe('Shadow color with alpha (default: "#00000040")'),
144
+ shadowBlur: z.number().optional().describe("Shadow blur radius in pixels (default: 20)"),
145
+ shadowOffsetX: z.number().optional().describe("Shadow horizontal offset (default: 0)"),
146
+ shadowOffsetY: z.number().optional().describe("Shadow vertical offset (default: 10)"),
147
+ }, async ({ project_id, screen_id, imageUrl, x, y, width, height, objectFit, borderRadius, opacity, shadowEnabled, shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY }) => {
148
+ const result = await getProjectAndScreen(api, project_id, screen_id);
149
+ if ("error" in result) {
150
+ return { content: [{ type: "text", text: result.error }], isError: true };
151
+ }
152
+ const { project, screenIndex } = result;
153
+ const screen = project.screens[screenIndex];
154
+ const layer = createImageLayer({
155
+ imageUrl,
156
+ ...(x !== undefined ? { x } : {}),
157
+ ...(y !== undefined ? { y } : {}),
158
+ ...(width !== undefined ? { width } : {}),
159
+ ...(height !== undefined ? { height } : {}),
160
+ ...(objectFit !== undefined ? { objectFit } : {}),
161
+ ...(borderRadius !== undefined ? { borderRadius } : {}),
162
+ ...(opacity !== undefined ? { opacity } : {}),
163
+ ...(shadowEnabled !== undefined ? { shadowEnabled } : {}),
164
+ ...(shadowColor !== undefined ? { shadowColor } : {}),
165
+ ...(shadowBlur !== undefined ? { shadowBlur } : {}),
166
+ ...(shadowOffsetX !== undefined ? { shadowOffsetX } : {}),
167
+ ...(shadowOffsetY !== undefined ? { shadowOffsetY } : {}),
168
+ });
169
+ screen.layers.push(layer);
170
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
171
+ return {
172
+ content: [{ type: "text", text: JSON.stringify({ layerId: layer.id, message: "Image layer added." }, null, 2) }],
173
+ };
174
+ });
175
+ server.tool("add_shape_layer", `Add a shape layer (rectangle, circle, or rounded rectangle) to a screen.`, {
176
+ project_id: z.string().describe("Project ID"),
177
+ screen_id: z.string().describe("Screen ID"),
178
+ shapeType: z.enum(["rect", "circle", "rounded-rect"]).describe("Shape type"),
179
+ fill: z.string().optional().describe('Fill color hex (default: "#ffffff")'),
180
+ fillType: z.enum(["solid", "gradient", "image"]).optional().describe('Fill type (default: "solid")'),
181
+ gradientColor2: z.string().optional().describe('Second gradient color hex (default: "#000000")'),
182
+ gradientDirection: z.number().optional().describe("Gradient angle in degrees 0-360 (default: 135)"),
183
+ fillImageUrl: z.string().optional().describe("Image URL for image fill"),
184
+ fillImageSize: z.enum(["cover", "contain", "fill"]).optional().describe('Image fill size mode (default: "cover")'),
185
+ x: z.number().optional().describe("X position"),
186
+ y: z.number().optional().describe("Y position"),
187
+ width: z.number().optional().describe("Shape width"),
188
+ height: z.number().optional().describe("Shape height"),
189
+ borderRadius: z.number().optional().describe("Border radius"),
190
+ stroke: z.string().optional().describe("Stroke color"),
191
+ strokeWidth: z.number().optional().describe("Stroke width"),
192
+ opacity: z.number().min(0).max(1).optional().describe("Layer opacity 0-1 (default: 1)"),
193
+ shadowEnabled: z.boolean().optional().describe("Enable drop shadow (default: false)"),
194
+ shadowColor: z.string().optional().describe('Shadow color with alpha (default: "#00000040")'),
195
+ shadowBlur: z.number().optional().describe("Shadow blur radius in pixels (default: 20)"),
196
+ shadowOffsetX: z.number().optional().describe("Shadow horizontal offset (default: 0)"),
197
+ shadowOffsetY: z.number().optional().describe("Shadow vertical offset (default: 10)"),
198
+ }, async ({ project_id, screen_id, shapeType, fill, fillType, gradientColor2, gradientDirection, fillImageUrl, fillImageSize, x, y, width, height, borderRadius, stroke, strokeWidth, opacity, shadowEnabled, shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY }) => {
199
+ const result = await getProjectAndScreen(api, project_id, screen_id);
200
+ if ("error" in result) {
201
+ return { content: [{ type: "text", text: result.error }], isError: true };
202
+ }
203
+ const { project, screenIndex } = result;
204
+ const screen = project.screens[screenIndex];
205
+ const layer = createShapeLayer({
206
+ shape: shapeType,
207
+ ...(fill !== undefined ? { fill } : {}),
208
+ ...(fillType !== undefined ? { fillType } : {}),
209
+ ...(gradientColor2 !== undefined ? { gradientColor2 } : {}),
210
+ ...(gradientDirection !== undefined ? { gradientDirection } : {}),
211
+ ...(fillImageUrl !== undefined ? { fillImageUrl } : {}),
212
+ ...(fillImageSize !== undefined ? { fillImageSize } : {}),
213
+ ...(x !== undefined ? { x } : {}),
214
+ ...(y !== undefined ? { y } : {}),
215
+ ...(width !== undefined ? { width } : {}),
216
+ ...(height !== undefined ? { height } : {}),
217
+ ...(borderRadius !== undefined ? { borderRadius } : {}),
218
+ ...(stroke !== undefined ? { stroke } : {}),
219
+ ...(strokeWidth !== undefined ? { strokeWidth } : {}),
220
+ ...(opacity !== undefined ? { opacity } : {}),
221
+ ...(shadowEnabled !== undefined ? { shadowEnabled } : {}),
222
+ ...(shadowColor !== undefined ? { shadowColor } : {}),
223
+ ...(shadowBlur !== undefined ? { shadowBlur } : {}),
224
+ ...(shadowOffsetX !== undefined ? { shadowOffsetX } : {}),
225
+ ...(shadowOffsetY !== undefined ? { shadowOffsetY } : {}),
226
+ });
227
+ screen.layers.push(layer);
228
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
229
+ return {
230
+ content: [{ type: "text", text: JSON.stringify({ layerId: layer.id, message: `${shapeType} shape added.` }, null, 2) }],
231
+ };
232
+ });
233
+ server.tool("add_badge_layer", `Add a badge layer — social proof pills like star ratings, labels, or download counts.
234
+
235
+ Badge styles:
236
+ - "rating": Rating number + star icons (e.g., "4.8 ★★★★★")
237
+ - "label": Text in a pill (e.g., "Editor's Choice")
238
+ - "count": Number + label (e.g., "1M+ Downloads")
239
+ - "custom": Any text in a pill`, {
240
+ project_id: z.string().describe("Project ID"),
241
+ screen_id: z.string().describe("Screen ID"),
242
+ badgeStyle: z.enum(["rating", "label", "count", "custom"]).optional().describe('Badge style (default: "label")'),
243
+ text: z.string().optional().describe('Badge text (default: "Editor\'s Choice")'),
244
+ x: z.number().optional().describe("X position"),
245
+ y: z.number().optional().describe("Y position"),
246
+ width: z.number().optional().describe("Badge width"),
247
+ height: z.number().optional().describe("Badge height"),
248
+ fontSize: z.number().optional().describe("Font size in pixels (default: 32)"),
249
+ fontFamily: z.string().optional().describe('Font family (default: "system-ui")'),
250
+ fontWeight: z.number().optional().describe("Font weight 100-900 (default: 700)"),
251
+ color: z.string().optional().describe('Text color hex (default: "#ffffff")'),
252
+ backgroundColor: z.string().optional().describe('Background color hex (default: "#000000")'),
253
+ backgroundOpacity: z.number().min(0).max(1).optional().describe("Background opacity 0-1 (default: 0.8)"),
254
+ borderRadius: z.number().optional().describe("Border radius (default: 100)"),
255
+ iconType: z.enum(["star", "download", "check", "none"]).optional().describe('Icon type (default: "none")'),
256
+ iconColor: z.string().optional().describe("Icon color hex"),
257
+ rating: z.number().min(1).max(5).optional().describe("Star rating 1-5 (rating style only)"),
258
+ opacity: z.number().min(0).max(1).optional().describe("Layer opacity 0-1 (default: 1)"),
259
+ shadowEnabled: z.boolean().optional().describe("Enable drop shadow (default: false)"),
260
+ shadowColor: z.string().optional().describe('Shadow color with alpha (default: "#00000040")'),
261
+ shadowBlur: z.number().optional().describe("Shadow blur radius in pixels (default: 20)"),
262
+ shadowOffsetX: z.number().optional().describe("Shadow horizontal offset (default: 0)"),
263
+ shadowOffsetY: z.number().optional().describe("Shadow vertical offset (default: 10)"),
264
+ }, async ({ project_id, screen_id, badgeStyle, text, x, y, width, height, fontSize, fontFamily, fontWeight, color, backgroundColor, backgroundOpacity, borderRadius, iconType, iconColor, rating, opacity, shadowEnabled, shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY }) => {
265
+ const result = await getProjectAndScreen(api, project_id, screen_id);
266
+ if ("error" in result) {
267
+ return { content: [{ type: "text", text: result.error }], isError: true };
268
+ }
269
+ const { project, screenIndex } = result;
270
+ const screen = project.screens[screenIndex];
271
+ const pos = autoPosition(screen.layers, "badge");
272
+ const layer = createBadgeLayer({
273
+ ...(badgeStyle !== undefined ? { badgeStyle } : {}),
274
+ ...(text !== undefined ? { text: unescapeNewlines(text) } : {}),
275
+ ...(x !== undefined ? { x } : { x: pos.x }),
276
+ ...(y !== undefined ? { y } : { y: pos.y }),
277
+ ...(width !== undefined ? { width } : {}),
278
+ ...(height !== undefined ? { height } : {}),
279
+ ...(fontSize !== undefined ? { fontSize } : {}),
280
+ ...(fontFamily !== undefined ? { fontFamily } : {}),
281
+ ...(fontWeight !== undefined ? { fontWeight } : {}),
282
+ ...(color !== undefined ? { color } : {}),
283
+ ...(backgroundColor !== undefined ? { backgroundColor } : {}),
284
+ ...(backgroundOpacity !== undefined ? { backgroundOpacity } : {}),
285
+ ...(borderRadius !== undefined ? { borderRadius } : {}),
286
+ ...(iconType !== undefined ? { iconType } : {}),
287
+ ...(iconColor !== undefined ? { iconColor } : {}),
288
+ ...(rating !== undefined ? { rating } : {}),
289
+ ...(opacity !== undefined ? { opacity } : {}),
290
+ ...(shadowEnabled !== undefined ? { shadowEnabled } : {}),
291
+ ...(shadowColor !== undefined ? { shadowColor } : {}),
292
+ ...(shadowBlur !== undefined ? { shadowBlur } : {}),
293
+ ...(shadowOffsetX !== undefined ? { shadowOffsetX } : {}),
294
+ ...(shadowOffsetY !== undefined ? { shadowOffsetY } : {}),
295
+ });
296
+ screen.layers.push(layer);
297
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
298
+ return {
299
+ content: [{ type: "text", text: JSON.stringify({ layerId: layer.id, message: `Badge layer "${layer.text}" added.` }, null, 2) }],
300
+ };
301
+ });
302
+ server.tool("add_arrow_layer", `Add an arrow/line layer to annotate screenshots. Use fromX/fromY/toX/toY — bounding box is auto-computed.
303
+
304
+ SIZING GUIDE:
305
+ - strokeWidth 5-8 for annotations on a 1260x2736 canvas
306
+ - curvature 20-40 for gentle curves, 0 for straight lines
307
+ - Arrow should span at least 150-200px
308
+
309
+ POSITIONING TIP:
310
+ - Text bounding boxes are wider than visible text. For left-aligned text, visible right edge ≈ x + width*0.7.
311
+ - Start point (fromX/fromY) can overlap other layers. End point (toX/toY) should target the edge of the target element, not inside it.`, {
312
+ project_id: z.string().describe("Project ID"),
313
+ screen_id: z.string().describe("Screen ID"),
314
+ fromX: z.number().optional().describe("Start point X coordinate"),
315
+ fromY: z.number().optional().describe("Start point Y coordinate"),
316
+ toX: z.number().optional().describe("End point X coordinate (where arrowhead points)"),
317
+ toY: z.number().optional().describe("End point Y coordinate"),
318
+ strokeColor: z.string().optional().describe('Arrow color hex (default: "#ffffff")'),
319
+ strokeWidth: z.number().min(1).max(20).optional().describe("Line width in pixels (default: 6)"),
320
+ headStyle: z.enum(["triangle", "circle", "none"]).optional().describe('Arrowhead style (default: "triangle")'),
321
+ curvature: z.number().min(-100).max(100).optional().describe("Curve amount -100 to 100. Positive curves one way, negative the other. 0 = straight (default: 30)"),
322
+ dashed: z.boolean().optional().describe("Dashed line (default: false)"),
323
+ opacity: z.number().min(0).max(1).optional().describe("Layer opacity 0-1 (default: 1)"),
324
+ shadowEnabled: z.boolean().optional().describe("Enable drop shadow (default: false)"),
325
+ shadowColor: z.string().optional().describe('Shadow color with alpha (default: "#00000040")'),
326
+ shadowBlur: z.number().optional().describe("Shadow blur radius in pixels (default: 20)"),
327
+ shadowOffsetX: z.number().optional().describe("Shadow horizontal offset (default: 0)"),
328
+ shadowOffsetY: z.number().optional().describe("Shadow vertical offset (default: 10)"),
329
+ }, async ({ project_id, screen_id, fromX, fromY, toX, toY, strokeColor, strokeWidth, headStyle, curvature, dashed, opacity, shadowEnabled, shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY }) => {
330
+ const result = await getProjectAndScreen(api, project_id, screen_id);
331
+ if ("error" in result) {
332
+ return { content: [{ type: "text", text: result.error }], isError: true };
333
+ }
334
+ const { project, screenIndex } = result;
335
+ const screen = project.screens[screenIndex];
336
+ const layer = createArrowLayer({
337
+ ...(fromX !== undefined ? { fromX } : {}),
338
+ ...(fromY !== undefined ? { fromY } : {}),
339
+ ...(toX !== undefined ? { toX } : {}),
340
+ ...(toY !== undefined ? { toY } : {}),
341
+ ...(strokeColor !== undefined ? { strokeColor } : {}),
342
+ ...(strokeWidth !== undefined ? { strokeWidth } : {}),
343
+ ...(headStyle !== undefined ? { headStyle } : {}),
344
+ ...(curvature !== undefined ? { curvature } : {}),
345
+ ...(dashed !== undefined ? { dashed } : {}),
346
+ ...(opacity !== undefined ? { opacity } : {}),
347
+ ...(shadowEnabled !== undefined ? { shadowEnabled } : {}),
348
+ ...(shadowColor !== undefined ? { shadowColor } : {}),
349
+ ...(shadowBlur !== undefined ? { shadowBlur } : {}),
350
+ ...(shadowOffsetX !== undefined ? { shadowOffsetX } : {}),
351
+ ...(shadowOffsetY !== undefined ? { shadowOffsetY } : {}),
352
+ });
353
+ screen.layers.push(layer);
354
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
355
+ return {
356
+ content: [{ type: "text", text: JSON.stringify({ layerId: layer.id, message: "Arrow layer added." }, null, 2) }],
357
+ };
358
+ });
359
+ server.tool("update_layer", `Update properties of an existing layer (partial update — only specified properties change).
360
+
361
+ ANIMATION OVERRIDES: Set animation_entrance_type to override the preset's default entrance for this layer. Set to "" to clear.`, {
362
+ project_id: z.string().describe("Project ID"),
363
+ screen_id: z.string().describe("Screen ID"),
364
+ layer_id: z.string().describe("Layer ID to update"),
365
+ x: z.number().optional().describe("New X position"),
366
+ y: z.number().optional().describe("New Y position"),
367
+ width: z.number().optional().describe("New width"),
368
+ height: z.number().optional().describe("New height"),
369
+ rotation: z.number().optional().describe("Rotation in degrees"),
370
+ rotateX: z.number().optional().describe("3D tilt on X axis in degrees, -90 to 90 (default: 0)"),
371
+ rotateY: z.number().optional().describe("3D tilt on Y axis in degrees, -90 to 90 (default: 0)"),
372
+ visible: z.boolean().optional().describe("Layer visibility"),
373
+ locked: z.boolean().optional().describe("Layer locked state"),
374
+ opacity: z.number().min(0).max(1).optional().describe("Layer opacity 0-1 (default: 1)"),
375
+ text: z.string().optional().describe("Text content (text layers)"),
376
+ fontSize: z.number().optional().describe("Font size (text layers)"),
377
+ fontFamily: z.string().optional().describe("Font family (text layers)"),
378
+ fontWeight: z.number().optional().describe("Font weight (text layers)"),
379
+ color: z.string().optional().describe("Text color (text layers)"),
380
+ textAlign: z.enum(["left", "center", "right"]).optional().describe("Text alignment"),
381
+ letterSpacing: z.number().optional().describe("Letter spacing in pixels (default: -1)"),
382
+ lineHeight: z.number().optional().describe("Line height multiplier (default: 1.1)"),
383
+ fillType: z.enum(["solid", "gradient", "image"]).optional().describe('Fill type: "solid"|"gradient" for text layers, "solid"|"gradient"|"image" for shape layers'),
384
+ gradientColor2: z.string().optional().describe("Second gradient color (text and shape layers)"),
385
+ gradientDirection: z.number().optional().describe("Gradient angle 0-360 (text and shape layers)"),
386
+ strokeEnabled: z.boolean().optional().describe("Enable text stroke/outline (text layers)"),
387
+ strokeColor: z.string().optional().describe("Stroke color hex (text stroke and arrow layers)"),
388
+ fill: z.string().optional().describe("Fill color (shape layers)"),
389
+ fillImageUrl: z.string().optional().describe("Image URL for image fill (shape layers)"),
390
+ fillImageSize: z.enum(["cover", "contain", "fill"]).optional().describe("Image fill size mode (shape layers)"),
391
+ stroke: z.string().optional().describe("Stroke color (shape layers)"),
392
+ strokeWidth: z.number().optional().describe("Stroke width (shape and text layers)"),
393
+ borderRadius: z.number().optional().describe("Border radius"),
394
+ screenshotUrl: z.string().optional().describe("Screenshot URL (device layers)"),
395
+ imageUrl: z.string().optional().describe("Image URL (image layers)"),
396
+ badgeStyle: z.enum(["rating", "label", "count", "custom"]).optional().describe("Badge style (badge layers)"),
397
+ backgroundColor: z.string().optional().describe("Background color (badge layers)"),
398
+ backgroundOpacity: z.number().min(0).max(1).optional().describe("Background opacity (badge layers)"),
399
+ iconType: z.enum(["star", "download", "check", "none"]).optional().describe("Icon type (badge layers)"),
400
+ iconColor: z.string().optional().describe("Icon color (badge layers)"),
401
+ rating: z.number().min(1).max(5).optional().describe("Star rating 1-5 (badge layers)"),
402
+ headStyle: z.enum(["triangle", "circle", "none"]).optional().describe("Arrowhead style (arrow layers)"),
403
+ direction: z.enum(["right", "left", "up", "down", "auto"]).optional().describe("Arrow direction (arrow layers)"),
404
+ curvature: z.number().min(-100).max(100).optional().describe("Curve amount -100 to 100 (arrow layers)"),
405
+ dashed: z.boolean().optional().describe("Dashed line (arrow layers)"),
406
+ shadowEnabled: z.boolean().optional().describe("Enable drop shadow"),
407
+ shadowColor: z.string().optional().describe("Shadow color with alpha"),
408
+ shadowBlur: z.number().optional().describe("Shadow blur radius in pixels"),
409
+ shadowOffsetX: z.number().optional().describe("Shadow horizontal offset"),
410
+ shadowOffsetY: z.number().optional().describe("Shadow vertical offset"),
411
+ animation_entrance_type: z.string().optional().describe('Override entrance animation type (e.g. "fade-rise", "bounce", "flip"). Set to "" to clear.'),
412
+ animation_entrance_duration: z.number().optional().describe("Override entrance duration in frames"),
413
+ animation_entrance_delay: z.number().optional().describe("Override entrance delay in frames"),
414
+ }, async ({ project_id, screen_id, layer_id, animation_entrance_type, animation_entrance_duration, animation_entrance_delay, ...updates }) => {
415
+ const result = await getProjectAndScreen(api, project_id, screen_id);
416
+ if ("error" in result) {
417
+ return { content: [{ type: "text", text: result.error }], isError: true };
418
+ }
419
+ const { project, screenIndex } = result;
420
+ const screen = project.screens[screenIndex];
421
+ const layerIndex = screen.layers.findIndex((l) => l.id === layer_id);
422
+ if (layerIndex === -1) {
423
+ return { content: [{ type: "text", text: `Error: Layer "${layer_id}" not found.` }], isError: true };
424
+ }
425
+ // Apply non-undefined updates
426
+ const filtered = {};
427
+ for (const [key, value] of Object.entries(updates)) {
428
+ if (value !== undefined) {
429
+ filtered[key] = key === "text" && typeof value === "string" ? unescapeNewlines(value) : value;
430
+ }
431
+ }
432
+ // Handle animation overrides
433
+ if (animation_entrance_type !== undefined || animation_entrance_duration !== undefined || animation_entrance_delay !== undefined) {
434
+ const existing = screen.layers[layerIndex].animation ?? {};
435
+ filtered.animation = {
436
+ ...existing,
437
+ ...(animation_entrance_type !== undefined ? { entranceType: animation_entrance_type || undefined } : {}),
438
+ ...(animation_entrance_duration !== undefined ? { entranceDuration: animation_entrance_duration } : {}),
439
+ ...(animation_entrance_delay !== undefined ? { entranceDelay: animation_entrance_delay } : {}),
440
+ };
441
+ }
442
+ screen.layers[layerIndex] = { ...screen.layers[layerIndex], ...filtered };
443
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
444
+ return {
445
+ content: [{ type: "text", text: JSON.stringify({ layerId: layer_id, message: "Layer updated.", updatedProps: Object.keys(filtered) }, null, 2) }],
446
+ };
447
+ });
448
+ server.tool("remove_layer", `Remove a layer from a screen.`, {
449
+ project_id: z.string().describe("Project ID"),
450
+ screen_id: z.string().describe("Screen ID"),
451
+ layer_id: z.string().describe("Layer ID to remove"),
452
+ }, async ({ project_id, screen_id, layer_id }) => {
453
+ const result = await getProjectAndScreen(api, project_id, screen_id);
454
+ if ("error" in result) {
455
+ return { content: [{ type: "text", text: result.error }], isError: true };
456
+ }
457
+ const { project, screenIndex } = result;
458
+ const screen = project.screens[screenIndex];
459
+ const layerIndex = screen.layers.findIndex((l) => l.id === layer_id);
460
+ if (layerIndex === -1) {
461
+ return { content: [{ type: "text", text: `Error: Layer "${layer_id}" not found.` }], isError: true };
462
+ }
463
+ screen.layers.splice(layerIndex, 1);
464
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
465
+ return {
466
+ content: [{ type: "text", text: JSON.stringify({ message: "Layer removed." }, null, 2) }],
467
+ };
468
+ });
469
+ server.tool("reorder_layers", `Reorder layers on a screen. First ID in the array renders at the back (lowest z-index), last renders on top.`, {
470
+ project_id: z.string().describe("Project ID"),
471
+ screen_id: z.string().describe("Screen ID"),
472
+ layer_ids: z.array(z.string()).describe("Layer IDs in new back-to-front order"),
473
+ }, async ({ project_id, screen_id, layer_ids }) => {
474
+ const result = await getProjectAndScreen(api, project_id, screen_id);
475
+ if ("error" in result) {
476
+ return { content: [{ type: "text", text: result.error }], isError: true };
477
+ }
478
+ const { project, screenIndex } = result;
479
+ const screen = project.screens[screenIndex];
480
+ // Assign new zIndex values based on order
481
+ for (let i = 0; i < layer_ids.length; i++) {
482
+ const layer = screen.layers.find((l) => l.id === layer_ids[i]);
483
+ if (layer) {
484
+ layer.zIndex = i + 1;
485
+ }
486
+ }
487
+ await api.updateProject(project_id, { ...project, screens: project.screens, updatedAt: new Date().toISOString() });
488
+ return {
489
+ content: [{ type: "text", text: JSON.stringify({ message: "Layers reordered.", order: layer_ids }, null, 2) }],
490
+ };
491
+ });
492
+ }
493
+ //# sourceMappingURL=layers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.js","sourceRoot":"","sources":["../../src/tools/layers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerProjectTools(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAqElD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CA8K5E"}