@appscreenshotstudio/mcp 0.6.0 → 0.6.2
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 +1 -0
- package/dist/index.js +38 -86
- package/package.json +1 -1
- package/skills/appscreenshotstudio/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -188,6 +188,7 @@ Once installed, use `/appscreenshotstudio` in Claude Code or just ask "generate
|
|
|
188
188
|
| `ipad-13` | iPad Pro 13" | 2064x2752 | App Store |
|
|
189
189
|
| `android-phone` | Android Phone | 1080x2340 | Play Store |
|
|
190
190
|
| `android-tablet-10` | Android Tablet 7" | 1200x1920 | Play Store |
|
|
191
|
+
| `android-tablet-large` | Android Tablet 10" | 1600x2560 | Play Store |
|
|
191
192
|
| `apple-watch-ultra` | Apple Watch Ultra 2 | 410x502 | App Store |
|
|
192
193
|
|
|
193
194
|
## Design Features
|
package/dist/index.js
CHANGED
|
@@ -28,13 +28,15 @@ if (args[0] === 'install-skill') {
|
|
|
28
28
|
const API_BASE = process.env.APPSCREENSHOTSTUDIO_URL || 'https://appscreenshotstudio.com';
|
|
29
29
|
const API_KEY = process.env.APPSCREENSHOTSTUDIO_API_KEY;
|
|
30
30
|
// ─── Devices (mirrors lib/device-specs.ts) ─────────────────────────────────────
|
|
31
|
-
// ⚠️ Keep in sync: lib/device-specs.ts, mcp-server/README.md, docs/api page, docs/mcp page
|
|
31
|
+
// ⚠️ Keep in sync: lib/device-specs.ts, mcp-server/README.md, docs/api page, docs/mcp page,
|
|
32
|
+
// mcp-server/skills/appscreenshotstudio/SKILL.md (ships in the npm package, so it drifts unseen)
|
|
32
33
|
const DEVICES = [
|
|
33
34
|
{ id: 'iphone-6.9', name: 'iPhone 16 Pro Max', width: 1260, height: 2736, category: 'iphone', required: true },
|
|
34
35
|
{ id: 'iphone-6.3', name: 'iPhone 17 Pro', width: 1206, height: 2622, category: 'iphone', required: false },
|
|
35
36
|
{ id: 'ipad-13', name: 'iPad Pro 13"', width: 2064, height: 2752, category: 'ipad', required: true },
|
|
36
37
|
{ id: 'android-phone', name: 'Android Phone', width: 1080, height: 2340, category: 'android-phone', required: true },
|
|
37
38
|
{ id: 'android-tablet-10', name: 'Android Tablet 7"', width: 1200, height: 1920, category: 'android-tablet', required: true },
|
|
39
|
+
{ id: 'android-tablet-large', name: 'Android Tablet 10"', width: 1600, height: 2560, category: 'android-tablet', required: false },
|
|
38
40
|
{ id: 'apple-watch-ultra', name: 'Apple Watch Ultra 2', width: 410, height: 502, category: 'apple-watch', required: true },
|
|
39
41
|
];
|
|
40
42
|
const VALID_DEVICE_IDS = DEVICES.map(d => d.id);
|
|
@@ -192,7 +194,7 @@ const chatImagesSchema = z.array(z.object({
|
|
|
192
194
|
// ─── MCP Server ─────────────────────────────────────────────────────────────────
|
|
193
195
|
const server = new McpServer({
|
|
194
196
|
name: 'appscreenshotstudio',
|
|
195
|
-
version: '0.
|
|
197
|
+
version: '0.6.1',
|
|
196
198
|
});
|
|
197
199
|
// Tool 1: generate-screenshots
|
|
198
200
|
server.registerTool('generate-screenshots', {
|
|
@@ -668,18 +670,20 @@ Good prompts describe a continuous scene, not objects or text:
|
|
|
668
670
|
// Tool 8: prepare-screenshot-brief
|
|
669
671
|
server.registerTool('prepare-screenshot-brief', {
|
|
670
672
|
title: 'Prepare Screenshot Brief',
|
|
671
|
-
description: `Get a
|
|
673
|
+
description: `Get a category playbook and repo-research checklist to prepare for screenshot generation. Call this BEFORE generate-screenshots. Free (no credits).
|
|
674
|
+
|
|
675
|
+
Pass app_category to get category-specific guidance pulled live from AppScreenshotStudio: the frame-1 hook playbook (default layout, what to avoid, caption patterns), the recommended story_flow and mood, and the exact facts to dig out of THIS app's repo for its category (e.g. security and compliance signals for finance, real gameplay art for games, the outcome for fitness).
|
|
672
676
|
|
|
673
677
|
Returns:
|
|
674
|
-
- A
|
|
675
|
-
-
|
|
676
|
-
-
|
|
677
|
-
-
|
|
678
|
+
- A category playbook (frame-1 hooks + layout + arc + mood) for the app_category
|
|
679
|
+
- A category-specific repo research focus (what to grep this app for)
|
|
680
|
+
- A generic codebase research checklist (file patterns per tech stack)
|
|
681
|
+
- Headline tips + the codebase_context schema to fill in
|
|
678
682
|
|
|
679
|
-
|
|
683
|
+
The more you gather here, the better generate-screenshots does on the first try.`,
|
|
680
684
|
inputSchema: z.object({
|
|
681
685
|
app_category: z.string().optional()
|
|
682
|
-
.describe('App category
|
|
686
|
+
.describe('App category, e.g. fitness, finance, gaming, social, productivity, health, travel, wellness. Drives the category playbook this tool returns; synonyms are normalized server-side.'),
|
|
683
687
|
platform: z.enum(['ios', 'android', 'both']).default('ios')
|
|
684
688
|
.describe('Target platform'),
|
|
685
689
|
}),
|
|
@@ -755,84 +759,31 @@ This tool helps you gather the right information so generate-screenshots produce
|
|
|
755
759
|
'- Main navigation → what users do most',
|
|
756
760
|
'- Key interactions → what makes the app satisfying to use',
|
|
757
761
|
];
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
''
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
const categoryRecommendations = {
|
|
767
|
-
'fitness': [
|
|
768
|
-
'**Fitness apps → `journey` or `benefit-first`**',
|
|
769
|
-
'- Lead with transformation: "Before → After" or "Track → Improve → Achieve"',
|
|
770
|
-
'- Highlight: workout tracking, progress charts, streaks, community challenges',
|
|
771
|
-
'- Mood: energetic or bold',
|
|
772
|
-
],
|
|
773
|
-
'finance': [
|
|
774
|
-
'**Finance apps → `benefit-first` or `problem-solution`**',
|
|
775
|
-
'- Lead with outcomes: "Save $X/month" or "See all accounts in one place"',
|
|
776
|
-
'- Highlight: dashboards, charts, budgets, alerts, security',
|
|
777
|
-
'- Mood: professional or calm',
|
|
778
|
-
],
|
|
779
|
-
'social': [
|
|
780
|
-
'**Social apps → `social-proof-bookend` or `hero-intro`**',
|
|
781
|
-
'- Lead with community: "Join 1M+ users" or show vibrant UI',
|
|
782
|
-
'- Highlight: feed, messaging, profiles, discovery, sharing',
|
|
783
|
-
'- Mood: playful or energetic',
|
|
784
|
-
],
|
|
785
|
-
'productivity': [
|
|
786
|
-
'**Productivity apps → `problem-solution` or `standard`**',
|
|
787
|
-
'- Lead with pain point: "Stop juggling 5 apps" → "One place for everything"',
|
|
788
|
-
'- Highlight: task management, collaboration, integrations, speed',
|
|
789
|
-
'- Mood: minimal or professional',
|
|
790
|
-
],
|
|
791
|
-
'food': [
|
|
792
|
-
'**Food/recipe apps → `hero-intro` or `journey`**',
|
|
793
|
-
'- Lead with beautiful imagery or the discovery experience',
|
|
794
|
-
'- Highlight: recipe browsing, meal planning, grocery lists, cooking mode',
|
|
795
|
-
'- Mood: warm or playful',
|
|
796
|
-
],
|
|
797
|
-
'travel': [
|
|
798
|
-
'**Travel apps → `journey` or `hero-intro`**',
|
|
799
|
-
'- Lead with destination discovery or trip planning flow',
|
|
800
|
-
'- Highlight: search, booking, itinerary, maps, offline access',
|
|
801
|
-
'- Mood: energetic or calm',
|
|
802
|
-
],
|
|
803
|
-
'health': [
|
|
804
|
-
'**Health/wellness apps → `benefit-first` or `journey`**',
|
|
805
|
-
'- Lead with outcomes: "Sleep better", "Feel calmer", "Know your body"',
|
|
806
|
-
'- Highlight: tracking, insights, reminders, progress, professional guidance',
|
|
807
|
-
'- Mood: calm or professional',
|
|
808
|
-
],
|
|
809
|
-
'education': [
|
|
810
|
-
'**Education apps → `journey` or `hero-intro`**',
|
|
811
|
-
'- Lead with learning progression or "learn anything" hero',
|
|
812
|
-
'- Highlight: courses, progress tracking, quizzes, certificates, offline',
|
|
813
|
-
'- Mood: playful or professional',
|
|
814
|
-
],
|
|
815
|
-
'developer-tools': [
|
|
816
|
-
'**Developer tools → `problem-solution` or `benefit-first`**',
|
|
817
|
-
'- Lead with workflow pain: "Stop copy-pasting" → "One command and done"',
|
|
818
|
-
'- Highlight: CLI, integrations, speed, DX, code examples',
|
|
819
|
-
'- Mood: minimal or bold',
|
|
820
|
-
],
|
|
821
|
-
'shopping': [
|
|
822
|
-
'**Shopping/e-commerce → `social-proof-bookend` or `benefit-first`**',
|
|
823
|
-
'- Lead with deals or trust: "Trusted by 500K+ shoppers"',
|
|
824
|
-
'- Highlight: discovery, search, wishlists, checkout, tracking',
|
|
825
|
-
'- Mood: bold or energetic',
|
|
826
|
-
],
|
|
827
|
-
};
|
|
828
|
-
if (app_category && categoryRecommendations[app_category]) {
|
|
829
|
-
storyFlows.push(...categoryRecommendations[app_category]);
|
|
762
|
+
let playbook = null;
|
|
763
|
+
try {
|
|
764
|
+
const res = await fetch(`${API_BASE}/api/v1/playbook?category=${encodeURIComponent(app_category ?? '')}`);
|
|
765
|
+
if (res.ok) {
|
|
766
|
+
const json = (await res.json());
|
|
767
|
+
if (json?.data)
|
|
768
|
+
playbook = json.data;
|
|
769
|
+
}
|
|
830
770
|
}
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
771
|
+
catch {
|
|
772
|
+
// offline or endpoint unavailable: the generic checklist still stands
|
|
773
|
+
}
|
|
774
|
+
const categoryBlock = [];
|
|
775
|
+
if (playbook && playbook.depth !== 'general') {
|
|
776
|
+
categoryBlock.push(`# Category Playbook: ${playbook.label}`, '', `Recommended \`story_flow\`: \`${playbook.arc}\` | \`mood\`: \`${playbook.mood}\``, '', '## Research this app for its category', `These are what a ${playbook.label.toLowerCase()} frame 1 lives or dies on. Dig them out of the repo before generating:`, ...playbook.researchFocus.map((r) => `- ${r}`), '');
|
|
777
|
+
if (playbook.frame1) {
|
|
778
|
+
categoryBlock.push('## Frame 1 (the hook) for this category', `Default layout: \`${playbook.frame1.defaultLayout}\`. Avoid: ${playbook.frame1.avoidLayouts.map((l) => `\`${l}\``).join(', ')}.`, `Why: ${playbook.frame1.rationale}`, '', 'Pick the hook that fits the app, then write the headline from its caption pattern:', ...playbook.frame1.hooks.map((h) => `- **${h.name}** (${h.layout}): ${h.shows}. Caption: ${h.captionPattern}`), '');
|
|
779
|
+
}
|
|
780
|
+
if (playbook.patternsToAvoid && playbook.patternsToAvoid.length) {
|
|
781
|
+
categoryBlock.push('## Avoid for this category', ...playbook.patternsToAvoid.map((p) => `- ${p}`), '');
|
|
782
|
+
}
|
|
783
|
+
if (playbook.highlights && playbook.highlights.length) {
|
|
784
|
+
categoryBlock.push(`Highlights worth surfacing: ${playbook.highlights.join(', ')}.`, '');
|
|
835
785
|
}
|
|
786
|
+
categoryBlock.push('---', '');
|
|
836
787
|
}
|
|
837
788
|
// Headline tips
|
|
838
789
|
const headlineTips = [
|
|
@@ -866,6 +817,7 @@ This tool helps you gather the right information so generate-screenshots produce
|
|
|
866
817
|
deviceTips.push('**Android (required for Play Store):**');
|
|
867
818
|
deviceTips.push('- Android Phone (android-phone): 1080×2340 — REQUIRED');
|
|
868
819
|
deviceTips.push('- Android Tablet 7" (android-tablet-10): 1200×1920 — REQUIRED');
|
|
820
|
+
deviceTips.push('- Android Tablet 10" (android-tablet-large): 1600×2560 — second large-screen slot');
|
|
869
821
|
deviceTips.push('');
|
|
870
822
|
}
|
|
871
823
|
// Schema reminder
|
|
@@ -901,7 +853,7 @@ This tool helps you gather the right information so generate-screenshots produce
|
|
|
901
853
|
return {
|
|
902
854
|
content: [{
|
|
903
855
|
type: 'text',
|
|
904
|
-
text: [...
|
|
856
|
+
text: [...categoryBlock, ...checklist, ...headlineTips, ...deviceTips, ...schemaReminder].join('\n'),
|
|
905
857
|
}],
|
|
906
858
|
};
|
|
907
859
|
});
|
package/package.json
CHANGED
|
@@ -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), `"iphone-6.3"`, `"ipad-13"`, `"android-phone"`, `"android-tablet-10"` (7"), `"android-tablet-large"` (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
|