@appscreenshotstudio/mcp 0.4.2 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -148,6 +148,21 @@ Generate an AI background for a specific card. Uses project metadata (brand colo
148
148
 
149
149
  **Costs 6 credits.**
150
150
 
151
+ ### `generate-panoramic-background`
152
+
153
+ Generate one wide image and slice it across multiple cards so they read as a continuous scene in the App Store gallery. Use after a panoramic chat edit ("pano the background across cards 1-3") to fulfill the pending panoramic, or pass an explicit `prompt` / `pexels_query`.
154
+
155
+ | Parameter | Type | Required | Description |
156
+ |---|---|---|---|
157
+ | `project_id` | string | Yes | Project containing the cards |
158
+ | `prompt` | string | No | AI scene description (Gemini). Costs 6 credits. |
159
+ | `pexels_query` | string | No | Stock photo search query (Pexels). Free. |
160
+ | `card_indices` | number[] | No | Cards sharing the panoramic (0-based, min 2). Default: first 3. |
161
+
162
+ Omit both `prompt` and `pexels_query` to fulfill a panoramic already set up by `generate-screenshots` / `edit-screenshots`.
163
+
164
+ **Costs 6 credits (AI prompt) or free (Pexels query).**
165
+
151
166
  ### `list-devices`
152
167
 
153
168
  Show all supported device specs. No API call needed.
@@ -169,6 +184,7 @@ Once installed, use `/appscreenshotstudio` in Claude Code or just ask "generate
169
184
  | ID | Name | Size | Required |
170
185
  |---|---|---|---|
171
186
  | `iphone-6.9` | iPhone 16 Pro Max | 1260x2736 | App Store |
187
+ | `iphone-6.3` | iPhone 17 Pro | 1206x2622 | Optional |
172
188
  | `ipad-13` | iPad Pro 13" | 2064x2752 | App Store |
173
189
  | `android-phone` | Android Phone | 1080x2340 | Play Store |
174
190
  | `android-tablet-10` | Android Tablet 7" | 1200x1920 | Play Store |
@@ -178,12 +194,13 @@ Once installed, use `/appscreenshotstudio` in Claude Code or just ask "generate
178
194
 
179
195
  The AI generates professional screenshots using:
180
196
 
181
- - **78+ decorative shapes** across 13 categories: nature (leaf, flower, tree), weather (cloud, sun, snowflake), celebration (sparkle, trophy, crown, confetti), social (chat-bubble, music-note), tech (rocket, code-bracket), health (dumbbell, flame), food (coffee-cup, pizza), travel (airplane, compass), finance (dollar-sign, piggy-bank), education (graduation-cap, lightbulb), pets (paw-print, cat-face), emoji (smiley, fire-emoji), abstract (swirl, infinity, gem)
197
+ - **94 shape types** (17 core + 77 decorative across 13 categories): nature (leaf, flower, tree), weather (cloud, sun, snowflake), celebration (sparkle, trophy, crown, confetti), social (chat-bubble, music-note), tech (rocket, code-bracket), health (dumbbell, flame), food (coffee-cup, pizza), travel (airplane, compass), finance (dollar-sign, piggy-bank), education (graduation-cap, lightbulb), pets (paw-print, cat-face), emoji (smiley, fire-emoji), abstract (swirl, infinity, gem)
182
198
  - **Rich text**: per-word color, bold, italic, underline, highlight pills (colored backgrounds behind words), gradient fills, text stroke outlines, emoji
183
- - **Laurel stats**: wing-left + wing-right shapes flanking stats like "4.9 Rating" or "1M+ Users"
184
- - **Floating UI snippets**: rounded-rect panels with text overlapping device edges
185
- - **11 device perspectives**: flat, left-15, left-30, right-15, right-30, isometric, top-down, flat-lay, side-profile, landscape-left, landscape-right
186
- - **7 layouts**: Text Top + Device Center (A), Text Top + Device Offset (B), Social Proof (C), Marketing Title (M1), Feature Callout (M2), CTA (M3), Testimonial (M4)
199
+ - **Compound trust signals**: statRow, laurelStat, starRating, quote, pressBanner, featureGrid, beforeAfterSplit, stepList auto-positioned per layout
200
+ - **Frame color**: recolor the device frame `natural` (default), `black`, `white`, `gold`. Requires Growth plan or higher.
201
+ - **Panoramics**: slice one wide image across cards (chat tags the cards, then `generate-panoramic-background` creates and slices the image) or stretch a foreground element across adjacent cards (`apply_element_span`). Gallery gutters are accounted for.
202
+ - **9 device perspectives**: flat, left-15, left-30, right-15, right-30, isometric, top-down, landscape-left, landscape-right
203
+ - **14 layouts**: `text-top-device-bottom`, `text-top-device-tilted`, `device-hero`, `social-proof`, `review-clip`, `screen-hero`, `lifestyle-hero`, `photo-device-hero`, `feature-grid`, `before-after`, `stats-hero`, `metric-badge`, `annotated-feature`, `step-flow`. The AI varies `deviceScale`, `deviceSide`, `textPosition`, and `textAlign` per card so a set never looks like duplicates.
187
204
 
188
205
  ## Workflow
189
206
 
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ const API_KEY = process.env.APPSCREENSHOTSTUDIO_API_KEY;
31
31
  // ⚠️ Keep in sync: lib/device-specs.ts, mcp-server/README.md, docs/api page, docs/mcp page
32
32
  const DEVICES = [
33
33
  { id: 'iphone-6.9', name: 'iPhone 16 Pro Max', width: 1260, height: 2736, category: 'iphone', required: true },
34
+ { id: 'iphone-6.3', name: 'iPhone 17 Pro', width: 1206, height: 2622, category: 'iphone', required: false },
34
35
  { id: 'ipad-13', name: 'iPad Pro 13"', width: 2064, height: 2752, category: 'ipad', required: true },
35
36
  { id: 'android-phone', name: 'Android Phone', width: 1080, height: 2340, category: 'android-phone', required: true },
36
37
  { id: 'android-tablet-10', name: 'Android Tablet 7"', width: 1200, height: 1920, category: 'android-tablet', required: true },
@@ -126,7 +127,7 @@ function buildDesignMessage(input) {
126
127
  // ─── MCP Server ─────────────────────────────────────────────────────────────────
127
128
  const server = new McpServer({
128
129
  name: 'appscreenshotstudio',
129
- version: '0.4.0',
130
+ version: '0.4.4',
130
131
  });
131
132
  // Tool 1: generate-screenshots
132
133
  server.registerTool('generate-screenshots', {
@@ -137,25 +138,30 @@ IMPORTANT: Before calling this tool, research the user's codebase to populate th
137
138
 
138
139
  The AI picks a narrative arc that fits the app's sell angle (trust-first for finance/health, visual-first for creative/lifestyle, problem-first for pain-relief apps, numbers-led for SaaS/analytics, community-first for social, feature-forward for multi-mode apps) and assigns a job to each card: HOOK → EDUCATE → PROVE → CONVERT.
139
140
 
140
- 9 layout types available per card:
141
+ 14 layout types available per card:
141
142
  - text-top-device-bottom: headline top, flat device bottom (feature/educate)
142
143
  - text-top-device-tilted: headline left, tilted device right (or mirrored)
143
144
  - device-hero: headline + large centered device, product-forward
144
- - social-proof: stars + quote + laurel stat, device optional
145
- - feature-callout: headline + features list, no device
146
- - lifestyle-hero: full-bleed photo background + text overlay
145
+ - social-proof: stars + quote + laurel stat, no device (testimonial-led)
146
+ - review-clip: rating-statement headline + stars + quote + bottom-clipped device
147
+ - screen-hero: top-clipped device + centered headline + optional trust stat
148
+ - lifestyle-hero: full-bleed photo background + text overlay (no device)
149
+ - photo-device-hero: full-bleed photo background + headline overlay + flat device
150
+ - feature-grid: headline + 2×2 or 2×3 icon+label grid, no device
147
151
  - before-after: dark before-half + bright after-half (transformation apps)
148
- - text-bottom: headline anchored to lower third, cinematic
149
152
  - stats-hero: giant centered stat(s), no device, numbers-led
153
+ - metric-badge: centered device + chunky "achievement card" floating over its screen
154
+ - annotated-feature: tilted device + side callout chip linked by a connector line
155
+ - step-flow: headline + 2-4 numbered step rows ("how it works"), no device
150
156
 
151
- Each card can carry auto-positioned compound fields: statRow, laurelStat, pressBanner, starRating, quote, featurePills, featureGrid, stepFlow, snippets, beforeAfterSplit.
157
+ Each card can carry auto-positioned compound fields: statRow, laurelStat, pressBanner, starRating, quote, featureGrid, beforeAfterSplit, stepList.
152
158
 
153
- Panoramic backgrounds slice one wide AI-generated or Pexels image across multiple cards for cohesion. Panoramic element spans stretch a foreground image or device across adjacent cards.
159
+ Panoramic backgrounds slice one wide AI-generated or Pexels image across multiple cards for cohesion. Panoramic element spans stretch a foreground image or device across adjacent cards. Note: if the design comes back with a panoramic background, the chat only tags the cards; call generate-panoramic-background afterwards to actually create and slice the wide image.
154
160
 
155
161
  Design features:
156
162
  - Rich text with per-word color, weight, italic, underline, highlight pills, gradient fills, stroke outlines, and emoji
157
- - Device perspective variants: flat, left-15/30, right-15/30, isometric, top-down, flat-lay, side-profile, landscape
158
- - 76+ decorative shapes across 13 categories (nature, weather, celebration, social, tech, health, food, travel, abstract, finance, education, pets, emoji)
163
+ - Device perspective variants: flat, left-15/30, right-15/30, isometric, top-down, landscape
164
+ - 77 decorative shapes across 13 categories (nature, weather, celebration, social, tech, health, food, travel, abstract, finance, education, pets, emoji), plus 17 core geometric shapes
159
165
  - Laurel stats: wing-left + wing-right shapes flanking a hero number
160
166
 
161
167
  App Store 60/40 rule enforced: minimum 60% of cards must show a device mockup, maximum 40% can be marketing-only.
@@ -268,23 +274,23 @@ What you can change:
268
274
  - Text: headlines, subtitles, badge text, font size, font family (Inter, Poppins, Montserrat, DM Sans, Space Grotesk, etc.)
269
275
  - Text styling: per-word color, bold, italic, underline, highlight pills (colored background behind words), gradient text, text stroke outlines
270
276
  - Colors: brand palette, gradient backgrounds, accent colors, text colors
271
- - Layouts (9 types): text-top-device-bottom, text-top-device-tilted, device-hero, social-proof, feature-callout, lifestyle-hero, before-after, text-bottom, stats-hero. The AI picks a narrative arc (HOOK → EDUCATE → PROVE → CONVERT) across the set.
272
- - Layout params: deviceScale (small/medium/large), deviceSide (left/right), textPosition (above/below), compoundPlacement (below-text/below-device)
273
- - Device mockups: perspective variants (flat, left-15, right-15, left-30, right-30, isometric, top-down, flat-lay, side-profile, landscape-left, landscape-right), 2D rotation, resize, reposition
277
+ - Layouts (14 types): text-top-device-bottom, text-top-device-tilted, device-hero, social-proof, review-clip, screen-hero, lifestyle-hero, photo-device-hero, feature-grid, before-after, stats-hero, metric-badge, annotated-feature, step-flow. The AI picks a narrative arc (HOOK → EDUCATE → PROVE → CONVERT) across the set.
278
+ - Layout params: deviceScale (small/medium/large), deviceSide (left/right), textPosition (above/below), textAlign (left/center)
279
+ - Device mockups: perspective variants (flat, left-15, right-15, left-30, right-30, isometric, top-down, landscape-left, landscape-right), 2D rotation, resize, reposition
280
+ - Frame color: recolor the device frame — "natural" (default), "black", "white", "gold". Examples: "make the iPhone gold", "black titanium finish", "white iPhone". Requires Growth plan or higher.
274
281
  - Switch devices: "make this for Apple Watch" / "duplicate for Android tablet" clones the project at the target device's canvas size
275
282
  - Add/remove cards: add a social proof card, remove card 3, add a marketing title card
276
- - Compound fields (auto-positioned): statRow, laurelStat, pressBanner, starRating, quote, featurePills, featureGrid, stepFlow, snippets, beforeAfterSplit
277
- - Panoramic backgrounds: one wide AI or Pexels image sliced across multiple cards ("pano the background across cards 1-3")
283
+ - Compound fields (auto-positioned): statRow, laurelStat, pressBanner, starRating, quote, featureGrid, beforeAfterSplit
284
+ - Panoramic backgrounds: one wide AI or Pexels image sliced across multiple cards ("pano the background across cards 1-3"). The edit only tags the cards; call generate-panoramic-background afterwards to create and slice the wide image.
278
285
  - Panoramic element spans: stretch a foreground image, device-mockup, or shape across adjacent cards ("pano the device across cards 1-2")
279
- - Floating elements: add/edit badges, star ratings, floating UI snippets
286
+ - Floating elements: add/edit badges, star ratings
280
287
  - Shapes: glow orbs, waves, blobs, rounded rectangles, circles, custom SVG paths
281
- - Decorative shapes: 76+ library shapes — leaf, flower, cloud, sparkle, heart, rocket, trophy, crown, coffee-cup, airplane, dollar-sign, paw-print, wing-left/wing-right (for laurels), and many more
288
+ - Decorative shapes: 77 library shapes — leaf, flower, cloud, sparkle, heart, rocket, trophy, crown, coffee-cup, airplane, dollar-sign, paw-print, wing-left/wing-right (for laurels), and many more
282
289
  - Backgrounds: solid, subtle-gradient, rich-gradient, photo (Pexels), or ai-generated; change gradient colors/angle; set a backgroundPrompt for AI-generated
283
290
  - Style: shadows, opacity, border radius, rotation, blur
284
291
 
285
292
  What isn't supported (the AI will flag these in unsupportedAsks):
286
293
  - Multiple devices side-by-side in a single card (e.g. iPhone + Watch in one scene) — each card renders one device. Use the duplicate-for-device workflow instead, or split across cards.
287
- - Frame color selection (white/silver/space-black) — pick a frame style in the canvas device panel.
288
294
  - Uploading a specific user-supplied screenshot into a mockup — use upload-screenshots tool first, then reference the uploaded project.
289
295
 
290
296
  Example edit messages:
@@ -295,6 +301,7 @@ Example edit messages:
295
301
  - "Pano the background photo across cards 1-3"
296
302
  - "Stretch the device on card 1 across into card 2"
297
303
  - "Make this project for Apple Watch"
304
+ - "Recolor the iPhone frame to gold across all cards"
298
305
  - "Replace card 3 with a CTA card saying Download Free"
299
306
  - "Switch card 2 to device-hero layout with statRow showing our three key metrics"
300
307
  - "Add a before-after card showing the transformation"
@@ -303,8 +310,8 @@ Example edit messages:
303
310
  inputSchema: z.object({
304
311
  project_id: z.string().describe('Project ID from a previous generate-screenshots call'),
305
312
  message: z.string().describe('What to change — use natural language'),
306
- card_indices: z.array(z.number()).optional()
307
- .describe('Target specific cards by index (0-based). e.g. [0] for card 1, [2,3] for cards 3-4. Omit to apply changes to all cards.'),
313
+ card_indices: z.array(z.number().int().min(0)).max(10).optional()
314
+ .describe('Target specific cards by index (0-based). e.g. [0] for card 1, [2,3] for cards 3-4. Max 10 indices. Omit to apply changes to all cards.'),
308
315
  codebase_context: z.object({
309
316
  readme_summary: z.string().optional(),
310
317
  key_screens: z.array(z.string()).max(15).optional(),
@@ -423,8 +430,8 @@ Returns the canvas state with:
423
430
  - cards[]: each card has an id, elements array, and optional background settings
424
431
  - Each element has: type (text, device-mockup, shape, badge, image, star-rating), position (x, y), size (width, height), zIndex, and type-specific properties
425
432
  - Text elements: fontFamily, fontSize, fontWeight, color, segments (for multi-color text with per-word color, bold, italic, underline, highlightColor)
426
- - Device mockups: perspectiveVariant (flat, left-15, right-15, left-30, right-30, isometric, top-down, flat-lay, side-profile, landscape-left, landscape-right), screenshotImage (null if no upload)
427
- - Shapes: 78+ shape types across 13 categories — core shapes (circle, rectangle, rounded-rect, blob, wave, triangle, diamond, hexagon, ring, star, wing-left, wing-right, etc.) plus decorative library shapes (leaf, flower, cloud, sparkle, heart, rocket, trophy, crown, coffee-cup, airplane, dollar-sign, paw-print, and many more)
433
+ - Device mockups: perspectiveVariant (flat, left-15, right-15, left-30, right-30, isometric, top-down, landscape-left, landscape-right), screenshotImage (null if no upload)
434
+ - Shapes: 94 shape types (17 core + 77 decorative across 13 categories) — core shapes (circle, rectangle, rounded-rect, blob, wave, triangle, diamond, hexagon, ring, star, wing-left, wing-right, etc.) plus decorative library shapes (leaf, flower, cloud, sparkle, heart, rocket, trophy, crown, coffee-cup, airplane, dollar-sign, paw-print, and many more)
428
435
  - projectMeta: globalVisualTheme, brandColors, mood, appCategory`,
429
436
  inputSchema: z.object({
430
437
  project_id: z.string().describe('Project ID to inspect'),
@@ -505,7 +512,55 @@ The generated image is cropped to exact device dimensions and set as the card's
505
512
  }],
506
513
  };
507
514
  });
508
- // Tool 7: prepare-screenshot-brief
515
+ // Tool 7: generate-panoramic-background
516
+ server.registerTool('generate-panoramic-background', {
517
+ title: 'Generate Panoramic Background',
518
+ description: `Generate one wide background image and slice it across multiple cards so they read as a continuous scene when the App Store gallery scrolls. The store gallery gap is accounted for, so slices line up after Apple's gutter.
519
+
520
+ Two image sources:
521
+ - prompt: AI-generated via Gemini. Costs 6 credits.
522
+ - pexels_query: stock landscape photo from Pexels. Free.
523
+
524
+ If you omit both, the tool fulfills a panoramic the chat already set up: when generate-screenshots or edit-screenshots returns a design with a panoramic background (e.g. after "pano the background across cards 1-3"), the cards are tagged but the wide image isn't created yet. Calling this tool with just the project_id picks up that pending panoramic and generates it.
525
+
526
+ Good prompts describe a continuous scene, not objects or text:
527
+ - "Misty mountain range at dawn, soft pink-to-blue gradient sky"
528
+ - "Calm ocean horizon at golden hour with gentle waves"
529
+ - "Abstract flowing emerald and teal silk waves"`,
530
+ inputSchema: z.object({
531
+ project_id: z.string().describe('Project ID'),
532
+ prompt: z.string().optional()
533
+ .describe('AI scene description (Gemini, 6 credits). Describe one continuous landscape scene: no text, devices, or UI.'),
534
+ pexels_query: z.string().optional()
535
+ .describe('Stock photo search query (Pexels, free). e.g. "mountain sunrise", "ocean horizon". Provide either this or prompt, not both.'),
536
+ card_indices: z.array(z.number().int().min(0)).max(10).optional()
537
+ .describe('Which cards share the panoramic (0-based, min 2). Default: first 3 cards (the ones visible in the App Store gallery without scrolling).'),
538
+ }),
539
+ }, async ({ project_id, prompt, pexels_query, card_indices }) => {
540
+ const res = await apiCall('POST', `/api/v1/projects/${project_id}/generate-panoramic-background`, {
541
+ ...(prompt ? { prompt } : {}),
542
+ ...(pexels_query ? { pexels_query } : {}),
543
+ ...(card_indices ? { card_indices } : {}),
544
+ });
545
+ if (!res.ok) {
546
+ return {
547
+ content: [{ type: 'text', text: `Panoramic background generation failed: ${JSON.stringify(res.data)}` }],
548
+ };
549
+ }
550
+ const data = res.data.data;
551
+ const creditsRemaining = res.data.credits_remaining;
552
+ return {
553
+ content: [{
554
+ type: 'text',
555
+ text: [
556
+ `Panoramic background generated and sliced across cards ${data.card_indices.map(i => i + 1).join(', ')}.`,
557
+ `Credits remaining: ${creditsRemaining}`,
558
+ `Project URL: ${API_BASE}/builder/${project_id}`,
559
+ ].join('\n'),
560
+ }],
561
+ };
562
+ });
563
+ // Tool 8: prepare-screenshot-brief
509
564
  server.registerTool('prepare-screenshot-brief', {
510
565
  title: 'Prepare Screenshot Brief',
511
566
  description: `Get a research checklist and strategy guide to prepare for screenshot generation. Call this BEFORE generate-screenshots to know what to look for in the codebase. Free — no API call or credits needed.
@@ -745,7 +800,7 @@ This tool helps you gather the right information so generate-screenshots produce
745
800
  }],
746
801
  };
747
802
  });
748
- // Tool 8: upload-screenshots
803
+ // Tool 9: upload-screenshots
749
804
  server.registerTool('upload-screenshots', {
750
805
  title: 'Upload App Screenshots',
751
806
  description: `Upload local app screenshots (from Simulator, emulator, or screen captures) into the device mockups of an existing project. This lets you add real app UI into the device frames without leaving the terminal.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appscreenshotstudio/mcp",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "MCP server for generating App Store screenshots via AppScreenshotStudio",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -64,7 +64,7 @@ Call the `generate-screenshots` MCP tool with:
64
64
  - `features`: top 3-5 features as array
65
65
  - `brand_colors`: `{ primary, secondary?, accent? }` from theme files
66
66
  - `mood`: user's chosen mood
67
- - `device_id`: `"iphone-6.9"` (default), `"ipad-13"`, `"android-phone"`, `"android-tablet-10"`
67
+ - `device_id`: `"iphone-6.9"` (default), `"ipad-13"`, `"android-phone"`, `"android-tablet-10"`, `"apple-watch-ultra"`
68
68
  - `count`: number of cards (3-10)
69
69
  - `story_flow`: `"auto"` (default), `"hero-intro"`, `"problem-solution"`, `"benefit-first"`, etc.
70
70
  - `codebase_context`: the full context object from Step 1