test-image-response.cjsโข3.09 kB
#!/usr/bin/env node
/**
* Test script demonstrating proper MCP image response format
*/
// Test with a simple base64 PNG image
const RED_CIRCLE_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mP8/5+hnoEIwDiqkL4KAcT9GO0U4BxoAAAAAElFTkSuQmCC";
// Proper MCP image response format as shown in your example
const mcpImageResponse = {
content: [
{
type: "image",
data: RED_CIRCLE_BASE64,
mimeType: "image/png",
},
],
};
console.log('๐จ MCP Fullstack - Image Response Format Demo\n');
console.log('=====================================\n');
console.log('โ
Correct MCP Image Response Format:');
console.log(JSON.stringify(mcpImageResponse, null, 2));
console.log('\n๐ Key Points:');
console.log('1. Images are returned in the "content" array');
console.log('2. Each image has type: "image"');
console.log('3. Data is base64 encoded');
console.log('4. mimeType specifies the format (e.g., "image/png")');
console.log('\n๐ง Implementation Status:');
console.log('โ
browser.screenshot() - Returns MCP image format');
console.log('โ
browser.open() - Returns page screenshot');
console.log('โ
browser.click() - Returns screenshot after action');
console.log('โ
browser.type() - Returns screenshot after typing');
console.log('โ
browser.scroll() - Returns screenshot after scroll');
console.log('โ
tracking.recording_frames() - Returns multiple frame images');
console.log('\n๐ฏ Image Processing Options:');
// Check what's available
let hasCanvas = false;
try {
require('canvas');
hasCanvas = true;
console.log('โ
Canvas module available - Full image processing');
} catch (e) {
console.log('โ ๏ธ Canvas module not available - Basic image handling');
}
let hasSharp = false;
try {
require('sharp');
hasSharp = true;
console.log('โ
Sharp module available - Advanced image processing');
} catch (e) {
console.log('โ ๏ธ Sharp module not available (requires Node 20+)');
}
console.log('\n๐ก Solutions Implemented:');
console.log('1. Canvas fallback for image processing (works on Node 19)');
console.log('2. Proper MCP content format for all image responses');
console.log('3. Graceful degradation when image libs unavailable');
console.log('4. Base64 encoding for all image data');
console.log('\n๐ The MCP Fullstack server now properly returns images!');
console.log(' All visual operations include inline image attachments.');
console.log(' No external image IDs - images are embedded in responses.');
// Show example of multi-image response
const multiImageResponse = {
content: [
{
type: "image",
data: RED_CIRCLE_BASE64,
mimeType: "image/png"
},
{
type: "image",
data: RED_CIRCLE_BASE64,
mimeType: "image/png"
}
],
metadata: {
frame_count: 2,
duration_ms: 2000
}
};
console.log('\n๐ธ Example Multi-Image Response (e.g., recording frames):');
console.log(JSON.stringify(multiImageResponse, null, 2).substring(0, 300) + '...');
console.log('\nโ
All image functionality implemented with proper MCP format!');