Skip to main content
Glama

generate_preview

Create visual previews of Tailwind CSS components with customizable dimensions, dark mode, and responsive breakpoint options to verify design implementation.

Instructions

Generate visual preview of Tailwind components

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
htmlYesHTML code to preview
widthNoPreview width in pixels
heightNoPreview height in pixels
darkModeNoGenerate dark mode preview
responsiveNoGenerate responsive breakpoint previews

Implementation Reference

  • Primary handler implementation for the 'generate_preview' tool. Uses Puppeteer to render HTML with Tailwind CSS CDN, capture screenshot as base64 PNG, embed in Markdown response, includes HTML code block and responsive notes.
    export async function generatePreview(args: PreviewRequest) { try { const { html, width = 800, height = 600, darkMode = false, responsive = false } = args; // Create full HTML document const fullHtml = ` <!DOCTYPE html> <html lang="en" ${darkMode ? 'class="dark"' : ''}> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Tailwind Preview</title> <script src="https://cdn.tailwindcss.com"></script> ${darkMode ? '<script>tailwind.config = { darkMode: "class" }</script>' : ''} </head> <body class="${darkMode ? 'dark:bg-gray-900 dark:text-white' : 'bg-white'}"> ${html} </body> </html>`; let result = '# Component Preview\n\n'; try { // Launch headless browser for screenshot const browser = await puppeteer.launch({ headless: true }); const page = await browser.newPage(); await page.setViewport({ width, height }); await page.setContent(fullHtml); // Take screenshot const screenshot = await page.screenshot({ encoding: 'base64', fullPage: false }); await browser.close(); result += `**Preview Generated**: ${width}x${height}px ${darkMode ? '(Dark Mode)' : '(Light Mode)'}\n\n`; result += `![Component Preview](data:image/png;base64,${screenshot})\n\n`; } catch (screenshotError) { console.error('Screenshot error:', screenshotError); result += '**Note**: Preview screenshot could not be generated. Here\'s the rendered HTML:\n\n'; } result += '## HTML Code\n```html\n' + html + '\n```\n\n'; if (responsive) { result += '## Responsive Breakpoints\n\n'; result += '- **Mobile**: 375px width\n'; result += '- **Tablet**: 768px width\n'; result += '- **Desktop**: 1024px width\n'; result += '- **Large**: 1280px width\n\n'; result += '*Note: Test your component at different screen sizes to ensure responsive behavior.*\n'; } return { content: [ { type: 'text', text: result } ] }; } catch (error) { console.error('Preview generation error:', error); throw new Error(`Failed to generate preview: ${error instanceof Error ? error.message : 'Unknown error'}`); } }
  • src/index.ts:268-301 (registration)
    Tool registration entry in the server's TOOLS array, defining name, description, and input schema precisely matching the preview-generator parameters.
    { name: 'generate_preview', description: 'Generate visual preview of Tailwind components', inputSchema: { type: 'object', properties: { html: { type: 'string', description: 'HTML code to preview' }, width: { type: 'number', default: 800, description: 'Preview width in pixels' }, height: { type: 'number', default: 600, description: 'Preview height in pixels' }, darkMode: { type: 'boolean', default: false, description: 'Generate dark mode preview' }, responsive: { type: 'boolean', default: false, description: 'Generate responsive breakpoint previews' } }, required: ['html'] } },
  • Dispatcher in the CallToolRequestHandler switch statement that invokes the generatePreview handler for 'generate_preview' tool calls.
    case 'generate_preview': return await generatePreview(args as unknown as PreviewOptions);
  • TypeScript interface for PreviewOptions used in type annotations, though parameters slightly differ from runtime schema.
    export interface PreviewOptions { html: string; css?: string; devices?: ('mobile' | 'tablet' | 'desktop' | 'wide')[]; theme?: 'light' | 'dark' | 'auto'; interactive?: boolean; showCode?: boolean; format?: 'html' | 'image' | 'pdf'; quality?: 'low' | 'medium' | 'high'; }
  • Placeholder/stub handler imported and called by index.ts, returns dummy text response (note: parameter mismatch with schema).
    export async function generatePreview(args: PreviewOptions) { return { content: [ { type: 'text', text: `Generated preview for ${args.devices?.join(', ') || 'all devices'}\nTheme: ${args.theme || 'light'}` } ] }; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Tai-DT/mcp-tailwind-gemini'

If you have feedback or need assistance with the MCP directory API, please join our Discord server