muse-app-preview-mcp 1.0.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 ADDED
@@ -0,0 +1,58 @@
1
+ # MUSE App Preview MCP
2
+
3
+ MCP server for managing app store preview screenshots with MUSE Preview Maker.
4
+
5
+ ## Features
6
+
7
+ - **add_preview** - Add screenshot + title + subtitle as a preview set
8
+ - **list_previews** - List all saved preview sets
9
+ - **remove_preview** - Remove a specific preview
10
+ - **update_preview** - Update an existing preview
11
+ - **clear_all** - Clear all previews
12
+ - **open_app** - Open MUSE Preview Maker app
13
+ - **generate_previews** - Generate all preview images
14
+ - **get_settings** / **update_settings** - Manage default settings
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ # Using Claude Code
20
+ claude mcp add muse-app-preview-mcp npx muse-app-preview-mcp
21
+
22
+ # Or install globally
23
+ npm install -g muse-app-preview-mcp
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ ### Add Preview Sets
29
+
30
+ ```
31
+ Use add_preview tool:
32
+ - screenshotPath: "/path/to/screenshot.png"
33
+ - title: "Amazing Feature"
34
+ - subtitle: "Discover new possibilities"
35
+ ```
36
+
37
+ ### Generate Previews
38
+
39
+ ```
40
+ Use generate_previews tool to create all preview images.
41
+ The MUSE Preview Maker app will open and process all saved sets.
42
+ ```
43
+
44
+ ## Workflow
45
+
46
+ 1. While developing an app, capture screenshots
47
+ 2. Use `add_preview` to save each screenshot with title/subtitle
48
+ 3. Repeat for all preview screens
49
+ 4. Use `generate_previews` to create all App Store preview images
50
+
51
+ ## Requirements
52
+
53
+ - Node.js 18+
54
+ - MUSE Preview Maker app (macOS/iOS)
55
+
56
+ ## License
57
+
58
+ MIT
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,464 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import * as fs from "fs";
6
+ import * as path from "path";
7
+ import { exec } from "child_process";
8
+ import { promisify } from "util";
9
+ const execAsync = promisify(exec);
10
+ // Storage path
11
+ const STORE_PATH = path.join(process.env.HOME || "~", ".muse-app-preview", "previews.json");
12
+ const APP_BUNDLE_ID = "musepreviewmaker.loro";
13
+ // Ensure storage directory exists
14
+ function ensureStorageDir() {
15
+ const dir = path.dirname(STORE_PATH);
16
+ if (!fs.existsSync(dir)) {
17
+ fs.mkdirSync(dir, { recursive: true });
18
+ }
19
+ }
20
+ // Load preview store
21
+ function loadStore() {
22
+ ensureStorageDir();
23
+ if (fs.existsSync(STORE_PATH)) {
24
+ const data = fs.readFileSync(STORE_PATH, "utf-8");
25
+ return JSON.parse(data);
26
+ }
27
+ return {
28
+ previews: [],
29
+ settings: {
30
+ defaultDeviceType: "iphone_6_7",
31
+ defaultPaletteId: "ocean",
32
+ outputDirectory: path.join(process.env.HOME || "~", "Desktop", "Previews"),
33
+ },
34
+ };
35
+ }
36
+ // Save preview store
37
+ function saveStore(store) {
38
+ ensureStorageDir();
39
+ fs.writeFileSync(STORE_PATH, JSON.stringify(store, null, 2));
40
+ }
41
+ // Generate unique ID
42
+ function generateId() {
43
+ return `preview_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
44
+ }
45
+ // Tool definitions
46
+ const tools = [
47
+ {
48
+ name: "add_preview",
49
+ description: "Add a new preview set with screenshot, title, and subtitle. The screenshot will be used to generate an app store preview image.",
50
+ inputSchema: {
51
+ type: "object",
52
+ properties: {
53
+ screenshotPath: {
54
+ type: "string",
55
+ description: "Absolute path to the screenshot image file",
56
+ },
57
+ title: {
58
+ type: "string",
59
+ description: "Main title text for the preview (e.g., 'Amazing Feature')",
60
+ },
61
+ subtitle: {
62
+ type: "string",
63
+ description: "Subtitle text for the preview (e.g., 'Discover new possibilities')",
64
+ },
65
+ deviceType: {
66
+ type: "string",
67
+ description: "Device type (iphone_6_7, iphone_6_5, ipad_12_9, etc.). Optional.",
68
+ },
69
+ paletteId: {
70
+ type: "string",
71
+ description: "Color palette ID (ocean, sunset, forest, etc.). Optional.",
72
+ },
73
+ },
74
+ required: ["screenshotPath", "title", "subtitle"],
75
+ },
76
+ },
77
+ {
78
+ name: "list_previews",
79
+ description: "List all saved preview sets with their details.",
80
+ inputSchema: {
81
+ type: "object",
82
+ properties: {},
83
+ },
84
+ },
85
+ {
86
+ name: "remove_preview",
87
+ description: "Remove a specific preview set by its ID.",
88
+ inputSchema: {
89
+ type: "object",
90
+ properties: {
91
+ id: {
92
+ type: "string",
93
+ description: "The ID of the preview to remove",
94
+ },
95
+ },
96
+ required: ["id"],
97
+ },
98
+ },
99
+ {
100
+ name: "update_preview",
101
+ description: "Update an existing preview set.",
102
+ inputSchema: {
103
+ type: "object",
104
+ properties: {
105
+ id: {
106
+ type: "string",
107
+ description: "The ID of the preview to update",
108
+ },
109
+ title: {
110
+ type: "string",
111
+ description: "New title (optional)",
112
+ },
113
+ subtitle: {
114
+ type: "string",
115
+ description: "New subtitle (optional)",
116
+ },
117
+ screenshotPath: {
118
+ type: "string",
119
+ description: "New screenshot path (optional)",
120
+ },
121
+ deviceType: {
122
+ type: "string",
123
+ description: "New device type (optional)",
124
+ },
125
+ paletteId: {
126
+ type: "string",
127
+ description: "New palette ID (optional)",
128
+ },
129
+ },
130
+ required: ["id"],
131
+ },
132
+ },
133
+ {
134
+ name: "clear_all",
135
+ description: "Clear all saved preview sets.",
136
+ inputSchema: {
137
+ type: "object",
138
+ properties: {
139
+ confirm: {
140
+ type: "boolean",
141
+ description: "Must be true to confirm clearing all previews",
142
+ },
143
+ },
144
+ required: ["confirm"],
145
+ },
146
+ },
147
+ {
148
+ name: "open_app",
149
+ description: "Open MUSE Preview Maker app. If previews are saved, they will be loaded automatically.",
150
+ inputSchema: {
151
+ type: "object",
152
+ properties: {},
153
+ },
154
+ },
155
+ {
156
+ name: "generate_previews",
157
+ description: "Generate all preview images using MUSE Preview Maker. The app will process all saved preview sets and export them.",
158
+ inputSchema: {
159
+ type: "object",
160
+ properties: {
161
+ outputDirectory: {
162
+ type: "string",
163
+ description: "Directory to save generated previews. Optional.",
164
+ },
165
+ exportAllSizes: {
166
+ type: "boolean",
167
+ description: "Export all device sizes for each preview. Default: false.",
168
+ },
169
+ },
170
+ },
171
+ },
172
+ {
173
+ name: "get_settings",
174
+ description: "Get current settings (default device type, palette, output directory).",
175
+ inputSchema: {
176
+ type: "object",
177
+ properties: {},
178
+ },
179
+ },
180
+ {
181
+ name: "update_settings",
182
+ description: "Update default settings.",
183
+ inputSchema: {
184
+ type: "object",
185
+ properties: {
186
+ defaultDeviceType: {
187
+ type: "string",
188
+ description: "Default device type for new previews",
189
+ },
190
+ defaultPaletteId: {
191
+ type: "string",
192
+ description: "Default color palette for new previews",
193
+ },
194
+ outputDirectory: {
195
+ type: "string",
196
+ description: "Default output directory for generated previews",
197
+ },
198
+ },
199
+ },
200
+ },
201
+ ];
202
+ // Tool handlers
203
+ async function handleAddPreview(args) {
204
+ // Validate screenshot exists
205
+ if (!fs.existsSync(args.screenshotPath)) {
206
+ return JSON.stringify({
207
+ success: false,
208
+ error: `Screenshot not found: ${args.screenshotPath}`,
209
+ });
210
+ }
211
+ const store = loadStore();
212
+ const preview = {
213
+ id: generateId(),
214
+ screenshotPath: args.screenshotPath,
215
+ title: args.title,
216
+ subtitle: args.subtitle,
217
+ deviceType: args.deviceType || store.settings.defaultDeviceType,
218
+ paletteId: args.paletteId || store.settings.defaultPaletteId,
219
+ createdAt: new Date().toISOString(),
220
+ };
221
+ store.previews.push(preview);
222
+ saveStore(store);
223
+ return JSON.stringify({
224
+ success: true,
225
+ message: `Preview added successfully`,
226
+ preview: preview,
227
+ totalPreviews: store.previews.length,
228
+ });
229
+ }
230
+ async function handleListPreviews() {
231
+ const store = loadStore();
232
+ return JSON.stringify({
233
+ success: true,
234
+ count: store.previews.length,
235
+ previews: store.previews.map((p, index) => ({
236
+ index: index + 1,
237
+ id: p.id,
238
+ title: p.title,
239
+ subtitle: p.subtitle,
240
+ screenshotPath: p.screenshotPath,
241
+ deviceType: p.deviceType,
242
+ paletteId: p.paletteId,
243
+ createdAt: p.createdAt,
244
+ })),
245
+ });
246
+ }
247
+ async function handleRemovePreview(args) {
248
+ const store = loadStore();
249
+ const index = store.previews.findIndex((p) => p.id === args.id);
250
+ if (index === -1) {
251
+ return JSON.stringify({
252
+ success: false,
253
+ error: `Preview not found: ${args.id}`,
254
+ });
255
+ }
256
+ const removed = store.previews.splice(index, 1)[0];
257
+ saveStore(store);
258
+ return JSON.stringify({
259
+ success: true,
260
+ message: `Preview removed`,
261
+ removed: removed,
262
+ remainingPreviews: store.previews.length,
263
+ });
264
+ }
265
+ async function handleUpdatePreview(args) {
266
+ const store = loadStore();
267
+ const preview = store.previews.find((p) => p.id === args.id);
268
+ if (!preview) {
269
+ return JSON.stringify({
270
+ success: false,
271
+ error: `Preview not found: ${args.id}`,
272
+ });
273
+ }
274
+ if (args.title)
275
+ preview.title = args.title;
276
+ if (args.subtitle)
277
+ preview.subtitle = args.subtitle;
278
+ if (args.screenshotPath) {
279
+ if (!fs.existsSync(args.screenshotPath)) {
280
+ return JSON.stringify({
281
+ success: false,
282
+ error: `Screenshot not found: ${args.screenshotPath}`,
283
+ });
284
+ }
285
+ preview.screenshotPath = args.screenshotPath;
286
+ }
287
+ if (args.deviceType)
288
+ preview.deviceType = args.deviceType;
289
+ if (args.paletteId)
290
+ preview.paletteId = args.paletteId;
291
+ saveStore(store);
292
+ return JSON.stringify({
293
+ success: true,
294
+ message: `Preview updated`,
295
+ preview: preview,
296
+ });
297
+ }
298
+ async function handleClearAll(args) {
299
+ if (!args.confirm) {
300
+ return JSON.stringify({
301
+ success: false,
302
+ error: "Please set confirm: true to clear all previews",
303
+ });
304
+ }
305
+ const store = loadStore();
306
+ const count = store.previews.length;
307
+ store.previews = [];
308
+ saveStore(store);
309
+ return JSON.stringify({
310
+ success: true,
311
+ message: `Cleared ${count} preview(s)`,
312
+ });
313
+ }
314
+ async function handleOpenApp() {
315
+ try {
316
+ // Export previews for the app to load
317
+ const store = loadStore();
318
+ const exportPath = path.join(process.env.HOME || "~", ".muse-app-preview", "pending-previews.json");
319
+ fs.writeFileSync(exportPath, JSON.stringify(store.previews, null, 2));
320
+ // Try to open the app
321
+ await execAsync(`open -b ${APP_BUNDLE_ID}`);
322
+ return JSON.stringify({
323
+ success: true,
324
+ message: "MUSE Preview Maker opened",
325
+ previewsLoaded: store.previews.length,
326
+ });
327
+ }
328
+ catch (error) {
329
+ return JSON.stringify({
330
+ success: false,
331
+ error: `Failed to open app: ${error}`,
332
+ hint: "Make sure MUSE Preview Maker is installed",
333
+ });
334
+ }
335
+ }
336
+ async function handleGeneratePreviews(args) {
337
+ const store = loadStore();
338
+ if (store.previews.length === 0) {
339
+ return JSON.stringify({
340
+ success: false,
341
+ error: "No previews to generate. Add some previews first.",
342
+ });
343
+ }
344
+ const outputDir = args.outputDirectory || store.settings.outputDirectory;
345
+ // Ensure output directory exists
346
+ if (!fs.existsSync(outputDir)) {
347
+ fs.mkdirSync(outputDir, { recursive: true });
348
+ }
349
+ // Export previews for the app
350
+ const exportPath = path.join(process.env.HOME || "~", ".muse-app-preview", "pending-previews.json");
351
+ const exportData = {
352
+ previews: store.previews,
353
+ options: {
354
+ outputDirectory: outputDir,
355
+ exportAllSizes: args.exportAllSizes || false,
356
+ autoGenerate: true,
357
+ },
358
+ };
359
+ fs.writeFileSync(exportPath, JSON.stringify(exportData, null, 2));
360
+ try {
361
+ // Open the app with generate flag
362
+ await execAsync(`open -b ${APP_BUNDLE_ID} --args --generate`);
363
+ return JSON.stringify({
364
+ success: true,
365
+ message: `Generation started for ${store.previews.length} preview(s)`,
366
+ outputDirectory: outputDir,
367
+ previews: store.previews.map((p) => ({
368
+ title: p.title,
369
+ subtitle: p.subtitle,
370
+ })),
371
+ });
372
+ }
373
+ catch (error) {
374
+ return JSON.stringify({
375
+ success: false,
376
+ error: `Failed to start generation: ${error}`,
377
+ });
378
+ }
379
+ }
380
+ async function handleGetSettings() {
381
+ const store = loadStore();
382
+ return JSON.stringify({
383
+ success: true,
384
+ settings: store.settings,
385
+ });
386
+ }
387
+ async function handleUpdateSettings(args) {
388
+ const store = loadStore();
389
+ if (args.defaultDeviceType) {
390
+ store.settings.defaultDeviceType = args.defaultDeviceType;
391
+ }
392
+ if (args.defaultPaletteId) {
393
+ store.settings.defaultPaletteId = args.defaultPaletteId;
394
+ }
395
+ if (args.outputDirectory) {
396
+ store.settings.outputDirectory = args.outputDirectory;
397
+ }
398
+ saveStore(store);
399
+ return JSON.stringify({
400
+ success: true,
401
+ message: "Settings updated",
402
+ settings: store.settings,
403
+ });
404
+ }
405
+ // Main server setup
406
+ const server = new Server({
407
+ name: "muse-app-preview-mcp",
408
+ version: "1.0.0",
409
+ }, {
410
+ capabilities: {
411
+ tools: {},
412
+ },
413
+ });
414
+ // Register tool list handler
415
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
416
+ tools,
417
+ }));
418
+ // Register tool call handler
419
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
420
+ const { name, arguments: args } = request.params;
421
+ let result;
422
+ switch (name) {
423
+ case "add_preview":
424
+ result = await handleAddPreview(args);
425
+ break;
426
+ case "list_previews":
427
+ result = await handleListPreviews();
428
+ break;
429
+ case "remove_preview":
430
+ result = await handleRemovePreview(args);
431
+ break;
432
+ case "update_preview":
433
+ result = await handleUpdatePreview(args);
434
+ break;
435
+ case "clear_all":
436
+ result = await handleClearAll(args);
437
+ break;
438
+ case "open_app":
439
+ result = await handleOpenApp();
440
+ break;
441
+ case "generate_previews":
442
+ result = await handleGeneratePreviews(args);
443
+ break;
444
+ case "get_settings":
445
+ result = await handleGetSettings();
446
+ break;
447
+ case "update_settings":
448
+ result = await handleUpdateSettings(args);
449
+ break;
450
+ default:
451
+ result = JSON.stringify({ error: `Unknown tool: ${name}` });
452
+ }
453
+ return {
454
+ content: [{ type: "text", text: result }],
455
+ };
456
+ });
457
+ // Start server
458
+ async function main() {
459
+ const transport = new StdioServerTransport();
460
+ await server.connect(transport);
461
+ console.error("MUSE App Preview MCP server started");
462
+ }
463
+ main().catch(console.error);
464
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "muse-app-preview-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for managing app store preview screenshots with MUSE Preview Maker",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "muse-app-preview-mcp": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "start": "node dist/index.js",
12
+ "dev": "ts-node src/index.ts",
13
+ "prepare": "npm run build"
14
+ },
15
+ "keywords": [
16
+ "mcp",
17
+ "preview",
18
+ "app-store",
19
+ "screenshot",
20
+ "claude"
21
+ ],
22
+ "author": "MUSE",
23
+ "license": "MIT",
24
+ "type": "module",
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "dependencies": {
29
+ "@modelcontextprotocol/sdk": "^1.0.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.10.0",
33
+ "typescript": "^5.3.0"
34
+ },
35
+ "engines": {
36
+ "node": ">=18.0.0"
37
+ },
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/MUSE-CODE-SPACE/muse-app-preview-mcp.git"
41
+ }
42
+ }