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.
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/dist/api-client.d.ts +19 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +126 -0
- package/dist/api-client.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +128 -0
- package/dist/cli.js.map +1 -0
- package/dist/defaults.d.ts +86 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +360 -0
- package/dist/defaults.js.map +1 -0
- package/dist/design.d.ts +26 -0
- package/dist/design.d.ts.map +1 -0
- package/dist/design.js +63 -0
- package/dist/design.js.map +1 -0
- package/dist/helpers.d.ts +12 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +22 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/batch.d.ts +4 -0
- package/dist/tools/batch.d.ts.map +1 -0
- package/dist/tools/batch.js +253 -0
- package/dist/tools/batch.js.map +1 -0
- package/dist/tools/duplicate.d.ts +4 -0
- package/dist/tools/duplicate.d.ts.map +1 -0
- package/dist/tools/duplicate.js +91 -0
- package/dist/tools/duplicate.js.map +1 -0
- package/dist/tools/export.d.ts +4 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +67 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/layers.d.ts +4 -0
- package/dist/tools/layers.d.ts.map +1 -0
- package/dist/tools/layers.js +493 -0
- package/dist/tools/layers.js.map +1 -0
- package/dist/tools/project.d.ts +4 -0
- package/dist/tools/project.d.ts.map +1 -0
- package/dist/tools/project.js +190 -0
- package/dist/tools/project.js.map +1 -0
- package/dist/tools/screen.d.ts +4 -0
- package/dist/tools/screen.d.ts.map +1 -0
- package/dist/tools/screen.js +295 -0
- package/dist/tools/screen.js.map +1 -0
- package/dist/tools/video.d.ts +4 -0
- package/dist/tools/video.d.ts.map +1 -0
- package/dist/tools/video.js +144 -0
- package/dist/tools/video.js.map +1 -0
- package/dist/types.d.ts +163 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const VIDEO_PRESETS = [
|
|
3
|
+
{
|
|
4
|
+
id: "fade-rise",
|
|
5
|
+
name: "Fade & Rise",
|
|
6
|
+
description: "Layers fade up with stagger, crossfade between screens (default)",
|
|
7
|
+
bestFor: "Modern, clean apps. Safe default choice.",
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "slide-in",
|
|
11
|
+
name: "Slide In",
|
|
12
|
+
description: "Layers slide from right, screens slide left",
|
|
13
|
+
bestFor: "Content-heavy apps, productivity tools.",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "zoom-pop",
|
|
17
|
+
name: "Zoom Pop",
|
|
18
|
+
description: "Layers scale in with spring, zoom between screens",
|
|
19
|
+
bestFor: "Playful apps, games, social media.",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "minimal",
|
|
23
|
+
name: "Minimal",
|
|
24
|
+
description: "Simple fade in, crossfade between screens",
|
|
25
|
+
bestFor: "Professional, enterprise, B2B apps.",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: "bounce",
|
|
29
|
+
name: "Bounce In",
|
|
30
|
+
description: "Layers spring in with overshoot, crossfade between screens",
|
|
31
|
+
bestFor: "Fun, consumer apps, kids apps.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: "parallax",
|
|
35
|
+
name: "Parallax",
|
|
36
|
+
description: "Layers rise at different speeds for depth, slide between screens",
|
|
37
|
+
bestFor: "Premium apps, editorial feel.",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "drop-bounce",
|
|
41
|
+
name: "Drop",
|
|
42
|
+
description: "Layers drop from above and bounce on landing",
|
|
43
|
+
bestFor: "Playful apps, games, fun and energetic feel.",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: "flip",
|
|
47
|
+
name: "Flip",
|
|
48
|
+
description: "Layers flip in with 3D rotation, screens flip between",
|
|
49
|
+
bestFor: "Bold, attention-grabbing. Standout from competition.",
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
const DEFAULT_VIDEO_CONFIG = {
|
|
53
|
+
preset: "fade-rise",
|
|
54
|
+
screenDuration: 90,
|
|
55
|
+
fps: 30,
|
|
56
|
+
};
|
|
57
|
+
export function registerVideoTools(server, api) {
|
|
58
|
+
server.tool("list_video_presets", `List available video animation presets for Shipshots projects.
|
|
59
|
+
|
|
60
|
+
Each preset defines how layers animate in and how screens transition. Use the preset ID with update_video_config to apply to a project.
|
|
61
|
+
|
|
62
|
+
Presets control:
|
|
63
|
+
- Layer entrance animations (how text, devices, images appear)
|
|
64
|
+
- Screen transitions (how the view moves between screens)`, {}, async () => {
|
|
65
|
+
return {
|
|
66
|
+
content: [
|
|
67
|
+
{
|
|
68
|
+
type: "text",
|
|
69
|
+
text: JSON.stringify(VIDEO_PRESETS, null, 2),
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
server.tool("update_video_config", `Configure video animation settings for a project.
|
|
75
|
+
|
|
76
|
+
DURATION GUIDE:
|
|
77
|
+
- 60 frames at 30fps = 2s (fast, punchy)
|
|
78
|
+
- 90 frames at 30fps = 3s (standard default)
|
|
79
|
+
- 120 frames at 30fps = 4s (slow, dramatic)
|
|
80
|
+
- For 60fps: double the frame counts`, {
|
|
81
|
+
project_id: z.string().describe("Project ID"),
|
|
82
|
+
preset: z
|
|
83
|
+
.string()
|
|
84
|
+
.optional()
|
|
85
|
+
.describe('Animation preset ID (e.g. "fade-rise", "slide-in", "zoom-pop", "minimal", "bounce", "parallax", "drop-bounce", "flip")'),
|
|
86
|
+
screenDuration: z
|
|
87
|
+
.number()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe("Default duration per screen in frames (default: 90 = 3s at 30fps)"),
|
|
90
|
+
fps: z
|
|
91
|
+
.number()
|
|
92
|
+
.optional()
|
|
93
|
+
.describe("Frames per second: 30 or 60 (default: 30)"),
|
|
94
|
+
backdropType: z
|
|
95
|
+
.enum(["solid", "gradient"])
|
|
96
|
+
.optional()
|
|
97
|
+
.describe('Backdrop type: "solid" or "gradient" (default: "solid")'),
|
|
98
|
+
backdropColor: z
|
|
99
|
+
.string()
|
|
100
|
+
.optional()
|
|
101
|
+
.describe('Backdrop hex color (default: "#000000")'),
|
|
102
|
+
backdropGradientColor2: z
|
|
103
|
+
.string()
|
|
104
|
+
.optional()
|
|
105
|
+
.describe("Second color for gradient backdrop"),
|
|
106
|
+
backdropGradientDirection: z
|
|
107
|
+
.number()
|
|
108
|
+
.optional()
|
|
109
|
+
.describe("Gradient direction in degrees (default: 180)"),
|
|
110
|
+
}, async ({ project_id, preset, screenDuration, fps, backdropType, backdropColor, backdropGradientColor2, backdropGradientDirection, }) => {
|
|
111
|
+
const project = await api.getProject(project_id);
|
|
112
|
+
const currentConfig = project.videoConfig ?? DEFAULT_VIDEO_CONFIG;
|
|
113
|
+
const newConfig = {
|
|
114
|
+
// Preserve all existing fields, then override with provided values
|
|
115
|
+
...currentConfig,
|
|
116
|
+
preset: preset ?? currentConfig.preset,
|
|
117
|
+
screenDuration: screenDuration ?? currentConfig.screenDuration,
|
|
118
|
+
fps: fps ?? currentConfig.fps,
|
|
119
|
+
...(backdropType !== undefined && { backdropType }),
|
|
120
|
+
...(backdropColor !== undefined && { backdropColor }),
|
|
121
|
+
...(backdropGradientColor2 !== undefined && { backdropGradientColor2 }),
|
|
122
|
+
...(backdropGradientDirection !== undefined && {
|
|
123
|
+
backdropGradientDirection,
|
|
124
|
+
}),
|
|
125
|
+
};
|
|
126
|
+
await api.updateProject(project_id, {
|
|
127
|
+
...project,
|
|
128
|
+
videoConfig: newConfig,
|
|
129
|
+
updatedAt: new Date().toISOString(),
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
content: [
|
|
133
|
+
{
|
|
134
|
+
type: "text",
|
|
135
|
+
text: JSON.stringify({
|
|
136
|
+
videoConfig: newConfig,
|
|
137
|
+
message: `Video config updated. Preset: "${newConfig.preset}", duration: ${newConfig.screenDuration} frames (${(newConfig.screenDuration / newConfig.fps).toFixed(1)}s), ${newConfig.fps}fps.`,
|
|
138
|
+
}, null, 2),
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/tools/video.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
export type LayerType = "text" | "device" | "image" | "shape" | "badge" | "arrow";
|
|
2
|
+
export type DeviceType = "iphone" | "ipad" | "android" | "frameless" | "macbook";
|
|
3
|
+
export type ShapeType = "rect" | "circle" | "rounded-rect";
|
|
4
|
+
export type TextAlign = "left" | "center" | "right";
|
|
5
|
+
export type BackgroundType = "solid" | "gradient";
|
|
6
|
+
export type ObjectFit = "cover" | "contain" | "fill";
|
|
7
|
+
export type LayerAnimation = {
|
|
8
|
+
entranceType?: string;
|
|
9
|
+
entranceDuration?: number;
|
|
10
|
+
entranceDelay?: number;
|
|
11
|
+
exitType?: string;
|
|
12
|
+
exitDuration?: number;
|
|
13
|
+
exitDelay?: number;
|
|
14
|
+
};
|
|
15
|
+
export type BaseLayer = {
|
|
16
|
+
id: string;
|
|
17
|
+
type: LayerType;
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
rotation: number;
|
|
23
|
+
rotateX: number;
|
|
24
|
+
rotateY: number;
|
|
25
|
+
zIndex: number;
|
|
26
|
+
locked: boolean;
|
|
27
|
+
visible: boolean;
|
|
28
|
+
opacity: number;
|
|
29
|
+
shadowEnabled?: boolean;
|
|
30
|
+
shadowColor?: string;
|
|
31
|
+
shadowBlur?: number;
|
|
32
|
+
shadowOffsetX?: number;
|
|
33
|
+
shadowOffsetY?: number;
|
|
34
|
+
blurEnabled?: boolean;
|
|
35
|
+
blurAmount?: number;
|
|
36
|
+
backdropBlurEnabled?: boolean;
|
|
37
|
+
backdropBlurAmount?: number;
|
|
38
|
+
animation?: LayerAnimation;
|
|
39
|
+
};
|
|
40
|
+
export type TextLayer = BaseLayer & {
|
|
41
|
+
type: "text";
|
|
42
|
+
text: string;
|
|
43
|
+
fontSize: number;
|
|
44
|
+
fontFamily: string;
|
|
45
|
+
fontWeight: number;
|
|
46
|
+
color: string;
|
|
47
|
+
textAlign: TextAlign;
|
|
48
|
+
letterSpacing: number;
|
|
49
|
+
lineHeight: number;
|
|
50
|
+
fillType?: "solid" | "gradient";
|
|
51
|
+
gradientColor2?: string;
|
|
52
|
+
gradientDirection?: number;
|
|
53
|
+
strokeEnabled?: boolean;
|
|
54
|
+
strokeColor?: string;
|
|
55
|
+
strokeWidth?: number;
|
|
56
|
+
};
|
|
57
|
+
export type DeviceFrameLayer = BaseLayer & {
|
|
58
|
+
type: "device";
|
|
59
|
+
deviceType: DeviceType;
|
|
60
|
+
screenshotUrl: string;
|
|
61
|
+
};
|
|
62
|
+
export type ImageLayer = BaseLayer & {
|
|
63
|
+
type: "image";
|
|
64
|
+
imageUrl: string;
|
|
65
|
+
objectFit: ObjectFit;
|
|
66
|
+
borderRadius: number;
|
|
67
|
+
borderTopLeftRadius?: number;
|
|
68
|
+
borderTopRightRadius?: number;
|
|
69
|
+
borderBottomRightRadius?: number;
|
|
70
|
+
borderBottomLeftRadius?: number;
|
|
71
|
+
};
|
|
72
|
+
export type ShapeLayer = BaseLayer & {
|
|
73
|
+
type: "shape";
|
|
74
|
+
shape: ShapeType;
|
|
75
|
+
fill: string;
|
|
76
|
+
fillType?: "solid" | "gradient" | "image";
|
|
77
|
+
gradientColor2?: string;
|
|
78
|
+
gradientDirection?: number;
|
|
79
|
+
gradientType?: "linear" | "radial";
|
|
80
|
+
fillImageUrl?: string;
|
|
81
|
+
fillImageSize?: "cover" | "contain" | "fill";
|
|
82
|
+
stroke: string;
|
|
83
|
+
strokeWidth: number;
|
|
84
|
+
borderRadius: number;
|
|
85
|
+
borderTopLeftRadius?: number;
|
|
86
|
+
borderTopRightRadius?: number;
|
|
87
|
+
borderBottomRightRadius?: number;
|
|
88
|
+
borderBottomLeftRadius?: number;
|
|
89
|
+
};
|
|
90
|
+
export type BadgeLayer = BaseLayer & {
|
|
91
|
+
type: "badge";
|
|
92
|
+
badgeStyle: "rating" | "label" | "count" | "custom";
|
|
93
|
+
text: string;
|
|
94
|
+
fontSize: number;
|
|
95
|
+
fontFamily: string;
|
|
96
|
+
fontWeight: number;
|
|
97
|
+
color: string;
|
|
98
|
+
backgroundColor: string;
|
|
99
|
+
backgroundOpacity: number;
|
|
100
|
+
borderRadius: number;
|
|
101
|
+
iconType?: "star" | "download" | "check" | "none";
|
|
102
|
+
iconColor?: string;
|
|
103
|
+
rating?: number;
|
|
104
|
+
};
|
|
105
|
+
export type ArrowLayer = BaseLayer & {
|
|
106
|
+
type: "arrow";
|
|
107
|
+
strokeColor: string;
|
|
108
|
+
strokeWidth: number;
|
|
109
|
+
headStyle: "triangle" | "none" | "circle";
|
|
110
|
+
curvature: number;
|
|
111
|
+
dashed?: boolean;
|
|
112
|
+
fromX: number;
|
|
113
|
+
fromY: number;
|
|
114
|
+
toX: number;
|
|
115
|
+
toY: number;
|
|
116
|
+
direction?: "right" | "left" | "up" | "down" | "auto";
|
|
117
|
+
};
|
|
118
|
+
export type Layer = TextLayer | DeviceFrameLayer | ImageLayer | ShapeLayer | BadgeLayer | ArrowLayer;
|
|
119
|
+
export type CanvasScreen = {
|
|
120
|
+
id: string;
|
|
121
|
+
name: string;
|
|
122
|
+
layers: Layer[];
|
|
123
|
+
backgroundColor: string;
|
|
124
|
+
backgroundType: BackgroundType;
|
|
125
|
+
gradientColor2: string;
|
|
126
|
+
gradientDirection: number;
|
|
127
|
+
backgroundGradientType?: "linear" | "radial";
|
|
128
|
+
backgroundImageUrl?: string;
|
|
129
|
+
backgroundImageSize?: "cover" | "contain" | "fill";
|
|
130
|
+
backgroundImageOpacity?: number;
|
|
131
|
+
width: number;
|
|
132
|
+
height: number;
|
|
133
|
+
canvasX: number;
|
|
134
|
+
canvasY: number;
|
|
135
|
+
connectedToNext?: boolean;
|
|
136
|
+
transitionType?: string;
|
|
137
|
+
transitionDuration?: number;
|
|
138
|
+
screenDuration?: number;
|
|
139
|
+
};
|
|
140
|
+
export type CanvasProject = {
|
|
141
|
+
id: string;
|
|
142
|
+
name: string;
|
|
143
|
+
schemaVersion: number;
|
|
144
|
+
screens: CanvasScreen[];
|
|
145
|
+
createdAt: string;
|
|
146
|
+
updatedAt: string;
|
|
147
|
+
videoConfig?: {
|
|
148
|
+
preset: string;
|
|
149
|
+
screenDuration: number;
|
|
150
|
+
fps: number;
|
|
151
|
+
backdropType?: "solid" | "gradient";
|
|
152
|
+
backdropColor?: string;
|
|
153
|
+
backdropGradientColor2?: string;
|
|
154
|
+
backdropGradientDirection?: number;
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
export type TemplateInfo = {
|
|
158
|
+
id: string;
|
|
159
|
+
name: string;
|
|
160
|
+
description: string;
|
|
161
|
+
category: string;
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,2FAA2F"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "shipshots-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for Shipshots — create App Store & Play Store screenshots programmatically via Claude or any MCP client",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Shipshots",
|
|
8
|
+
"homepage": "https://shipshots.app",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"mcp",
|
|
11
|
+
"shipshots",
|
|
12
|
+
"screenshots",
|
|
13
|
+
"app-store",
|
|
14
|
+
"play-store",
|
|
15
|
+
"model-context-protocol",
|
|
16
|
+
"claude"
|
|
17
|
+
],
|
|
18
|
+
"bin": {
|
|
19
|
+
"shipshots-mcp": "dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"prepublishOnly": "npm run build",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"dev": "tsc --watch"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
32
|
+
"zod": "^4.3.6"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"typescript": "^5.7.0",
|
|
36
|
+
"vitest": "^3.0.0"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=18"
|
|
40
|
+
}
|
|
41
|
+
}
|