thumbnail-generator-mcp 1.0.17 → 1.0.19
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/dist/index.js +120 -201
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import OpenAI, { toFile } from "openai";
|
|
5
6
|
import nodeMachineId from "node-machine-id";
|
|
6
7
|
const { machineIdSync } = nodeMachineId;
|
|
7
8
|
import * as fs from "fs";
|
|
@@ -9,20 +10,16 @@ import * as path from "path";
|
|
|
9
10
|
import * as os from "os";
|
|
10
11
|
// ─── Config ─────────────────────────────────────────────────────────────────
|
|
11
12
|
const LICENSE_KEY = (process.env.LICENSE_KEY ?? "").trim().toUpperCase();
|
|
12
|
-
const
|
|
13
|
+
const OPENAI_API_KEY = process.env.OPENAI_API_KEY ?? "";
|
|
13
14
|
const VALIDATE_URL = process.env.VALIDATE_URL ??
|
|
14
15
|
"https://thumbnail.automationhackers.net/api/licenses/validate";
|
|
15
|
-
const KIE_BASE = "https://api.kie.ai/api/v1";
|
|
16
|
-
const KIE_MODEL = "nano-banana-pro";
|
|
17
|
-
const POLL_INTERVAL_MS = 4000;
|
|
18
|
-
const POLL_TIMEOUT_MS = 3 * 60 * 1000; // 3 minutes
|
|
19
16
|
let cachedProducts = null;
|
|
20
17
|
async function validateLicense() {
|
|
21
18
|
if (cachedProducts)
|
|
22
19
|
return cachedProducts;
|
|
23
20
|
let machineId;
|
|
24
21
|
try {
|
|
25
|
-
machineId = machineIdSync(true);
|
|
22
|
+
machineId = machineIdSync(true); // hashed, privacy-safe
|
|
26
23
|
}
|
|
27
24
|
catch {
|
|
28
25
|
machineId = `fallback-${os.hostname()}-${os.userInfo().username}`;
|
|
@@ -51,101 +48,9 @@ async function validateLicense() {
|
|
|
51
48
|
cachedProducts = data.products ?? ["front_end"];
|
|
52
49
|
return cachedProducts;
|
|
53
50
|
}
|
|
54
|
-
// ───
|
|
55
|
-
// Uploads a local file to kie.ai's own file hosting (kieai.redpandaai.co).
|
|
56
|
-
// Uses the same API key — no third-party dependency. Files expire after 3 days
|
|
57
|
-
// which is more than enough for the generation pipeline to fetch them.
|
|
58
|
-
async function uploadImageForUrl(filePath) {
|
|
59
|
-
const fileBuffer = fs.readFileSync(filePath);
|
|
60
|
-
const filename = path.basename(filePath);
|
|
61
|
-
const ext = path.extname(filename).toLowerCase();
|
|
62
|
-
const mimeType = ext === ".png" ? "image/png" :
|
|
63
|
-
ext === ".webp" ? "image/webp" :
|
|
64
|
-
"image/jpeg";
|
|
65
|
-
const formData = new FormData();
|
|
66
|
-
formData.append("file", new Blob([fileBuffer], { type: mimeType }), filename);
|
|
67
|
-
formData.append("uploadPath", "thumbnails");
|
|
68
|
-
const res = await fetch("https://kieai.redpandaai.co/api/file-stream-upload", {
|
|
69
|
-
method: "POST",
|
|
70
|
-
headers: { "Authorization": `Bearer ${KIE_API_KEY}` },
|
|
71
|
-
body: formData,
|
|
72
|
-
});
|
|
73
|
-
if (!res.ok) {
|
|
74
|
-
throw new Error(`kie.ai image upload failed (${res.status}): ${await res.text()}`);
|
|
75
|
-
}
|
|
76
|
-
const data = (await res.json());
|
|
77
|
-
if (!data.success || !data.data?.downloadUrl) {
|
|
78
|
-
throw new Error(`kie.ai image upload failed: ${data.msg ?? "no downloadUrl returned"}`);
|
|
79
|
-
}
|
|
80
|
-
return data.data.downloadUrl;
|
|
81
|
-
}
|
|
82
|
-
// ─── kie.ai API ───────────────────────────────────────────────────────────────
|
|
83
|
-
async function createKieTask(opts) {
|
|
84
|
-
const res = await fetch(`${KIE_BASE}/jobs/createTask`, {
|
|
85
|
-
method: "POST",
|
|
86
|
-
headers: {
|
|
87
|
-
"Content-Type": "application/json",
|
|
88
|
-
"Authorization": `Bearer ${KIE_API_KEY}`,
|
|
89
|
-
},
|
|
90
|
-
body: JSON.stringify({
|
|
91
|
-
model: KIE_MODEL,
|
|
92
|
-
input: {
|
|
93
|
-
prompt: opts.prompt,
|
|
94
|
-
image_input: opts.imageUrls ?? [],
|
|
95
|
-
aspect_ratio: "16:9",
|
|
96
|
-
resolution: "4K",
|
|
97
|
-
output_format: "jpg",
|
|
98
|
-
},
|
|
99
|
-
}),
|
|
100
|
-
});
|
|
101
|
-
const data = (await res.json());
|
|
102
|
-
if (data.code !== 200 || !data.data?.taskId) {
|
|
103
|
-
throw new Error(`kie.ai task creation failed (${data.code}): ${data.msg}`);
|
|
104
|
-
}
|
|
105
|
-
return data.data.taskId;
|
|
106
|
-
}
|
|
107
|
-
async function pollKieTask(taskId) {
|
|
108
|
-
const deadline = Date.now() + POLL_TIMEOUT_MS;
|
|
109
|
-
while (Date.now() < deadline) {
|
|
110
|
-
await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
|
|
111
|
-
const res = await fetch(`${KIE_BASE}/jobs/recordInfo?taskId=${encodeURIComponent(taskId)}`, { headers: { "Authorization": `Bearer ${KIE_API_KEY}` } });
|
|
112
|
-
const data = (await res.json());
|
|
113
|
-
if (data.code !== 200 || !data.data) {
|
|
114
|
-
throw new Error(`kie.ai poll failed (${data.code}): ${data.msg}`);
|
|
115
|
-
}
|
|
116
|
-
const { state, resultJson, failMsg, failCode } = data.data;
|
|
117
|
-
if (state === "fail") {
|
|
118
|
-
throw new Error(`kie.ai generation failed: ${failMsg ?? failCode ?? "unknown error"}`);
|
|
119
|
-
}
|
|
120
|
-
if (state === "success" && resultJson) {
|
|
121
|
-
const result = JSON.parse(resultJson);
|
|
122
|
-
if (!result.resultUrls?.length) {
|
|
123
|
-
throw new Error("kie.ai returned success but no result URLs");
|
|
124
|
-
}
|
|
125
|
-
return result.resultUrls;
|
|
126
|
-
}
|
|
127
|
-
// state === "waiting" — keep polling
|
|
128
|
-
}
|
|
129
|
-
throw new Error("kie.ai generation timed out after 3 minutes");
|
|
130
|
-
}
|
|
131
|
-
// ─── Download and save ────────────────────────────────────────────────────────
|
|
132
|
-
async function downloadToDesktop(url) {
|
|
133
|
-
const res = await fetch(url);
|
|
134
|
-
if (!res.ok) {
|
|
135
|
-
throw new Error(`Failed to download result image (${res.status})`);
|
|
136
|
-
}
|
|
137
|
-
const buffer = Buffer.from(await res.arrayBuffer());
|
|
138
|
-
const timestamp = new Date()
|
|
139
|
-
.toISOString()
|
|
140
|
-
.replace(/[:.]/g, "-")
|
|
141
|
-
.slice(0, 19);
|
|
142
|
-
const outPath = path.join(os.homedir(), "Desktop", `thumbnail-${timestamp}.jpg`);
|
|
143
|
-
fs.writeFileSync(outPath, buffer);
|
|
144
|
-
return outPath;
|
|
145
|
-
}
|
|
146
|
-
// ─── Prompt builders ──────────────────────────────────────────────────────────
|
|
51
|
+
// ─── Prompt builders ─────────────────────────────────────────────────────────
|
|
147
52
|
function buildPhotoEditPrompt(opts) {
|
|
148
|
-
const { background, textOverlay, textPosition, textColor,
|
|
53
|
+
const { background, textOverlay, textPosition, textColor, outfitChange, expression, lightingStyle, mood, videoTopic, styleReferenceIntent } = opts;
|
|
149
54
|
const lightingDirective = lightingStyle === "bright"
|
|
150
55
|
? "Bright, even studio lighting — soft shadows, no harsh contrast, clean and professional"
|
|
151
56
|
: lightingStyle === "moody"
|
|
@@ -153,11 +58,11 @@ function buildPhotoEditPrompt(opts) {
|
|
|
153
58
|
: lightingStyle === "natural"
|
|
154
59
|
? "Natural daylight — soft diffused light, no artificial feel, warm and organic"
|
|
155
60
|
: "Cinematic dramatic lighting — strong rim light from top-behind, high contrast punchy shadows, light source top-front. This is the default for high-performing thumbnails.";
|
|
156
|
-
return `TASK: Transform
|
|
157
|
-
|
|
158
|
-
${
|
|
61
|
+
return `TASK: Transform this selfie into a professional YouTube thumbnail.
|
|
62
|
+
${videoTopic ? `\nVideo context: This thumbnail is for a video about "${videoTopic}". Use this to inform the mood, background details, and overall composition.\n` : ""}
|
|
63
|
+
${styleReferenceIntent ? `STYLE REFERENCE: A reference thumbnail is attached as an additional image. Your instructions for what to take from it:\n"${styleReferenceIntent}"\nFollow these instructions precisely — copy only what is specified above from the reference, and compose everything else fresh based on the details below. Do NOT copy the reference thumbnail's person, face, or text content.\n` : ""}
|
|
159
64
|
=== PRESERVE EXACTLY — DO NOT CHANGE THESE ===
|
|
160
|
-
- Face: exact facial structure, bone structure, skin tone, eye color, eyebrows, nose shape, mouth shape, jawline — NON-NEGOTIABLE
|
|
65
|
+
- Face: exact facial structure, bone structure, skin tone, eye color, eyebrows, nose shape, mouth shape, jawline — this is NON-NEGOTIABLE
|
|
161
66
|
- Hair: exact color, length, texture, and style
|
|
162
67
|
- Any accessories already visible (glasses, earrings, jewelry, etc.)
|
|
163
68
|
- Approximate body position and pose from the original photo
|
|
@@ -176,7 +81,7 @@ ${mood ? `Overall mood/vibe: ${mood}` : ""}
|
|
|
176
81
|
|
|
177
82
|
=== ADD ===
|
|
178
83
|
Text overlay: "${textOverlay}" — massive bold block letters (Impact or Bebas Neue), ${textColor} fill, thick black outline 4–5px, hard drop shadow offset bottom-right. Place text ${textPosition} of image. Text must be readable at 320×180px (small thumbnail size).
|
|
179
|
-
Composition: person fills 60–70% of frame, positioned to leave clear negative space for the text. Face is the undisputed focal point.
|
|
84
|
+
Composition: person fills 60–70% of frame, positioned to leave clear negative space for the text. Face is the undisputed focal point of the entire image.
|
|
180
85
|
|
|
181
86
|
=== OUTPUT REQUIREMENTS ===
|
|
182
87
|
- Dimensions: exactly 1280×720 pixels (16:9 widescreen)
|
|
@@ -209,17 +114,65 @@ Requirements:
|
|
|
209
114
|
- Text must be large and immediately readable at 320×180px
|
|
210
115
|
- Do NOT add watermarks, borders, or decorative frames`;
|
|
211
116
|
}
|
|
117
|
+
// ─── OpenAI image call ────────────────────────────────────────────────────────
|
|
118
|
+
async function generateImage(prompt, photoPath, photoMimeType, refPath, refMimeType) {
|
|
119
|
+
const client = new OpenAI({ apiKey: OPENAI_API_KEY });
|
|
120
|
+
if (photoPath) {
|
|
121
|
+
// Photo edit mode — pass selfie (+ optional style reference) via images.edit
|
|
122
|
+
const images = [
|
|
123
|
+
await toFile(fs.createReadStream(photoPath), null, { type: photoMimeType ?? "image/jpeg" }),
|
|
124
|
+
];
|
|
125
|
+
if (refPath) {
|
|
126
|
+
images.push(await toFile(fs.createReadStream(refPath), null, { type: refMimeType ?? "image/jpeg" }));
|
|
127
|
+
}
|
|
128
|
+
const response = await client.images.edit({
|
|
129
|
+
model: "gpt-image-1",
|
|
130
|
+
image: images.length === 1 ? images[0] : images,
|
|
131
|
+
prompt,
|
|
132
|
+
n: 1,
|
|
133
|
+
size: "1536x1024",
|
|
134
|
+
});
|
|
135
|
+
const b64 = response.data?.[0]?.b64_json;
|
|
136
|
+
if (!b64)
|
|
137
|
+
throw new Error("OpenAI returned no image data. Check your API key and billing.");
|
|
138
|
+
return { base64: b64, mimeType: "image/png" };
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Text-only generation
|
|
142
|
+
const response = await client.images.generate({
|
|
143
|
+
model: "gpt-image-1",
|
|
144
|
+
prompt,
|
|
145
|
+
n: 1,
|
|
146
|
+
size: "1536x1024",
|
|
147
|
+
});
|
|
148
|
+
const b64 = response.data?.[0]?.b64_json;
|
|
149
|
+
if (!b64)
|
|
150
|
+
throw new Error("OpenAI returned no image data. Check your API key and billing.");
|
|
151
|
+
return { base64: b64, mimeType: "image/png" };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
212
154
|
// ─── Path resolver ────────────────────────────────────────────────────────────
|
|
155
|
+
// Accepts a full absolute path or just a filename (resolved to ~/Desktop).
|
|
156
|
+
// When the exact filename isn't found, falls back to fuzzy matching against
|
|
157
|
+
// Desktop contents — handles Claude Desktop's habit of normalizing special
|
|
158
|
+
// characters (spaces, parentheses, etc.) to underscores when reporting filenames.
|
|
213
159
|
function resolveImagePath(input) {
|
|
214
160
|
if (path.isAbsolute(input)) {
|
|
161
|
+
// If the absolute path exists (e.g. a real local path), use it directly.
|
|
215
162
|
if (fs.existsSync(input))
|
|
216
163
|
return input;
|
|
164
|
+
// Otherwise it's likely Claude Desktop's internal upload staging path
|
|
165
|
+
// (e.g. /mnt/user-data/uploads/photo.jpg) which the native MCP process
|
|
166
|
+
// cannot access. Fall back to Desktop resolution using just the filename.
|
|
217
167
|
return resolveImagePath(path.basename(input));
|
|
218
168
|
}
|
|
219
169
|
const desktop = path.join(os.homedir(), "Desktop");
|
|
220
170
|
const exact = path.join(desktop, input);
|
|
221
171
|
if (fs.existsSync(exact))
|
|
222
172
|
return exact;
|
|
173
|
+
// Normalize a filename for fuzzy comparison:
|
|
174
|
+
// lowercase, collapse any run of non-alphanumeric chars to a single underscore,
|
|
175
|
+
// strip leading/trailing underscores.
|
|
223
176
|
const normalize = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
|
|
224
177
|
const inputExt = path.extname(input).toLowerCase();
|
|
225
178
|
const inputBase = normalize(path.basename(input, path.extname(input)));
|
|
@@ -237,15 +190,30 @@ function resolveImagePath(input) {
|
|
|
237
190
|
if (matches.length === 1)
|
|
238
191
|
return path.join(desktop, matches[0]);
|
|
239
192
|
if (matches.length > 1) {
|
|
193
|
+
// Ambiguous — throw so the caller surfaces a clear error rather than picking silently
|
|
240
194
|
throw new Error(`Multiple files on your Desktop match "${input}": ${matches.join(", ")}. ` +
|
|
241
195
|
`Please rename the one you want to use so it has a unique name, then try again.`);
|
|
242
196
|
}
|
|
243
197
|
}
|
|
244
198
|
catch (err) {
|
|
199
|
+
// Re-throw ambiguity errors; swallow readdirSync failures
|
|
245
200
|
if (err instanceof Error && err.message.includes("Multiple files"))
|
|
246
201
|
throw err;
|
|
247
202
|
}
|
|
248
|
-
return exact;
|
|
203
|
+
return exact; // return original path so the error message is meaningful
|
|
204
|
+
}
|
|
205
|
+
// ─── Save to desktop ──────────────────────────────────────────────────────────
|
|
206
|
+
function saveToDesktop(base64, mimeType) {
|
|
207
|
+
const ext = mimeType.split("/")[1] ?? "png";
|
|
208
|
+
const timestamp = new Date()
|
|
209
|
+
.toISOString()
|
|
210
|
+
.replace(/[:.]/g, "-")
|
|
211
|
+
.slice(0, 19);
|
|
212
|
+
const filename = `thumbnail-${timestamp}.${ext}`;
|
|
213
|
+
const desktop = path.join(os.homedir(), "Desktop");
|
|
214
|
+
const outPath = path.join(desktop, filename);
|
|
215
|
+
fs.writeFileSync(outPath, Buffer.from(base64, "base64"));
|
|
216
|
+
return outPath;
|
|
249
217
|
}
|
|
250
218
|
// ─── MCP Server ───────────────────────────────────────────────────────────────
|
|
251
219
|
const server = new Server({ name: "thumbnail-generator", version: "1.0.0" }, { capabilities: { tools: {} } });
|
|
@@ -253,70 +221,70 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
253
221
|
tools: [
|
|
254
222
|
{
|
|
255
223
|
name: "generate_thumbnail",
|
|
256
|
-
description: `Generates a YouTube thumbnail via
|
|
224
|
+
description: `Generates a YouTube thumbnail via OpenAI and saves it to the user's Desktop. Called by the youtube-thumbnail-generator skill after the full intake conversation is complete. Do not call this tool directly — use the skill to collect all parameters first.`,
|
|
257
225
|
inputSchema: {
|
|
258
226
|
type: "object",
|
|
259
227
|
properties: {
|
|
260
228
|
background: {
|
|
261
229
|
type: "string",
|
|
262
|
-
description: "Cinematic, specific background description. Must include scene details, colors, time of day, and mood.",
|
|
230
|
+
description: "Cinematic, specific background description. Must include scene details, colors, time of day, and mood. Not just 'dark' — e.g. 'Dark luxury office at night, single desk lamp casting a warm pool of light, blurred city skyline visible through rain-streaked windows behind me'",
|
|
263
231
|
},
|
|
264
232
|
text_overlay: {
|
|
265
233
|
type: "string",
|
|
266
|
-
description: "The exact text to display on the thumbnail. Short
|
|
234
|
+
description: "The exact text to display on the thumbnail in massive bold letters. Short and punchy — 2–5 words, ALL CAPS (e.g. 'I LOST EVERYTHING', 'STEAL THIS FROM ME', '$10K IN 30 DAYS')",
|
|
267
235
|
},
|
|
268
236
|
text_position: {
|
|
269
237
|
type: "string",
|
|
270
238
|
enum: ["left", "right", "top", "bottom", "top-left", "top-right", "bottom-left", "bottom-right"],
|
|
271
|
-
description: "Where to place the text overlay
|
|
239
|
+
description: "Where to place the text overlay — choose based on where the person is NOT positioned to avoid overlap",
|
|
272
240
|
default: "left",
|
|
273
241
|
},
|
|
274
242
|
text_color: {
|
|
275
243
|
type: "string",
|
|
276
|
-
description: "Text color
|
|
244
|
+
description: "Text color. 'white' is most readable, 'yellow' pops on dark backgrounds, 'red' creates urgency. Always paired with a thick black outline.",
|
|
277
245
|
default: "white",
|
|
278
246
|
},
|
|
279
247
|
photo_path: {
|
|
280
248
|
type: "string",
|
|
281
|
-
description: "
|
|
249
|
+
description: "Absolute file path to the selfie/photo to use as the base image (e.g. /Users/jordan/Desktop/selfie.jpg). If omitted, Gemini generates the subject from subject_description.",
|
|
282
250
|
},
|
|
283
251
|
subject_description: {
|
|
284
252
|
type: "string",
|
|
285
|
-
description: "
|
|
253
|
+
description: "Only when photo_path is omitted. Describe the person and their expression in detail (e.g. 'professional man in his 30s, dark stubble, wearing a navy suit, jaw dropped in shock, eyes wide open, pointing at camera').",
|
|
286
254
|
},
|
|
287
255
|
expression: {
|
|
288
256
|
type: "string",
|
|
289
|
-
description: "The expression to apply or intensify. Be very specific.",
|
|
257
|
+
description: "The expression to apply or intensify on the person's face. Be very specific — Gemini performs better with explicit direction (e.g. 'jaw dropped, eyes wide, eyebrows raised as high as possible', 'huge grin, teeth showing, eyebrows up', 'disgusted face, nose wrinkled, one eyebrow raised')",
|
|
290
258
|
},
|
|
291
259
|
lighting_style: {
|
|
292
260
|
type: "string",
|
|
293
261
|
enum: ["dramatic", "bright", "moody", "natural"],
|
|
294
|
-
description: "Lighting mood: dramatic (default), bright, moody,
|
|
262
|
+
description: "Lighting mood: 'dramatic' = cinematic rim light + high contrast (default, best for most thumbnails), 'bright' = clean even studio light, 'moody' = low-key one-sided, 'natural' = soft daylight",
|
|
295
263
|
default: "dramatic",
|
|
296
264
|
},
|
|
297
265
|
mood: {
|
|
298
266
|
type: "string",
|
|
299
|
-
description: "Optional overall vibe description.",
|
|
267
|
+
description: "Optional overall vibe description to guide Gemini's artistic choices (e.g. 'high-stakes and urgent', 'aspirational and premium', 'shocking and alarming', 'confident and authoritative')",
|
|
300
268
|
},
|
|
301
269
|
video_topic: {
|
|
302
270
|
type: "string",
|
|
303
|
-
description: "The video title or topic.",
|
|
271
|
+
description: "The video title or topic — helps Gemini make contextually appropriate decisions about composition and mood (e.g. 'How I made $10k in one month dropshipping', 'I quit my corporate job — here is what happened')",
|
|
304
272
|
},
|
|
305
273
|
style_reference_path: {
|
|
306
274
|
type: "string",
|
|
307
|
-
description: "
|
|
275
|
+
description: "Optional. Absolute path to a reference thumbnail image. Must be paired with style_reference_intent — do not pass this without also passing style_reference_intent.",
|
|
308
276
|
},
|
|
309
277
|
style_reference_intent: {
|
|
310
278
|
type: "string",
|
|
311
|
-
description: "Required when style_reference_path is provided. Plain-language description of exactly what to copy from the reference.",
|
|
279
|
+
description: "Required when style_reference_path is provided. Plain-language description of exactly what to copy from the reference and what to leave fresh. Ranges from narrow ('copy only the text style: bold yellow Impact letters with black outline on the right') to complete ('exact copy of the full layout — person left, dark background with orange glow, yellow text right — swap in user face and new text'). This is derived from a conversation with the user about what they want from the reference.",
|
|
312
280
|
},
|
|
313
281
|
outfit_change: {
|
|
314
282
|
type: "string",
|
|
315
|
-
description: "Optional outfit to swap onto the person
|
|
283
|
+
description: "Optional outfit to swap onto the person in photo mode (e.g. 'dark navy slim-fit suit, no tie, white shirt', 'casual grey hoodie, relaxed fit'). Omit to keep original outfit.",
|
|
316
284
|
},
|
|
317
285
|
variations: {
|
|
318
286
|
type: "number",
|
|
319
|
-
description: "Number of variations to generate (1–4). Default 1.",
|
|
287
|
+
description: "Number of variations to generate (1–4). Default 1. Use 2–3 for A/B testing.",
|
|
320
288
|
minimum: 1,
|
|
321
289
|
maximum: 4,
|
|
322
290
|
default: 1,
|
|
@@ -329,11 +297,9 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
329
297
|
}));
|
|
330
298
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
331
299
|
if (request.params.name !== "generate_thumbnail") {
|
|
332
|
-
return {
|
|
333
|
-
content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }],
|
|
334
|
-
isError: true,
|
|
335
|
-
};
|
|
300
|
+
return { content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }], isError: true };
|
|
336
301
|
}
|
|
302
|
+
// Validate license (cached after first call)
|
|
337
303
|
try {
|
|
338
304
|
await validateLicense();
|
|
339
305
|
}
|
|
@@ -351,100 +317,52 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
351
317
|
isError: true,
|
|
352
318
|
};
|
|
353
319
|
}
|
|
320
|
+
const savedPaths = [];
|
|
354
321
|
const count = Math.min(Math.max(Math.floor(variations), 1), 4);
|
|
355
|
-
//
|
|
356
|
-
let
|
|
357
|
-
let
|
|
322
|
+
// Resolve selfie path once — same for all variations
|
|
323
|
+
let resolvedPhotoPath;
|
|
324
|
+
let imageMimeType;
|
|
358
325
|
if (photo_path) {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
photoUrl = await uploadImageForUrl(resolvedPath);
|
|
362
|
-
}
|
|
363
|
-
catch (err) {
|
|
326
|
+
resolvedPhotoPath = resolveImagePath(photo_path);
|
|
327
|
+
if (!fs.existsSync(resolvedPhotoPath)) {
|
|
364
328
|
return {
|
|
365
|
-
content: [{ type: "text", text: `Could not
|
|
329
|
+
content: [{ type: "text", text: `Could not find photo at ${resolvedPhotoPath}. Make sure the file is on your Desktop.` }],
|
|
366
330
|
isError: true,
|
|
367
331
|
};
|
|
368
332
|
}
|
|
333
|
+
const ext = path.extname(resolvedPhotoPath).toLowerCase().replace(".", "");
|
|
334
|
+
imageMimeType = ext === "jpg" ? "image/jpeg" : ext === "png" ? "image/png" : "image/jpeg";
|
|
369
335
|
}
|
|
336
|
+
// Resolve reference path once — same for all variations
|
|
337
|
+
let resolvedRefPath;
|
|
338
|
+
let refMimeType;
|
|
370
339
|
if (style_reference_path) {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
referenceUrl = await uploadImageForUrl(resolvedRefPath);
|
|
374
|
-
}
|
|
375
|
-
catch (err) {
|
|
340
|
+
resolvedRefPath = resolveImagePath(style_reference_path);
|
|
341
|
+
if (!fs.existsSync(resolvedRefPath)) {
|
|
376
342
|
return {
|
|
377
|
-
content: [{ type: "text", text: `Could not
|
|
343
|
+
content: [{ type: "text", text: `Could not find style reference at ${resolvedRefPath}. Make sure the file is on your Desktop.` }],
|
|
378
344
|
isError: true,
|
|
379
345
|
};
|
|
380
346
|
}
|
|
347
|
+
const ext = path.extname(resolvedRefPath).toLowerCase().replace(".", "");
|
|
348
|
+
refMimeType = ext === "jpg" ? "image/jpeg" : ext === "png" ? "image/png" : "image/jpeg";
|
|
381
349
|
}
|
|
382
|
-
// Image order: selfie first, reference second
|
|
383
|
-
const imageUrls = [];
|
|
384
|
-
if (photoUrl)
|
|
385
|
-
imageUrls.push(photoUrl);
|
|
386
|
-
if (referenceUrl)
|
|
387
|
-
imageUrls.push(referenceUrl);
|
|
388
|
-
const prompt = photo_path
|
|
389
|
-
? buildPhotoEditPrompt({
|
|
390
|
-
background,
|
|
391
|
-
textOverlay: text_overlay,
|
|
392
|
-
textPosition: text_position,
|
|
393
|
-
textColor: text_color,
|
|
394
|
-
hasReference: !!referenceUrl,
|
|
395
|
-
outfitChange: outfit_change,
|
|
396
|
-
expression,
|
|
397
|
-
lightingStyle: lighting_style,
|
|
398
|
-
mood,
|
|
399
|
-
videoTopic: video_topic,
|
|
400
|
-
styleReferenceIntent: referenceUrl ? style_reference_intent : undefined,
|
|
401
|
-
})
|
|
402
|
-
: buildTextOnlyPrompt({
|
|
403
|
-
subject: subject_description,
|
|
404
|
-
background,
|
|
405
|
-
textOverlay: text_overlay,
|
|
406
|
-
textPosition: text_position,
|
|
407
|
-
textColor: text_color,
|
|
408
|
-
lightingStyle: lighting_style,
|
|
409
|
-
mood,
|
|
410
|
-
videoTopic: video_topic,
|
|
411
|
-
});
|
|
412
|
-
// Create all variation tasks, then poll them sequentially
|
|
413
|
-
const taskIds = [];
|
|
414
350
|
for (let i = 0; i < count; i++) {
|
|
351
|
+
const prompt = resolvedPhotoPath
|
|
352
|
+
? buildPhotoEditPrompt({ background, textOverlay: text_overlay, textPosition: text_position, textColor: text_color, outfitChange: outfit_change, expression, lightingStyle: lighting_style, mood, videoTopic: video_topic, styleReferenceIntent: resolvedRefPath ? style_reference_intent : undefined })
|
|
353
|
+
: buildTextOnlyPrompt({ subject: subject_description, background, textOverlay: text_overlay, textPosition: text_position, textColor: text_color, lightingStyle: lighting_style, mood, videoTopic: video_topic });
|
|
354
|
+
let result;
|
|
415
355
|
try {
|
|
416
|
-
|
|
417
|
-
taskIds.push(taskId);
|
|
418
|
-
}
|
|
419
|
-
catch (err) {
|
|
420
|
-
return {
|
|
421
|
-
content: [{ type: "text", text: `kie.ai error creating task: ${err instanceof Error ? err.message : err}` }],
|
|
422
|
-
isError: true,
|
|
423
|
-
};
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
const savedPaths = [];
|
|
427
|
-
for (const taskId of taskIds) {
|
|
428
|
-
let urls;
|
|
429
|
-
try {
|
|
430
|
-
urls = await pollKieTask(taskId);
|
|
431
|
-
}
|
|
432
|
-
catch (err) {
|
|
433
|
-
return {
|
|
434
|
-
content: [{ type: "text", text: `kie.ai error: ${err instanceof Error ? err.message : err}` }],
|
|
435
|
-
isError: true,
|
|
436
|
-
};
|
|
437
|
-
}
|
|
438
|
-
try {
|
|
439
|
-
const savedPath = await downloadToDesktop(urls[0]);
|
|
440
|
-
savedPaths.push(savedPath);
|
|
356
|
+
result = await generateImage(prompt, resolvedPhotoPath, imageMimeType, resolvedRefPath, refMimeType);
|
|
441
357
|
}
|
|
442
358
|
catch (err) {
|
|
443
359
|
return {
|
|
444
|
-
content: [{ type: "text", text: `
|
|
360
|
+
content: [{ type: "text", text: `OpenAI error: ${err instanceof Error ? err.message : err}` }],
|
|
445
361
|
isError: true,
|
|
446
362
|
};
|
|
447
363
|
}
|
|
364
|
+
const savedPath = saveToDesktop(result.base64, result.mimeType);
|
|
365
|
+
savedPaths.push(savedPath);
|
|
448
366
|
}
|
|
449
367
|
const pathList = savedPaths.map((p) => `• ${p}`).join("\n");
|
|
450
368
|
return {
|
|
@@ -460,11 +378,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
460
378
|
async function main() {
|
|
461
379
|
if (!LICENSE_KEY) {
|
|
462
380
|
console.error("ERROR: LICENSE_KEY environment variable is not set.");
|
|
381
|
+
console.error("Add it to your Claude Desktop config under the thumbnail-generator mcpServer env block.");
|
|
463
382
|
process.exit(1);
|
|
464
383
|
}
|
|
465
|
-
if (!
|
|
466
|
-
console.error("ERROR:
|
|
467
|
-
console.error("Get
|
|
384
|
+
if (!OPENAI_API_KEY) {
|
|
385
|
+
console.error("ERROR: OPENAI_API_KEY environment variable is not set.");
|
|
386
|
+
console.error("Get a key at https://platform.openai.com/api-keys");
|
|
468
387
|
process.exit(1);
|
|
469
388
|
}
|
|
470
389
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbnail-generator-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.19",
|
|
4
4
|
"description": "YouTube thumbnail generator MCP server for Claude Desktop",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"start": "node dist/index.js"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
+
"openai": "^4.0.0",
|
|
16
17
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
17
18
|
"node-machine-id": "^1.1.12"
|
|
18
19
|
},
|