thumbnail-generator-mcp 1.0.17 → 1.0.18

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 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 { GoogleGenerativeAI } from "@google/generative-ai";
5
6
  import nodeMachineId from "node-machine-id";
6
7
  const { machineIdSync } = nodeMachineId;
7
8
  import * as fs from "fs";
@@ -9,20 +10,17 @@ 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 KIE_API_KEY = process.env.KIE_API_KEY ?? "";
13
+ const GEMINI_API_KEY = process.env.GEMINI_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
16
+ const IMAGE_MODEL = "gemini-3-pro-image-preview";
19
17
  let cachedProducts = null;
20
18
  async function validateLicense() {
21
19
  if (cachedProducts)
22
20
  return cachedProducts;
23
21
  let machineId;
24
22
  try {
25
- machineId = machineIdSync(true);
23
+ machineId = machineIdSync(true); // hashed, privacy-safe
26
24
  }
27
25
  catch {
28
26
  machineId = `fallback-${os.hostname()}-${os.userInfo().username}`;
@@ -51,101 +49,9 @@ async function validateLicense() {
51
49
  cachedProducts = data.products ?? ["front_end"];
52
50
  return cachedProducts;
53
51
  }
54
- // ─── Image upload ─────────────────────────────────────────────────────────────
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 ──────────────────────────────────────────────────────────
52
+ // ─── Prompt builders ─────────────────────────────────────────────────────────
147
53
  function buildPhotoEditPrompt(opts) {
148
- const { background, textOverlay, textPosition, textColor, hasReference, outfitChange, expression, lightingStyle, mood, videoTopic, styleReferenceIntent, } = opts;
54
+ const { background, textOverlay, textPosition, textColor, outfitChange, expression, lightingStyle, mood, videoTopic, styleReferenceIntent } = opts;
149
55
  const lightingDirective = lightingStyle === "bright"
150
56
  ? "Bright, even studio lighting — soft shadows, no harsh contrast, clean and professional"
151
57
  : lightingStyle === "moody"
@@ -153,11 +59,11 @@ function buildPhotoEditPrompt(opts) {
153
59
  : lightingStyle === "natural"
154
60
  ? "Natural daylight — soft diffused light, no artificial feel, warm and organic"
155
61
  : "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 the provided selfie into a professional YouTube thumbnail.
157
- The first image is the selfie/photo of the person to feature.${hasReference ? `\nThe second image is a style reference thumbnail.` : ""}
158
- ${videoTopic ? `\nVideo context: This thumbnail is for a video about "${videoTopic}". Use this to inform the mood, background details, and overall composition.\n` : ""}${styleReferenceIntent && hasReference ? `STYLE REFERENCE INSTRUCTIONS: "${styleReferenceIntent}"\nFollow these precisely — copy only what is specified above from the reference, and compose everything else fresh. Do NOT copy the reference thumbnail's person, face, or text content.\n` : ""}
62
+ return `TASK: Transform this selfie into a professional YouTube thumbnail.
63
+ ${videoTopic ? `\nVideo context: This thumbnail is for a video about "${videoTopic}". Use this to inform the mood, background details, and overall composition.\n` : ""}
64
+ ${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
65
  === 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
66
+ - Face: exact facial structure, bone structure, skin tone, eye color, eyebrows, nose shape, mouth shape, jawline — this is NON-NEGOTIABLE
161
67
  - Hair: exact color, length, texture, and style
162
68
  - Any accessories already visible (glasses, earrings, jewelry, etc.)
163
69
  - Approximate body position and pose from the original photo
@@ -176,7 +82,7 @@ ${mood ? `Overall mood/vibe: ${mood}` : ""}
176
82
 
177
83
  === ADD ===
178
84
  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.
85
+ 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
86
 
181
87
  === OUTPUT REQUIREMENTS ===
182
88
  - Dimensions: exactly 1280×720 pixels (16:9 widescreen)
@@ -209,17 +115,62 @@ Requirements:
209
115
  - Text must be large and immediately readable at 320×180px
210
116
  - Do NOT add watermarks, borders, or decorative frames`;
211
117
  }
118
+ // ─── Gemini image call ────────────────────────────────────────────────────────
119
+ async function generateImage(prompt, imageBase64, imageMimeType, refBase64, refMimeType) {
120
+ const genAI = new GoogleGenerativeAI(GEMINI_API_KEY);
121
+ const model = genAI.getGenerativeModel({
122
+ model: IMAGE_MODEL,
123
+ generationConfig: {
124
+ // @ts-expect-error — responseModalities not yet in types
125
+ responseModalities: ["Text", "Image"],
126
+ },
127
+ });
128
+ const parts = [];
129
+ if (imageBase64 && imageMimeType) {
130
+ parts.push({
131
+ inlineData: { data: imageBase64, mimeType: imageMimeType },
132
+ });
133
+ }
134
+ if (refBase64 && refMimeType) {
135
+ parts.push({
136
+ inlineData: { data: refBase64, mimeType: refMimeType },
137
+ });
138
+ }
139
+ parts.push({ text: prompt });
140
+ const result = await model.generateContent(parts);
141
+ const response = result.response;
142
+ for (const part of response.candidates?.[0]?.content?.parts ?? []) {
143
+ if (part.inlineData?.data) {
144
+ return {
145
+ base64: part.inlineData.data,
146
+ mimeType: part.inlineData.mimeType ?? "image/png",
147
+ };
148
+ }
149
+ }
150
+ throw new Error("Gemini returned no image. Check your API key and billing.");
151
+ }
212
152
  // ─── Path resolver ────────────────────────────────────────────────────────────
153
+ // Accepts a full absolute path or just a filename (resolved to ~/Desktop).
154
+ // When the exact filename isn't found, falls back to fuzzy matching against
155
+ // Desktop contents — handles Claude Desktop's habit of normalizing special
156
+ // characters (spaces, parentheses, etc.) to underscores when reporting filenames.
213
157
  function resolveImagePath(input) {
214
158
  if (path.isAbsolute(input)) {
159
+ // If the absolute path exists (e.g. a real local path), use it directly.
215
160
  if (fs.existsSync(input))
216
161
  return input;
162
+ // Otherwise it's likely Claude Desktop's internal upload staging path
163
+ // (e.g. /mnt/user-data/uploads/photo.jpg) which the native MCP process
164
+ // cannot access. Fall back to Desktop resolution using just the filename.
217
165
  return resolveImagePath(path.basename(input));
218
166
  }
219
167
  const desktop = path.join(os.homedir(), "Desktop");
220
168
  const exact = path.join(desktop, input);
221
169
  if (fs.existsSync(exact))
222
170
  return exact;
171
+ // Normalize a filename for fuzzy comparison:
172
+ // lowercase, collapse any run of non-alphanumeric chars to a single underscore,
173
+ // strip leading/trailing underscores.
223
174
  const normalize = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
224
175
  const inputExt = path.extname(input).toLowerCase();
225
176
  const inputBase = normalize(path.basename(input, path.extname(input)));
@@ -237,15 +188,30 @@ function resolveImagePath(input) {
237
188
  if (matches.length === 1)
238
189
  return path.join(desktop, matches[0]);
239
190
  if (matches.length > 1) {
191
+ // Ambiguous — throw so the caller surfaces a clear error rather than picking silently
240
192
  throw new Error(`Multiple files on your Desktop match "${input}": ${matches.join(", ")}. ` +
241
193
  `Please rename the one you want to use so it has a unique name, then try again.`);
242
194
  }
243
195
  }
244
196
  catch (err) {
197
+ // Re-throw ambiguity errors; swallow readdirSync failures
245
198
  if (err instanceof Error && err.message.includes("Multiple files"))
246
199
  throw err;
247
200
  }
248
- return exact;
201
+ return exact; // return original path so the error message is meaningful
202
+ }
203
+ // ─── Save to desktop ──────────────────────────────────────────────────────────
204
+ function saveToDesktop(base64, mimeType) {
205
+ const ext = mimeType.split("/")[1] ?? "png";
206
+ const timestamp = new Date()
207
+ .toISOString()
208
+ .replace(/[:.]/g, "-")
209
+ .slice(0, 19);
210
+ const filename = `thumbnail-${timestamp}.${ext}`;
211
+ const desktop = path.join(os.homedir(), "Desktop");
212
+ const outPath = path.join(desktop, filename);
213
+ fs.writeFileSync(outPath, Buffer.from(base64, "base64"));
214
+ return outPath;
249
215
  }
250
216
  // ─── MCP Server ───────────────────────────────────────────────────────────────
251
217
  const server = new Server({ name: "thumbnail-generator", version: "1.0.0" }, { capabilities: { tools: {} } });
@@ -253,70 +219,70 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
253
219
  tools: [
254
220
  {
255
221
  name: "generate_thumbnail",
256
- description: `Generates a YouTube thumbnail via kie.ai (Nano Banana Pro) 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.`,
222
+ description: `Generates a YouTube thumbnail via Gemini 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
223
  inputSchema: {
258
224
  type: "object",
259
225
  properties: {
260
226
  background: {
261
227
  type: "string",
262
- description: "Cinematic, specific background description. Must include scene details, colors, time of day, and mood.",
228
+ 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
229
  },
264
230
  text_overlay: {
265
231
  type: "string",
266
- description: "The exact text to display on the thumbnail. Short, punchy, ALL CAPS, 2–5 words.",
232
+ 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
233
  },
268
234
  text_position: {
269
235
  type: "string",
270
236
  enum: ["left", "right", "top", "bottom", "top-left", "top-right", "bottom-left", "bottom-right"],
271
- description: "Where to place the text overlay.",
237
+ description: "Where to place the text overlay — choose based on where the person is NOT positioned to avoid overlap",
272
238
  default: "left",
273
239
  },
274
240
  text_color: {
275
241
  type: "string",
276
- description: "Text color: 'white', 'yellow', or 'red'.",
242
+ description: "Text color. 'white' is most readable, 'yellow' pops on dark backgrounds, 'red' creates urgency. Always paired with a thick black outline.",
277
243
  default: "white",
278
244
  },
279
245
  photo_path: {
280
246
  type: "string",
281
- description: "Filename of the selfie on the user's Desktop (e.g. IMG_5068.jpg). The MCP resolves it to ~/Desktop automatically.",
247
+ 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
248
  },
283
249
  subject_description: {
284
250
  type: "string",
285
- description: "Used when no photo is provided. Describe the person and expression in detail.",
251
+ 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
252
  },
287
253
  expression: {
288
254
  type: "string",
289
- description: "The expression to apply or intensify. Be very specific.",
255
+ 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
256
  },
291
257
  lighting_style: {
292
258
  type: "string",
293
259
  enum: ["dramatic", "bright", "moody", "natural"],
294
- description: "Lighting mood: dramatic (default), bright, moody, or natural.",
260
+ 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
261
  default: "dramatic",
296
262
  },
297
263
  mood: {
298
264
  type: "string",
299
- description: "Optional overall vibe description.",
265
+ 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
266
  },
301
267
  video_topic: {
302
268
  type: "string",
303
- description: "The video title or topic.",
269
+ 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
270
  },
305
271
  style_reference_path: {
306
272
  type: "string",
307
- description: "Filename of a reference thumbnail on the Desktop. Must be paired with style_reference_intent.",
273
+ 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
274
  },
309
275
  style_reference_intent: {
310
276
  type: "string",
311
- description: "Required when style_reference_path is provided. Plain-language description of exactly what to copy from the reference.",
277
+ 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
278
  },
313
279
  outfit_change: {
314
280
  type: "string",
315
- description: "Optional outfit to swap onto the person (photo mode only).",
281
+ 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
282
  },
317
283
  variations: {
318
284
  type: "number",
319
- description: "Number of variations to generate (1–4). Default 1.",
285
+ description: "Number of variations to generate (1–4). Default 1. Use 2–3 for A/B testing.",
320
286
  minimum: 1,
321
287
  maximum: 4,
322
288
  default: 1,
@@ -329,11 +295,9 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
329
295
  }));
330
296
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
331
297
  if (request.params.name !== "generate_thumbnail") {
332
- return {
333
- content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }],
334
- isError: true,
335
- };
298
+ return { content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }], isError: true };
336
299
  }
300
+ // Validate license (cached after first call)
337
301
  try {
338
302
  await validateLicense();
339
303
  }
@@ -351,100 +315,59 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
351
315
  isError: true,
352
316
  };
353
317
  }
318
+ const savedPaths = [];
354
319
  const count = Math.min(Math.max(Math.floor(variations), 1), 4);
355
- // Upload images once — same URLs reused across all variation tasks
356
- let photoUrl;
357
- let referenceUrl;
358
- if (photo_path) {
359
- const resolvedPath = resolveImagePath(photo_path);
360
- try {
361
- photoUrl = await uploadImageForUrl(resolvedPath);
362
- }
363
- catch (err) {
364
- return {
365
- content: [{ type: "text", text: `Could not upload selfie: ${err instanceof Error ? err.message : err}` }],
366
- isError: true,
367
- };
368
- }
369
- }
320
+ // Load reference photo once outside the loop — same for all variations
321
+ let refBase64;
322
+ let refMimeType;
370
323
  if (style_reference_path) {
371
324
  const resolvedRefPath = resolveImagePath(style_reference_path);
372
325
  try {
373
- referenceUrl = await uploadImageForUrl(resolvedRefPath);
326
+ const buf = fs.readFileSync(resolvedRefPath);
327
+ refBase64 = buf.toString("base64");
328
+ const ext = path.extname(resolvedRefPath).toLowerCase().replace(".", "");
329
+ refMimeType = ext === "jpg" ? "image/jpeg" : ext === "png" ? "image/png" : "image/jpeg";
374
330
  }
375
331
  catch (err) {
376
332
  return {
377
- content: [{ type: "text", text: `Could not upload style reference: ${err instanceof Error ? err.message : err}` }],
333
+ content: [{ type: "text", text: `Could not read style reference thumbnail at ${resolvedRefPath}: ${err instanceof Error ? err.message : err}` }],
378
334
  isError: true,
379
335
  };
380
336
  }
381
337
  }
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
338
  for (let i = 0; i < count; i++) {
415
- try {
416
- const taskId = await createKieTask({ prompt, imageUrls });
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
- };
339
+ let imageBase64;
340
+ let imageMimeType;
341
+ if (photo_path) {
342
+ const resolvedPhotoPath = resolveImagePath(photo_path);
343
+ try {
344
+ const buf = fs.readFileSync(resolvedPhotoPath);
345
+ imageBase64 = buf.toString("base64");
346
+ const ext = path.extname(resolvedPhotoPath).toLowerCase().replace(".", "");
347
+ imageMimeType = ext === "jpg" ? "image/jpeg" : ext === "png" ? "image/png" : "image/jpeg";
348
+ }
349
+ catch (err) {
350
+ return {
351
+ content: [{ type: "text", text: `Could not read photo at ${resolvedPhotoPath}: ${err instanceof Error ? err.message : err}` }],
352
+ isError: true,
353
+ };
354
+ }
437
355
  }
356
+ const prompt = photo_path
357
+ ? buildPhotoEditPrompt({ background, textOverlay: text_overlay, textPosition: text_position, textColor: text_color, outfitChange: outfit_change, expression, lightingStyle: lighting_style, mood, videoTopic: video_topic, styleReferenceIntent: refBase64 ? style_reference_intent : undefined })
358
+ : buildTextOnlyPrompt({ subject: subject_description, background, textOverlay: text_overlay, textPosition: text_position, textColor: text_color, lightingStyle: lighting_style, mood, videoTopic: video_topic });
359
+ let result;
438
360
  try {
439
- const savedPath = await downloadToDesktop(urls[0]);
440
- savedPaths.push(savedPath);
361
+ result = await generateImage(prompt, imageBase64, imageMimeType, refBase64, refMimeType);
441
362
  }
442
363
  catch (err) {
443
364
  return {
444
- content: [{ type: "text", text: `Download error: ${err instanceof Error ? err.message : err}` }],
365
+ content: [{ type: "text", text: `Gemini error: ${err instanceof Error ? err.message : err}` }],
445
366
  isError: true,
446
367
  };
447
368
  }
369
+ const savedPath = saveToDesktop(result.base64, result.mimeType);
370
+ savedPaths.push(savedPath);
448
371
  }
449
372
  const pathList = savedPaths.map((p) => `• ${p}`).join("\n");
450
373
  return {
@@ -460,11 +383,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
460
383
  async function main() {
461
384
  if (!LICENSE_KEY) {
462
385
  console.error("ERROR: LICENSE_KEY environment variable is not set.");
386
+ console.error("Add it to your Claude Desktop config under the thumbnail-generator mcpServer env block.");
463
387
  process.exit(1);
464
388
  }
465
- if (!KIE_API_KEY) {
466
- console.error("ERROR: KIE_API_KEY environment variable is not set.");
467
- console.error("Get your API key at https://kie.ai/api-key");
389
+ if (!GEMINI_API_KEY) {
390
+ console.error("ERROR: GEMINI_API_KEY environment variable is not set.");
391
+ console.error("Get a free key at https://aistudio.google.com/app/apikey");
468
392
  process.exit(1);
469
393
  }
470
394
  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.17",
3
+ "version": "1.0.18",
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
+ "@google/generative-ai": "^0.21.0",
16
17
  "@modelcontextprotocol/sdk": "^1.0.0",
17
18
  "node-machine-id": "^1.1.12"
18
19
  },