shipshots-mcp 0.6.0 → 0.7.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/README.md +227 -117
- package/dist/api-client.d.ts +58 -13
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +25 -5
- package/dist/api-client.js.map +1 -1
- package/dist/image-resolver.d.ts +4 -0
- package/dist/image-resolver.d.ts.map +1 -0
- package/dist/image-resolver.js +12 -0
- package/dist/image-resolver.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/mode-rules.d.ts +21 -0
- package/dist/mode-rules.d.ts.map +1 -0
- package/dist/mode-rules.js +48 -0
- package/dist/mode-rules.js.map +1 -0
- package/dist/tools/batch.d.ts.map +1 -1
- package/dist/tools/batch.js +16 -2
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/components.d.ts +4 -0
- package/dist/tools/components.d.ts.map +1 -0
- package/dist/tools/components.js +215 -0
- package/dist/tools/components.js.map +1 -0
- package/dist/tools/export.d.ts.map +1 -1
- package/dist/tools/export.js +159 -5
- package/dist/tools/export.js.map +1 -1
- package/dist/tools/layers.d.ts.map +1 -1
- package/dist/tools/layers.js +1 -7
- package/dist/tools/layers.js.map +1 -1
- package/dist/tools/project.d.ts.map +1 -1
- package/dist/tools/project.js +29 -3
- package/dist/tools/project.js.map +1 -1
- package/dist/tools/quality.d.ts +4 -0
- package/dist/tools/quality.d.ts.map +1 -0
- package/dist/tools/quality.js +80 -0
- package/dist/tools/quality.js.map +1 -0
- package/dist/tools/workflow.d.ts +4 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +466 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +1 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +35 -16
- package/dist/validation.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
# Shipshots MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`shipshots-mcp` lets MCP-compatible agents create and improve Shipshots projects through the Shipshots API.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
[Shipshots](https://shipshots.app) is an App Store and Play Store screenshot builder for developers. Instead of hiring a designer or wrestling with Figma templates, you design screenshots in a visual canvas editor or let your AI coding assistant handle it entirely via MCP. Your assistant already knows your app from the codebase -- the features, the copy, the colors -- so it creates store-ready visuals that actually match your product.
|
|
8
|
-
|
|
9
|
-
**Supported MCP clients:** Claude Code, Claude Desktop, Cursor, Windsurf, Gemini, and any MCP-compatible client.
|
|
5
|
+
Agents can use it to build App Store screenshots, Play Store screenshots, social carousels, paid ads, launch graphics, and preview/export assets while the user keeps final control in the Shipshots web editor.
|
|
10
6
|
|
|
11
7
|
## Quick Setup
|
|
12
8
|
|
|
@@ -14,23 +10,31 @@ MCP server that lets Claude (or any MCP client) create App Store & Play Store sc
|
|
|
14
10
|
npx shipshots-mcp init --token sb_your_token_here
|
|
15
11
|
```
|
|
16
12
|
|
|
17
|
-
|
|
13
|
+
Get a token from Shipshots at:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
Dashboard -> Setup MCP
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
or:
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
```text
|
|
22
|
+
Dashboard -> Settings -> MCP Tokens
|
|
23
|
+
```
|
|
20
24
|
|
|
21
|
-
### Options
|
|
25
|
+
### Setup Options
|
|
22
26
|
|
|
23
27
|
```bash
|
|
24
|
-
npx shipshots-mcp init --token sb_... --client claude-code
|
|
25
|
-
npx shipshots-mcp init --token sb_... --client claude-desktop
|
|
26
|
-
npx shipshots-mcp init --token sb_... --client cursor
|
|
27
|
-
npx shipshots-mcp init --token sb_... --client stdout
|
|
28
|
-
npx shipshots-mcp init --token sb_... --url http://localhost:3000
|
|
28
|
+
npx shipshots-mcp init --token sb_... --client claude-code
|
|
29
|
+
npx shipshots-mcp init --token sb_... --client claude-desktop
|
|
30
|
+
npx shipshots-mcp init --token sb_... --client cursor
|
|
31
|
+
npx shipshots-mcp init --token sb_... --client stdout
|
|
32
|
+
npx shipshots-mcp init --token sb_... --url http://localhost:3000
|
|
29
33
|
```
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
Use `--url http://localhost:3000` for local development.
|
|
32
36
|
|
|
33
|
-
|
|
37
|
+
## Manual MCP Config
|
|
34
38
|
|
|
35
39
|
```json
|
|
36
40
|
{
|
|
@@ -47,142 +51,248 @@ If you prefer to configure manually, add this to your MCP client's config:
|
|
|
47
51
|
}
|
|
48
52
|
```
|
|
49
53
|
|
|
50
|
-
|
|
51
|
-
- Claude Code: `.mcp.json` in your project
|
|
52
|
-
- Claude Desktop (macOS): `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
53
|
-
- Claude Desktop (Windows): `%APPDATA%/Claude/claude_desktop_config.json`
|
|
54
|
-
- Cursor: `.cursor/mcp.json` in your project
|
|
54
|
+
Config locations vary by client:
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
- Claude Code: `.mcp.json` in the current project
|
|
57
|
+
- Claude Desktop macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
58
|
+
- Claude Desktop Windows: `%APPDATA%/Claude/claude_desktop_config.json`
|
|
59
|
+
- Cursor: `.cursor/mcp.json`
|
|
57
60
|
|
|
58
|
-
|
|
59
|
-
2. Go to **Dashboard > Setup MCP** (or **Settings > MCP Tokens**)
|
|
60
|
-
3. Click **Create Token** and copy the `sb_`-prefixed token
|
|
61
|
+
## Local Development
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
Start the app and render worker from the repository root:
|
|
63
64
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
65
|
+
```bash
|
|
66
|
+
make local
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Then point the MCP server at the local app:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"mcpServers": {
|
|
74
|
+
"shipshots_local": {
|
|
75
|
+
"command": "node",
|
|
76
|
+
"args": ["/absolute/path/to/screenshotbuilder/packages/mcp/dist/index.js"],
|
|
77
|
+
"env": {
|
|
78
|
+
"SHIPSHOTS_API_URL": "http://localhost:3000",
|
|
79
|
+
"SHIPSHOTS_API_TOKEN": "sb_local_user_token"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Build the MCP package after code changes:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
cd packages/mcp
|
|
90
|
+
pnpm run build
|
|
91
|
+
pnpm test
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
When both local and production MCP servers are configured, ask the agent to call `start_design_workflow` or `get_server_info` first. The response identifies whether the server writes to local development, production, or a custom API.
|
|
95
|
+
|
|
96
|
+
## Recommended Agent Workflow
|
|
97
|
+
|
|
98
|
+
For new marketing work, agents should start with the workflow tools rather than jumping directly into primitive layer calls:
|
|
99
|
+
|
|
100
|
+
1. `start_design_workflow`
|
|
101
|
+
2. `plan_marketing_campaign`
|
|
102
|
+
3. `suggest_creative_directions`
|
|
103
|
+
4. `create_marketing_project` or `set_marketing_mode`
|
|
104
|
+
5. Layer/component creation and screenshot upload
|
|
105
|
+
6. `run_quality_pass`
|
|
106
|
+
7. `audit_marketing_quality`
|
|
107
|
+
8. Thumbnail or screen preview
|
|
108
|
+
9. Export or hand off the editor URL
|
|
109
|
+
|
|
110
|
+
This keeps the asset mode-aware. A social carousel, paid ad, and App Store screenshot set should not be judged by the same panel-count and CTA rules.
|
|
111
|
+
|
|
112
|
+
## Marketing Modes
|
|
113
|
+
|
|
114
|
+
| Mode | Panel range | Device required | Notes |
|
|
115
|
+
| --- | ---: | --- | --- |
|
|
116
|
+
| `app_store` | 5-10 | Yes | App Store screenshot arc |
|
|
117
|
+
| `play_store` | 2-8 | Yes | Google Play screenshot arc |
|
|
118
|
+
| `social_carousel` | 3-10 | No | Swipeable social/LinkedIn/Instagram carousel |
|
|
119
|
+
| `paid_ad` | 1-3 | No | Claim, proof, CTA |
|
|
120
|
+
| `launch_graphic` | 1-5 | No | Product launch or announcement graphics |
|
|
121
|
+
|
|
122
|
+
Campaign metadata is stored on `project.campaign`. Screen roles are stored on `screen.marketingRole`.
|
|
123
|
+
|
|
124
|
+
## Tool Groups
|
|
125
|
+
|
|
126
|
+
### Workflow and Marketing
|
|
127
|
+
|
|
128
|
+
- `start_design_workflow` - returns server target, supported modes, guardrails, and current project context
|
|
129
|
+
- `set_marketing_mode` - persists campaign metadata on an existing project
|
|
130
|
+
- `plan_marketing_campaign` - suggests panel roles and copy structure
|
|
131
|
+
- `suggest_creative_directions` - returns creative directions such as safe store, bold carousel, or premium editorial
|
|
132
|
+
- `create_marketing_project` - creates a generic mode-aware project with starter screens and optional screenshots
|
|
133
|
+
- `audit_marketing_quality` - runs mode-aware marketing review plus layout quality context
|
|
134
|
+
|
|
135
|
+
### Project Management
|
|
136
|
+
|
|
137
|
+
- `create_project`
|
|
138
|
+
- `get_project`
|
|
139
|
+
- `delete_project`
|
|
140
|
+
- `list_projects`
|
|
141
|
+
- `list_templates`
|
|
142
|
+
- `get_project_url`
|
|
143
|
+
- `get_server_info`
|
|
144
|
+
|
|
145
|
+
### Screen Management
|
|
146
|
+
|
|
147
|
+
- `add_screen`
|
|
148
|
+
- `update_screen`
|
|
149
|
+
- `remove_screen`
|
|
150
|
+
- `duplicate_screen`
|
|
151
|
+
- `connect_screens`
|
|
152
|
+
- `reorder_screens`
|
|
153
|
+
|
|
154
|
+
### Layer Management
|
|
155
|
+
|
|
156
|
+
- `add_text_layer`
|
|
157
|
+
- `add_device_frame_layer`
|
|
158
|
+
- `add_image_layer`
|
|
159
|
+
- `add_shape_layer`
|
|
160
|
+
- `add_badge_layer`
|
|
161
|
+
- `add_arrow_layer`
|
|
162
|
+
- `update_layer`
|
|
163
|
+
- `remove_layer`
|
|
164
|
+
- `duplicate_layer`
|
|
165
|
+
- `move_layer`
|
|
166
|
+
- `reorder_layers`
|
|
167
|
+
- `align_layer`
|
|
168
|
+
- `align_layers`
|
|
169
|
+
- `upload_screenshot`
|
|
170
|
+
|
|
171
|
+
### Grouped Marketing Components
|
|
172
|
+
|
|
173
|
+
These tools create flat shape+text layers with shared component metadata:
|
|
174
|
+
|
|
175
|
+
- `add_button_component`
|
|
176
|
+
- `add_pill_component`
|
|
177
|
+
- `add_callout_component`
|
|
178
|
+
- `add_proof_chip_component`
|
|
179
|
+
- `add_rating_component`
|
|
180
|
+
- `add_feature_tag_component`
|
|
181
|
+
- `update_component`
|
|
182
|
+
- `remove_component`
|
|
183
|
+
|
|
184
|
+
The validator understands same-component overlap, so text sitting on a button or pill is not treated like accidental overlap.
|
|
185
|
+
|
|
186
|
+
### Layout, Quality, and Validation
|
|
187
|
+
|
|
188
|
+
- `apply_layout`
|
|
189
|
+
- `validate_screen`
|
|
190
|
+
- `run_quality_pass`
|
|
191
|
+
|
|
192
|
+
`run_quality_pass` has two modes:
|
|
193
|
+
|
|
194
|
+
- Check mode reports issues without changing the project.
|
|
195
|
+
- Fix mode applies deterministic geometry and contrast fixes only.
|
|
196
|
+
|
|
197
|
+
The quality pass checks clipping, text/device overlap, poor spacing, low contrast, and connected-strip bounds. It understands intentional carousel bleed.
|
|
198
|
+
|
|
199
|
+
### Batch Operations
|
|
200
|
+
|
|
201
|
+
- `batch_add_layers`
|
|
202
|
+
- `batch_update_layers`
|
|
203
|
+
- `batch_remove_layers`
|
|
204
|
+
|
|
205
|
+
### Video
|
|
206
|
+
|
|
207
|
+
- `update_video_config`
|
|
208
|
+
- `list_video_presets`
|
|
209
|
+
|
|
210
|
+
### Export and Preview
|
|
211
|
+
|
|
212
|
+
- `get_screen_preview`
|
|
213
|
+
- `get_strip_preview`
|
|
214
|
+
- `get_thumbnail_preview`
|
|
215
|
+
- `get_contact_sheet_preview`
|
|
216
|
+
- `export_screenshot`
|
|
217
|
+
- `export_marketing_bundle`
|
|
218
|
+
|
|
219
|
+
Preview tools accept a `scale` where supported. Thumbnail-scale previews are useful for iteration because store screenshots and social carousels often fail at small sizes before they fail at full size.
|
|
220
|
+
|
|
221
|
+
`get_contact_sheet_preview` returns ordered thumbnail image outputs through MCP. It is not currently a single stitched image.
|
|
222
|
+
|
|
223
|
+
`export_marketing_bundle` returns MCP image outputs with suggested filenames. It is not currently a ZIP download from MCP.
|
|
224
|
+
|
|
225
|
+
### Design Data
|
|
226
|
+
|
|
227
|
+
- `list_fonts`
|
|
228
|
+
- `list_palettes`
|
|
229
|
+
- `list_gradients`
|
|
75
230
|
|
|
76
231
|
## Supported Export Sizes
|
|
77
232
|
|
|
78
|
-
### App Store
|
|
233
|
+
### App Store
|
|
79
234
|
|
|
80
235
|
| Display | Size |
|
|
81
|
-
|
|
236
|
+
| --- | --- |
|
|
82
237
|
| iPhone 6.9" | 1260 x 2736 |
|
|
83
238
|
| iPhone 6.5" | 1242 x 2688 |
|
|
84
239
|
| iPhone 6.3" | 1206 x 2622 |
|
|
85
240
|
| iPhone 6.1" | 1170 x 2532 |
|
|
86
241
|
| iPhone 5.5" | 1242 x 2208 |
|
|
87
242
|
| iPad 13" | 2064 x 2752 |
|
|
88
|
-
| iPad 12.9"
|
|
243
|
+
| iPad 12.9" | 2048 x 2732 |
|
|
89
244
|
| iPad 11" | 1668 x 2388 |
|
|
90
245
|
|
|
91
|
-
### Google Play
|
|
246
|
+
### Google Play
|
|
92
247
|
|
|
93
248
|
| Display | Size |
|
|
94
|
-
|
|
249
|
+
| --- | --- |
|
|
95
250
|
| Android Phone | 1080 x 1920 |
|
|
96
251
|
| Android Pixel | 1080 x 2340 |
|
|
97
252
|
| Android Galaxy | 1440 x 3200 |
|
|
98
253
|
| Android 7" Tablet | 1200 x 1920 |
|
|
99
254
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
## Available Tools
|
|
103
|
-
|
|
104
|
-
### Project Management
|
|
105
|
-
- **create_project** -- Create a new project (optionally from a template)
|
|
106
|
-
- **get_project** -- Fetch full project data
|
|
107
|
-
- **delete_project** -- Delete a project
|
|
108
|
-
- **list_projects** -- List all projects
|
|
109
|
-
- **list_templates** -- List available template presets
|
|
110
|
-
- **get_project_url** -- Get the editor URL for a project
|
|
111
|
-
|
|
112
|
-
### Screen Management
|
|
113
|
-
- **add_screen** -- Add a new screen to a project
|
|
114
|
-
- **update_screen** -- Update screen background, name, dimensions
|
|
115
|
-
- **remove_screen** -- Remove a screen
|
|
116
|
-
- **duplicate_screen** -- Duplicate a screen with all layers
|
|
117
|
-
- **connect_screens** -- Link screens into a panoramic strip
|
|
118
|
-
- **reorder_screens** -- Change screen order
|
|
119
|
-
|
|
120
|
-
### Layer Management
|
|
121
|
-
- **add_text_layer** -- Add styled text with optional rich text markup
|
|
122
|
-
- **add_device_frame_layer** -- Add iPhone/Android/iPad/MacBook mockup
|
|
123
|
-
- **add_image_layer** -- Add an image from a URL or local file path
|
|
124
|
-
- **add_shape_layer** -- Add rectangle, circle, or rounded rectangle
|
|
125
|
-
- **add_badge_layer** -- Add a badge/pill element
|
|
126
|
-
- **add_arrow_layer** -- Add an arrow or connector
|
|
127
|
-
- **update_layer** -- Update any layer property
|
|
128
|
-
- **remove_layer** -- Remove a layer
|
|
129
|
-
- **duplicate_layer** -- Duplicate a layer
|
|
130
|
-
- **move_layer** -- Move a layer to a different screen
|
|
131
|
-
- **reorder_layers** -- Change layer z-order
|
|
132
|
-
- **align_layer** -- Align a single layer (center, edges, etc.)
|
|
133
|
-
- **align_layers** -- Align multiple layers relative to each other
|
|
134
|
-
- **upload_screenshot** -- Upload a screenshot into a device frame
|
|
135
|
-
|
|
136
|
-
### Layout & Validation
|
|
137
|
-
- **apply_layout** -- Reposition layers to a preset layout (centered, diagonal, mirrored-diagonal, side-by-side, text-hero)
|
|
138
|
-
- **validate_screen** -- Check for clipping, overlap, contrast, and spacing issues
|
|
255
|
+
### Social and Ads
|
|
139
256
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- **list_video_presets** -- List available animation presets
|
|
148
|
-
|
|
149
|
-
### Export & Preview
|
|
150
|
-
- **get_screen_preview** -- Render a screen preview as base64 JPEG
|
|
151
|
-
- **get_strip_preview** -- Render a connected strip preview
|
|
152
|
-
- **export_screenshot** -- Export a screen as PNG at a specific size
|
|
153
|
-
- **get_server_info** -- Server version and feature info
|
|
154
|
-
- **list_fonts** -- List available Google Fonts
|
|
155
|
-
- **list_palettes** -- List curated color palettes
|
|
156
|
-
- **list_gradients** -- List gradient presets
|
|
257
|
+
| Output | Size |
|
|
258
|
+
| --- | --- |
|
|
259
|
+
| Social Square | 1080 x 1080 |
|
|
260
|
+
| Social Portrait | 1080 x 1350 |
|
|
261
|
+
| Social Story | 1080 x 1920 |
|
|
262
|
+
| Ad Square | 1080 x 1080 |
|
|
263
|
+
| Ad Story | 1080 x 1920 |
|
|
157
264
|
|
|
158
265
|
## Example Prompts
|
|
159
266
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
- "Set up screenshots for my React Native weather app"
|
|
267
|
+
```text
|
|
268
|
+
Use the local Shipshots MCP server only. Call start_design_workflow first and confirm the target is local.
|
|
269
|
+
```
|
|
164
270
|
|
|
165
|
-
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
- "Upload my app screenshot into the device frame"
|
|
271
|
+
```text
|
|
272
|
+
Create a 4-panel social carousel for this app. Plan the arc, suggest creative directions, create the project, run the quality pass, audit it as social_carousel, and show thumbnail previews.
|
|
273
|
+
```
|
|
169
274
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
- "Create a panoramic layout connecting screens 1, 2, and 3"
|
|
275
|
+
```text
|
|
276
|
+
Create an App Store screenshot set from these real screenshots. Use app_store mode, make a 5-panel hook/feature/proof/CTA arc, run quality fixes only if deterministic, and report remaining issues.
|
|
277
|
+
```
|
|
174
278
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
- "Export all screens for iPhone 6.9 and Google Play"
|
|
279
|
+
```text
|
|
280
|
+
Audit this project as paid_ad, not app_store. Tell me what is weak before changing anything.
|
|
281
|
+
```
|
|
179
282
|
|
|
180
283
|
## Environment Variables
|
|
181
284
|
|
|
182
285
|
| Variable | Required | Description |
|
|
183
|
-
|
|
184
|
-
| `SHIPSHOTS_API_URL` | Yes | Shipshots instance URL
|
|
185
|
-
| `SHIPSHOTS_API_TOKEN` | Yes | API token from
|
|
286
|
+
| --- | --- | --- |
|
|
287
|
+
| `SHIPSHOTS_API_URL` | Yes | Shipshots instance URL, for example `https://shipshots.app` or `http://localhost:3000` |
|
|
288
|
+
| `SHIPSHOTS_API_TOKEN` | Yes | User API token from the dashboard |
|
|
289
|
+
|
|
290
|
+
## Notes and Limits
|
|
291
|
+
|
|
292
|
+
- Free accounts are limited by the app's plan rules. Pro removes project and preview limits.
|
|
293
|
+
- Real app screenshots are still required for final App Store-grade output.
|
|
294
|
+
- The generic campaign workflow intentionally avoids hyper-specific app-vertical templates.
|
|
295
|
+
- Preview rendering depends on the app and render worker being reachable from the configured API.
|
|
186
296
|
|
|
187
297
|
## License
|
|
188
298
|
|
package/dist/api-client.d.ts
CHANGED
|
@@ -1,4 +1,49 @@
|
|
|
1
|
-
import type { CanvasProject } from "./types.js";
|
|
1
|
+
import type { CanvasProject, LocaleStrategy, MarketingMode } from "./types.js";
|
|
2
|
+
export type ProjectQualityReport = {
|
|
3
|
+
projectId: string;
|
|
4
|
+
mode: "check" | "fix";
|
|
5
|
+
changed: boolean;
|
|
6
|
+
updatedAt?: string;
|
|
7
|
+
summary: {
|
|
8
|
+
status: "ready" | "needs-attention";
|
|
9
|
+
screenCount: number;
|
|
10
|
+
errorCount: number;
|
|
11
|
+
warningCount: number;
|
|
12
|
+
infoCount: number;
|
|
13
|
+
fixCount: number;
|
|
14
|
+
};
|
|
15
|
+
screens: Array<{
|
|
16
|
+
screenId: string;
|
|
17
|
+
screenName: string;
|
|
18
|
+
status: "ready" | "needs-attention";
|
|
19
|
+
warningsBefore: Array<Record<string, unknown>>;
|
|
20
|
+
fixes: Array<Record<string, unknown>>;
|
|
21
|
+
warningsAfter: Array<Record<string, unknown>>;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
export type MarketingAuditReport = {
|
|
25
|
+
mode: MarketingMode;
|
|
26
|
+
localeStrategy: LocaleStrategy;
|
|
27
|
+
status: "ready" | "needs-improvement";
|
|
28
|
+
summary: {
|
|
29
|
+
screenCount: number;
|
|
30
|
+
recommendedMin: number;
|
|
31
|
+
recommendedMax: number;
|
|
32
|
+
warningCount: number;
|
|
33
|
+
infoCount: number;
|
|
34
|
+
deviceLayerCount: number;
|
|
35
|
+
mockedDeviceCount: number;
|
|
36
|
+
emptyDeviceCount: number;
|
|
37
|
+
};
|
|
38
|
+
issues: Array<Record<string, unknown>>;
|
|
39
|
+
nextActions: string[];
|
|
40
|
+
};
|
|
41
|
+
export type PreviewResult = {
|
|
42
|
+
base64: string;
|
|
43
|
+
width: number;
|
|
44
|
+
height: number;
|
|
45
|
+
mimeType: string;
|
|
46
|
+
};
|
|
2
47
|
export declare class ApiClient {
|
|
3
48
|
private baseUrl;
|
|
4
49
|
private apiToken?;
|
|
@@ -18,18 +63,18 @@ export declare class ApiClient {
|
|
|
18
63
|
url: string;
|
|
19
64
|
}>;
|
|
20
65
|
private postPreview;
|
|
21
|
-
getScreenPreview(projectId: string, screenId: string): Promise<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}>;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}>;
|
|
66
|
+
getScreenPreview(projectId: string, screenId: string, scale?: number): Promise<PreviewResult>;
|
|
67
|
+
getStripPreview(projectId: string, screenIds: string[], scale?: number): Promise<PreviewResult>;
|
|
68
|
+
runQualityPass(projectId: string, body: {
|
|
69
|
+
screenIds?: string[];
|
|
70
|
+
mode?: "check" | "fix";
|
|
71
|
+
}): Promise<ProjectQualityReport>;
|
|
72
|
+
runMarketingAudit(projectId: string, body: {
|
|
73
|
+
mode?: MarketingMode;
|
|
74
|
+
targetLocale?: string;
|
|
75
|
+
localeStrategy?: LocaleStrategy;
|
|
76
|
+
appCategory?: string;
|
|
77
|
+
}): Promise<MarketingAuditReport>;
|
|
33
78
|
listTemplates(): Promise<Array<{
|
|
34
79
|
id: string;
|
|
35
80
|
name: string;
|
package/dist/api-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/api-client.js
CHANGED
|
@@ -78,7 +78,7 @@ export class ApiClient {
|
|
|
78
78
|
if (!res.ok)
|
|
79
79
|
throw await apiError(`Failed to get project ${id}`, res);
|
|
80
80
|
const json = (await res.json());
|
|
81
|
-
return json.data;
|
|
81
|
+
return { ...json.data, id: json.id, name: json.name };
|
|
82
82
|
}
|
|
83
83
|
async updateProject(id, data) {
|
|
84
84
|
const res = await fetch(`${this.baseUrl}/api/projects/${id}`, {
|
|
@@ -160,11 +160,31 @@ export class ApiClient {
|
|
|
160
160
|
throw await apiError("Failed to get preview", res);
|
|
161
161
|
return res.json();
|
|
162
162
|
}
|
|
163
|
-
async getScreenPreview(projectId, screenId) {
|
|
164
|
-
return this.postPreview(projectId, { screen_id: screenId });
|
|
163
|
+
async getScreenPreview(projectId, screenId, scale) {
|
|
164
|
+
return this.postPreview(projectId, { screen_id: screenId, ...(scale !== undefined ? { scale } : {}) });
|
|
165
165
|
}
|
|
166
|
-
async getStripPreview(projectId, screenIds) {
|
|
167
|
-
return this.postPreview(projectId, { screen_ids: screenIds });
|
|
166
|
+
async getStripPreview(projectId, screenIds, scale) {
|
|
167
|
+
return this.postPreview(projectId, { screen_ids: screenIds, ...(scale !== undefined ? { scale } : {}) });
|
|
168
|
+
}
|
|
169
|
+
async runQualityPass(projectId, body) {
|
|
170
|
+
const res = await fetch(`${this.baseUrl}/api/projects/${projectId}/quality`, {
|
|
171
|
+
method: "POST",
|
|
172
|
+
headers: { "Content-Type": "application/json", ...this.authHeaders },
|
|
173
|
+
body: JSON.stringify(body),
|
|
174
|
+
});
|
|
175
|
+
if (!res.ok)
|
|
176
|
+
throw await apiError("Failed to run quality pass", res);
|
|
177
|
+
return res.json();
|
|
178
|
+
}
|
|
179
|
+
async runMarketingAudit(projectId, body) {
|
|
180
|
+
const res = await fetch(`${this.baseUrl}/api/projects/${projectId}/marketing-audit`, {
|
|
181
|
+
method: "POST",
|
|
182
|
+
headers: { "Content-Type": "application/json", ...this.authHeaders },
|
|
183
|
+
body: JSON.stringify(body),
|
|
184
|
+
});
|
|
185
|
+
if (!res.ok)
|
|
186
|
+
throw await apiError("Failed to run marketing audit", res);
|
|
187
|
+
return res.json();
|
|
168
188
|
}
|
|
169
189
|
async listTemplates() {
|
|
170
190
|
const res = await fetch(`${this.baseUrl}/api/templates`);
|
package/dist/api-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ApiClient } from "./api-client.js";
|
|
2
|
+
/** Upload local image paths through the API while leaving remote/API URLs untouched. */
|
|
3
|
+
export declare function resolveImageUrl(api: ApiClient, projectId: string, url: string): Promise<string>;
|
|
4
|
+
//# sourceMappingURL=image-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-resolver.d.ts","sourceRoot":"","sources":["../src/image-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wFAAwF;AACxF,wBAAsB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYrG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Upload local image paths through the API while leaving remote/API URLs untouched. */
|
|
2
|
+
export async function resolveImageUrl(api, projectId, url) {
|
|
3
|
+
if (url === "" ||
|
|
4
|
+
url.startsWith("http://") ||
|
|
5
|
+
url.startsWith("https://") ||
|
|
6
|
+
url.startsWith("/api/images/")) {
|
|
7
|
+
return url;
|
|
8
|
+
}
|
|
9
|
+
const uploaded = await api.uploadImage(projectId, url);
|
|
10
|
+
return uploaded.url;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=image-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-resolver.js","sourceRoot":"","sources":["../src/image-resolver.ts"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAc,EAAE,SAAiB,EAAE,GAAW;IAClF,IACE,GAAG,KAAK,EAAE;QACV,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QACzB,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;QAC1B,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,EAC9B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACvD,OAAO,QAAQ,CAAC,GAAG,CAAC;AACtB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,9 @@ import { registerBatchTools } from "./tools/batch.js";
|
|
|
19
19
|
import { registerValidateTools } from "./tools/validate.js";
|
|
20
20
|
import { registerLayoutTools } from "./tools/layout.js";
|
|
21
21
|
import { registerFeedbackTools } from "./tools/feedback.js";
|
|
22
|
+
import { registerQualityTools } from "./tools/quality.js";
|
|
23
|
+
import { registerWorkflowTools } from "./tools/workflow.js";
|
|
24
|
+
import { registerComponentTools } from "./tools/components.js";
|
|
22
25
|
const apiUrl = process.env.SHIPSHOTS_API_URL;
|
|
23
26
|
if (!apiUrl) {
|
|
24
27
|
console.error("Error: SHIPSHOTS_API_URL environment variable is required.\n" +
|
|
@@ -44,8 +47,11 @@ registerVideoTools(server, api);
|
|
|
44
47
|
registerDuplicateTools(server, api);
|
|
45
48
|
registerBatchTools(server, api);
|
|
46
49
|
registerValidateTools(server, api);
|
|
50
|
+
registerQualityTools(server, api);
|
|
47
51
|
registerLayoutTools(server, api);
|
|
48
52
|
registerFeedbackTools(server, api);
|
|
53
|
+
registerWorkflowTools(server, api);
|
|
54
|
+
registerComponentTools(server, api);
|
|
49
55
|
const transport = new StdioServerTransport();
|
|
50
56
|
await server.connect(transport);
|
|
51
57
|
//# 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":";AAEA,yCAAyC;AACzC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,OAAO,EAAE,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|