thumbnail-generator-mcp 1.0.14 → 1.0.16

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,7 +2,6 @@
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";
6
5
  import nodeMachineId from "node-machine-id";
7
6
  const { machineIdSync } = nodeMachineId;
8
7
  import * as fs from "fs";
@@ -10,17 +9,20 @@ import * as path from "path";
10
9
  import * as os from "os";
11
10
  // ─── Config ─────────────────────────────────────────────────────────────────
12
11
  const LICENSE_KEY = (process.env.LICENSE_KEY ?? "").trim().toUpperCase();
13
- const GEMINI_API_KEY = process.env.GEMINI_API_KEY ?? "";
12
+ const KIE_API_KEY = process.env.KIE_API_KEY ?? "";
14
13
  const VALIDATE_URL = process.env.VALIDATE_URL ??
15
14
  "https://thumbnail.automationhackers.net/api/licenses/validate";
16
- const IMAGE_MODEL = "gemini-3-pro-image-preview";
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
17
19
  let cachedProducts = null;
18
20
  async function validateLicense() {
19
21
  if (cachedProducts)
20
22
  return cachedProducts;
21
23
  let machineId;
22
24
  try {
23
- machineId = machineIdSync(true); // hashed, privacy-safe
25
+ machineId = machineIdSync(true);
24
26
  }
25
27
  catch {
26
28
  machineId = `fallback-${os.hostname()}-${os.userInfo().username}`;
@@ -49,9 +51,94 @@ async function validateLicense() {
49
51
  cachedProducts = data.products ?? ["front_end"];
50
52
  return cachedProducts;
51
53
  }
52
- // ─── Prompt builders ─────────────────────────────────────────────────────────
54
+ // ─── Image upload ─────────────────────────────────────────────────────────────
55
+ // Uploads a local file to 0x0.st (free temporary hosting) to get a public URL
56
+ // that kie.ai can fetch. Files persist for at least 30 days.
57
+ async function uploadImageForUrl(filePath) {
58
+ const fileBuffer = fs.readFileSync(filePath);
59
+ const filename = path.basename(filePath);
60
+ const ext = path.extname(filename).toLowerCase();
61
+ const mimeType = ext === ".png" ? "image/png" :
62
+ ext === ".webp" ? "image/webp" :
63
+ "image/jpeg";
64
+ const formData = new FormData();
65
+ formData.append("file", new Blob([fileBuffer], { type: mimeType }), filename);
66
+ const res = await fetch("https://0x0.st", {
67
+ method: "POST",
68
+ body: formData,
69
+ });
70
+ if (!res.ok) {
71
+ throw new Error(`Image upload failed (${res.status}): ${await res.text()}`);
72
+ }
73
+ return (await res.text()).trim();
74
+ }
75
+ // ─── kie.ai API ───────────────────────────────────────────────────────────────
76
+ async function createKieTask(opts) {
77
+ const res = await fetch(`${KIE_BASE}/jobs/createTask`, {
78
+ method: "POST",
79
+ headers: {
80
+ "Content-Type": "application/json",
81
+ "Authorization": `Bearer ${KIE_API_KEY}`,
82
+ },
83
+ body: JSON.stringify({
84
+ model: KIE_MODEL,
85
+ input: {
86
+ prompt: opts.prompt,
87
+ image_input: opts.imageUrls ?? [],
88
+ aspect_ratio: "16:9",
89
+ resolution: "4K",
90
+ output_format: "jpg",
91
+ },
92
+ }),
93
+ });
94
+ const data = (await res.json());
95
+ if (data.code !== 200 || !data.data?.taskId) {
96
+ throw new Error(`kie.ai task creation failed (${data.code}): ${data.msg}`);
97
+ }
98
+ return data.data.taskId;
99
+ }
100
+ async function pollKieTask(taskId) {
101
+ const deadline = Date.now() + POLL_TIMEOUT_MS;
102
+ while (Date.now() < deadline) {
103
+ await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
104
+ const res = await fetch(`${KIE_BASE}/jobs/recordInfo?taskId=${encodeURIComponent(taskId)}`, { headers: { "Authorization": `Bearer ${KIE_API_KEY}` } });
105
+ const data = (await res.json());
106
+ if (data.code !== 200 || !data.data) {
107
+ throw new Error(`kie.ai poll failed (${data.code}): ${data.msg}`);
108
+ }
109
+ const { state, resultJson, failMsg, failCode } = data.data;
110
+ if (state === "fail") {
111
+ throw new Error(`kie.ai generation failed: ${failMsg ?? failCode ?? "unknown error"}`);
112
+ }
113
+ if (state === "success" && resultJson) {
114
+ const result = JSON.parse(resultJson);
115
+ if (!result.resultUrls?.length) {
116
+ throw new Error("kie.ai returned success but no result URLs");
117
+ }
118
+ return result.resultUrls;
119
+ }
120
+ // state === "waiting" — keep polling
121
+ }
122
+ throw new Error("kie.ai generation timed out after 3 minutes");
123
+ }
124
+ // ─── Download and save ────────────────────────────────────────────────────────
125
+ async function downloadToDesktop(url) {
126
+ const res = await fetch(url);
127
+ if (!res.ok) {
128
+ throw new Error(`Failed to download result image (${res.status})`);
129
+ }
130
+ const buffer = Buffer.from(await res.arrayBuffer());
131
+ const timestamp = new Date()
132
+ .toISOString()
133
+ .replace(/[:.]/g, "-")
134
+ .slice(0, 19);
135
+ const outPath = path.join(os.homedir(), "Desktop", `thumbnail-${timestamp}.jpg`);
136
+ fs.writeFileSync(outPath, buffer);
137
+ return outPath;
138
+ }
139
+ // ─── Prompt builders ──────────────────────────────────────────────────────────
53
140
  function buildPhotoEditPrompt(opts) {
54
- const { background, textOverlay, textPosition, textColor, outfitChange, expression, lightingStyle, mood, videoTopic, styleReferenceIntent } = opts;
141
+ const { background, textOverlay, textPosition, textColor, hasReference, outfitChange, expression, lightingStyle, mood, videoTopic, styleReferenceIntent, } = opts;
55
142
  const lightingDirective = lightingStyle === "bright"
56
143
  ? "Bright, even studio lighting — soft shadows, no harsh contrast, clean and professional"
57
144
  : lightingStyle === "moody"
@@ -59,11 +146,11 @@ function buildPhotoEditPrompt(opts) {
59
146
  : lightingStyle === "natural"
60
147
  ? "Natural daylight — soft diffused light, no artificial feel, warm and organic"
61
148
  : "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.";
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` : ""}
149
+ return `TASK: Transform the provided selfie into a professional YouTube thumbnail.
150
+ The first image is the selfie/photo of the person to feature.${hasReference ? `\nThe second image is a style reference thumbnail.` : ""}
151
+ ${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` : ""}
65
152
  === PRESERVE EXACTLY — DO NOT CHANGE THESE ===
66
- - Face: exact facial structure, bone structure, skin tone, eye color, eyebrows, nose shape, mouth shape, jawline — this is NON-NEGOTIABLE
153
+ - Face: exact facial structure, bone structure, skin tone, eye color, eyebrows, nose shape, mouth shape, jawline — NON-NEGOTIABLE
67
154
  - Hair: exact color, length, texture, and style
68
155
  - Any accessories already visible (glasses, earrings, jewelry, etc.)
69
156
  - Approximate body position and pose from the original photo
@@ -82,7 +169,7 @@ ${mood ? `Overall mood/vibe: ${mood}` : ""}
82
169
 
83
170
  === ADD ===
84
171
  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).
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.
172
+ Composition: person fills 60–70% of frame, positioned to leave clear negative space for the text. Face is the undisputed focal point.
86
173
 
87
174
  === OUTPUT REQUIREMENTS ===
88
175
  - Dimensions: exactly 1280×720 pixels (16:9 widescreen)
@@ -115,62 +202,17 @@ Requirements:
115
202
  - Text must be large and immediately readable at 320×180px
116
203
  - Do NOT add watermarks, borders, or decorative frames`;
117
204
  }
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
- }
152
205
  // ─── 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.
157
206
  function resolveImagePath(input) {
158
207
  if (path.isAbsolute(input)) {
159
- // If the absolute path exists (e.g. a real local path), use it directly.
160
208
  if (fs.existsSync(input))
161
209
  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.
165
210
  return resolveImagePath(path.basename(input));
166
211
  }
167
212
  const desktop = path.join(os.homedir(), "Desktop");
168
213
  const exact = path.join(desktop, input);
169
214
  if (fs.existsSync(exact))
170
215
  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.
174
216
  const normalize = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
175
217
  const inputExt = path.extname(input).toLowerCase();
176
218
  const inputBase = normalize(path.basename(input, path.extname(input)));
@@ -188,30 +230,15 @@ function resolveImagePath(input) {
188
230
  if (matches.length === 1)
189
231
  return path.join(desktop, matches[0]);
190
232
  if (matches.length > 1) {
191
- // Ambiguous — throw so the caller surfaces a clear error rather than picking silently
192
233
  throw new Error(`Multiple files on your Desktop match "${input}": ${matches.join(", ")}. ` +
193
234
  `Please rename the one you want to use so it has a unique name, then try again.`);
194
235
  }
195
236
  }
196
237
  catch (err) {
197
- // Re-throw ambiguity errors; swallow readdirSync failures
198
238
  if (err instanceof Error && err.message.includes("Multiple files"))
199
239
  throw err;
200
240
  }
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;
241
+ return exact;
215
242
  }
216
243
  // ─── MCP Server ───────────────────────────────────────────────────────────────
217
244
  const server = new Server({ name: "thumbnail-generator", version: "1.0.0" }, { capabilities: { tools: {} } });
@@ -219,70 +246,70 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
219
246
  tools: [
220
247
  {
221
248
  name: "generate_thumbnail",
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.`,
249
+ 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.`,
223
250
  inputSchema: {
224
251
  type: "object",
225
252
  properties: {
226
253
  background: {
227
254
  type: "string",
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'",
255
+ description: "Cinematic, specific background description. Must include scene details, colors, time of day, and mood.",
229
256
  },
230
257
  text_overlay: {
231
258
  type: "string",
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')",
259
+ description: "The exact text to display on the thumbnail. Short, punchy, ALL CAPS, 2–5 words.",
233
260
  },
234
261
  text_position: {
235
262
  type: "string",
236
263
  enum: ["left", "right", "top", "bottom", "top-left", "top-right", "bottom-left", "bottom-right"],
237
- description: "Where to place the text overlay — choose based on where the person is NOT positioned to avoid overlap",
264
+ description: "Where to place the text overlay.",
238
265
  default: "left",
239
266
  },
240
267
  text_color: {
241
268
  type: "string",
242
- description: "Text color. 'white' is most readable, 'yellow' pops on dark backgrounds, 'red' creates urgency. Always paired with a thick black outline.",
269
+ description: "Text color: 'white', 'yellow', or 'red'.",
243
270
  default: "white",
244
271
  },
245
272
  photo_path: {
246
273
  type: "string",
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.",
274
+ description: "Filename of the selfie on the user's Desktop (e.g. IMG_5068.jpg). The MCP resolves it to ~/Desktop automatically.",
248
275
  },
249
276
  subject_description: {
250
277
  type: "string",
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').",
278
+ description: "Used when no photo is provided. Describe the person and expression in detail.",
252
279
  },
253
280
  expression: {
254
281
  type: "string",
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')",
282
+ description: "The expression to apply or intensify. Be very specific.",
256
283
  },
257
284
  lighting_style: {
258
285
  type: "string",
259
286
  enum: ["dramatic", "bright", "moody", "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",
287
+ description: "Lighting mood: dramatic (default), bright, moody, or natural.",
261
288
  default: "dramatic",
262
289
  },
263
290
  mood: {
264
291
  type: "string",
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')",
292
+ description: "Optional overall vibe description.",
266
293
  },
267
294
  video_topic: {
268
295
  type: "string",
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')",
296
+ description: "The video title or topic.",
270
297
  },
271
298
  style_reference_path: {
272
299
  type: "string",
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.",
300
+ description: "Filename of a reference thumbnail on the Desktop. Must be paired with style_reference_intent.",
274
301
  },
275
302
  style_reference_intent: {
276
303
  type: "string",
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.",
304
+ description: "Required when style_reference_path is provided. Plain-language description of exactly what to copy from the reference.",
278
305
  },
279
306
  outfit_change: {
280
307
  type: "string",
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.",
308
+ description: "Optional outfit to swap onto the person (photo mode only).",
282
309
  },
283
310
  variations: {
284
311
  type: "number",
285
- description: "Number of variations to generate (1–4). Default 1. Use 2–3 for A/B testing.",
312
+ description: "Number of variations to generate (1–4). Default 1.",
286
313
  minimum: 1,
287
314
  maximum: 4,
288
315
  default: 1,
@@ -295,9 +322,11 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
295
322
  }));
296
323
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
297
324
  if (request.params.name !== "generate_thumbnail") {
298
- return { content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }], isError: true };
325
+ return {
326
+ content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }],
327
+ isError: true,
328
+ };
299
329
  }
300
- // Validate license (cached after first call)
301
330
  try {
302
331
  await validateLicense();
303
332
  }
@@ -315,59 +344,100 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
315
344
  isError: true,
316
345
  };
317
346
  }
318
- const savedPaths = [];
319
347
  const count = Math.min(Math.max(Math.floor(variations), 1), 4);
320
- // Load reference photo once outside the loop same for all variations
321
- let refBase64;
322
- let refMimeType;
348
+ // Upload images once same URLs reused across all variation tasks
349
+ let photoUrl;
350
+ let referenceUrl;
351
+ if (photo_path) {
352
+ const resolvedPath = resolveImagePath(photo_path);
353
+ try {
354
+ photoUrl = await uploadImageForUrl(resolvedPath);
355
+ }
356
+ catch (err) {
357
+ return {
358
+ content: [{ type: "text", text: `Could not upload selfie: ${err instanceof Error ? err.message : err}` }],
359
+ isError: true,
360
+ };
361
+ }
362
+ }
323
363
  if (style_reference_path) {
324
364
  const resolvedRefPath = resolveImagePath(style_reference_path);
325
365
  try {
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";
366
+ referenceUrl = await uploadImageForUrl(resolvedRefPath);
330
367
  }
331
368
  catch (err) {
332
369
  return {
333
- content: [{ type: "text", text: `Could not read style reference thumbnail at ${resolvedRefPath}: ${err instanceof Error ? err.message : err}` }],
370
+ content: [{ type: "text", text: `Could not upload style reference: ${err instanceof Error ? err.message : err}` }],
334
371
  isError: true,
335
372
  };
336
373
  }
337
374
  }
375
+ // Image order: selfie first, reference second
376
+ const imageUrls = [];
377
+ if (photoUrl)
378
+ imageUrls.push(photoUrl);
379
+ if (referenceUrl)
380
+ imageUrls.push(referenceUrl);
381
+ const prompt = photo_path
382
+ ? buildPhotoEditPrompt({
383
+ background,
384
+ textOverlay: text_overlay,
385
+ textPosition: text_position,
386
+ textColor: text_color,
387
+ hasReference: !!referenceUrl,
388
+ outfitChange: outfit_change,
389
+ expression,
390
+ lightingStyle: lighting_style,
391
+ mood,
392
+ videoTopic: video_topic,
393
+ styleReferenceIntent: referenceUrl ? style_reference_intent : undefined,
394
+ })
395
+ : buildTextOnlyPrompt({
396
+ subject: subject_description,
397
+ background,
398
+ textOverlay: text_overlay,
399
+ textPosition: text_position,
400
+ textColor: text_color,
401
+ lightingStyle: lighting_style,
402
+ mood,
403
+ videoTopic: video_topic,
404
+ });
405
+ // Create all variation tasks, then poll them sequentially
406
+ const taskIds = [];
338
407
  for (let i = 0; i < count; i++) {
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
- }
408
+ try {
409
+ const taskId = await createKieTask({ prompt, imageUrls });
410
+ taskIds.push(taskId);
411
+ }
412
+ catch (err) {
413
+ return {
414
+ content: [{ type: "text", text: `kie.ai error creating task: ${err instanceof Error ? err.message : err}` }],
415
+ isError: true,
416
+ };
417
+ }
418
+ }
419
+ const savedPaths = [];
420
+ for (const taskId of taskIds) {
421
+ let urls;
422
+ try {
423
+ urls = await pollKieTask(taskId);
424
+ }
425
+ catch (err) {
426
+ return {
427
+ content: [{ type: "text", text: `kie.ai error: ${err instanceof Error ? err.message : err}` }],
428
+ isError: true,
429
+ };
355
430
  }
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;
360
431
  try {
361
- result = await generateImage(prompt, imageBase64, imageMimeType, refBase64, refMimeType);
432
+ const savedPath = await downloadToDesktop(urls[0]);
433
+ savedPaths.push(savedPath);
362
434
  }
363
435
  catch (err) {
364
436
  return {
365
- content: [{ type: "text", text: `Gemini error: ${err instanceof Error ? err.message : err}` }],
437
+ content: [{ type: "text", text: `Download error: ${err instanceof Error ? err.message : err}` }],
366
438
  isError: true,
367
439
  };
368
440
  }
369
- const savedPath = saveToDesktop(result.base64, result.mimeType);
370
- savedPaths.push(savedPath);
371
441
  }
372
442
  const pathList = savedPaths.map((p) => `• ${p}`).join("\n");
373
443
  return {
@@ -383,12 +453,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
383
453
  async function main() {
384
454
  if (!LICENSE_KEY) {
385
455
  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.");
387
456
  process.exit(1);
388
457
  }
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");
458
+ if (!KIE_API_KEY) {
459
+ console.error("ERROR: KIE_API_KEY environment variable is not set.");
460
+ console.error("Get your API key at https://kie.ai/api-key");
392
461
  process.exit(1);
393
462
  }
394
463
  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.14",
3
+ "version": "1.0.16",
4
4
  "description": "YouTube thumbnail generator MCP server for Claude Desktop",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,6 @@
13
13
  "start": "node dist/index.js"
14
14
  },
15
15
  "dependencies": {
16
- "@google/generative-ai": "^0.21.0",
17
16
  "@modelcontextprotocol/sdk": "^1.0.0",
18
17
  "node-machine-id": "^1.1.12"
19
18
  },