diff --git a/server.mjs b/server.mjs index c9472eb..9631ede 100644 --- a/server.mjs +++ b/server.mjs @@ -343,7 +343,10 @@ async function saveImage({ dataUrl, model, prefix }) { const filename = `${prefix}-${safeModel}-${Date.now()}.png`; const filepath = path.join(OUTPUT_DIR, filename); await fs.writeFile(filepath, bytes); - return { filepath, filename, bytes: bytes.length }; + // Return Buffer under `bytes` (NOT Buffer.length) — the caller's + // `bytes.toString('base64')` in the inline image block needs a real Buffer, + // not a Number. `size` holds the byte length for metadata/logging. + return { filepath, filename, bytes, size: bytes.length }; } // ---------- MCP server ---------- @@ -507,11 +510,11 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => { const { dataUrl, provider, mime } = await callOpenRouter({ prompt, model, aspect, transparent, imageUrls, }); - const { filepath, filename, bytes } = await saveImage({ + const { filepath, filename, bytes, size } = await saveImage({ dataUrl, model, prefix: transparent ? 'transparent' : 'opaque', }); process.stderr.write( - `[gen] OK provider=${provider} mime=${mime} ${Date.now() - t0}ms ${filepath} ${bytes}b\n`, + `[gen] OK provider=${provider} mime=${mime} ${Date.now() - t0}ms ${filepath} ${size}b\n`, ); // Return multipart content: image inline (base64) + text metadata. // The image block lets MCP clients (Cursor, Claude Desktop, Figma) render @@ -527,7 +530,7 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => { refs_used: imageUrls.length, filepath, filename, - bytes, + bytes: size, latency_ms: Date.now() - t0, }; return { @@ -580,7 +583,7 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => { } catch (e) { process.stderr.write(`[gen-ERR] ${e.stack || e}\n`); return { - content: [{ type: 'text', text: `Error: ${e.message}\n\nStack: ${(e.stack||'').toString().slice(0, 1000)}` }], + content: [{ type: 'text', text: `Error: ${e.message}` }], isError: true, }; }