@genart-dev/mcp-server 0.4.3 → 0.4.5

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
@@ -2893,7 +2893,9 @@ async function captureScreenshot(state, input) {
2893
2893
  previewPath
2894
2894
  });
2895
2895
  const previewJpegBase64 = Buffer.from(multi.inlineJpeg).toString("base64");
2896
- return { metadata, previewJpegBase64 };
2896
+ const previewDataUri = `data:image/jpeg;base64,${previewJpegBase64}`;
2897
+ metadata.previewDataUri = previewDataUri;
2898
+ return { metadata, previewJpegBase64, previewDataUri };
2897
2899
  } catch (e) {
2898
2900
  const msg = e instanceof Error ? e.message : String(e);
2899
2901
  throw new Error(`Renderer error for '${sketchId}': ${msg}`);
@@ -5503,11 +5505,34 @@ function registerSketchTools(server, state) {
5503
5505
  ).optional().describe('Component dependencies. Use list_components to see available. Keys are component names, values are semver ranges (e.g. "^1.0.0") or objects with version/code/exports.'),
5504
5506
  addToWorkspace: z2.string().optional().describe("Path to workspace to add sketch to after creation"),
5505
5507
  agent: z2.string().optional().describe("Your CLI agent name (e.g. 'claude-code', 'codex-cli', 'gemini-cli', 'opencode', 'kiro')"),
5506
- model: z2.string().optional().describe("Your AI model identifier (e.g. 'claude-opus-4-6', 'gpt-4o', 'gemini-2.5-pro')")
5508
+ model: z2.string().optional().describe("Your AI model identifier (e.g. 'claude-opus-4-6', 'gpt-4o', 'gemini-2.5-pro')"),
5509
+ capture: z2.boolean().optional().describe("When true, automatically capture a screenshot after creation. The result includes previewDataUri for rendering. IMPORTANT: When capture is true, you MUST show the preview to the user by creating an HTML artifact with an <img> tag using the previewDataUri from the capture metadata. Include savedPreviewTo as caption for the full-res file.")
5507
5510
  },
5508
5511
  async (args) => {
5509
5512
  try {
5510
5513
  const result = await createSketch(state, args);
5514
+ if (args.capture && !state.remoteMode) {
5515
+ try {
5516
+ const captureResult = await captureScreenshot(state, {
5517
+ target: "sketch",
5518
+ sketchId: args.id
5519
+ });
5520
+ return {
5521
+ content: [
5522
+ { type: "text", text: JSON.stringify({
5523
+ ...result,
5524
+ capture: captureResult.metadata
5525
+ }, null, 2) },
5526
+ { type: "image", data: captureResult.previewJpegBase64, mimeType: "image/jpeg" }
5527
+ ]
5528
+ };
5529
+ } catch (captureErr) {
5530
+ return jsonResult({
5531
+ ...result,
5532
+ captureError: captureErr instanceof Error ? captureErr.message : String(captureErr)
5533
+ });
5534
+ }
5535
+ }
5511
5536
  return jsonResult(result);
5512
5537
  } catch (e) {
5513
5538
  return toolError(e instanceof Error ? e.message : String(e));
@@ -6064,7 +6089,7 @@ function registerSnapshotTools(server, state) {
6064
6089
  function registerCaptureTools(server, state) {
6065
6090
  server.tool(
6066
6091
  "capture_screenshot",
6067
- "Capture a screenshot of a sketch. Returns metadata as text + a small inline JPEG image for visual review. In local mode, writes a full-res PNG to snapshots/<sketchId>-<seed>-preview.png next to the workspace. The savedPreviewTo path in metadata points to the file on disk.",
6092
+ "Capture a screenshot of a sketch. Returns metadata (including previewDataUri) as text + a small inline JPEG image. In local mode, writes a full-res PNG to snapshots/<sketchId>-<seed>-preview.png. IMPORTANT: After every capture, you MUST show the preview to the user by creating an HTML artifact containing an <img> tag using the previewDataUri from the metadata. Include the savedPreviewTo path as a caption so the user can find the full-res file.",
6068
6093
  {
6069
6094
  target: z2.enum(["selected", "sketch"]).optional().describe("What to capture (default: selected)"),
6070
6095
  sketchId: z2.string().optional().describe("Required when target is 'sketch'"),
@@ -6092,7 +6117,7 @@ function registerCaptureTools(server, state) {
6092
6117
  );
6093
6118
  server.tool(
6094
6119
  "capture_batch",
6095
- "Capture screenshots of multiple sketches in parallel. Returns metadata as text + inline JPEG images for visual review.",
6120
+ "Capture screenshots of multiple sketches in parallel. Returns per-sketch metadata (including previewDataUri) + inline JPEG images. IMPORTANT: After batch capture, you MUST show all previews to the user by creating an HTML artifact with <img> tags using each item's previewDataUri. Include sketch titles and savedPreviewTo paths.",
6096
6121
  {
6097
6122
  sketchIds: z2.array(z2.string()).optional().describe("IDs of sketches to capture (default: all)"),
6098
6123
  width: z2.number().optional().describe("Override width for all captures"),