Skip to main content
Glama

extract-one-component

Extract a single component from Figma designs to generate corresponding React Native code with proper typing and styling.

Instructions

Extract a single component from Figma file

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
parametersYes

Implementation Reference

  • Handler implementation for the extract-one-component tool. Fetches Figma data and invokes generateComponent with componentName parameter.
    async ({ parameters: { componentName } }, extra) => { try { // Fetch Figma file data logger.info('Fetching Figma file data...') // const data = await response.json() const data = await fetchFigmaData() logger.info('Successfully fetched Figma file data') // Process the component data const result = await generateComponent(data, true, componentName) logger.info('Component extraction successful') // Return the result to the client return { componentsData: result.componentSets, // Pass the structured component data content: [ { type: 'text' as const, text: result.message, }, ], } } catch (error: any) { logger.error(`Error extracting component ${componentName}:`, error) return { isError: true, content: [ { type: 'text' as const, text: `Error extracting component ${componentName}: ${error.message}`, }, ], } } }
  • Input schema using Zod: object with componentName: string
    { parameters: z.object({ componentName: z.string(), }),
  • src/index.ts:145-152 (registration)
    MCP server.tool registration for 'extract-one-component', including description and schema reference.
    server.tool( 'extract-one-component', 'Extract a single component from Figma file', { parameters: z.object({ componentName: z.string(), }), },
  • Core logic for generating component data from Figma document, with filtering for specific component when componentToExtract provided (used as third arg for single component extraction).
    export async function generateComponent( component: any, validation: boolean = false, componentToExtract: string = '' ) { try { const { document } = component const componentsPage = document.children.find( (c: any) => c.name === 'Components' ) if (!componentsPage) { console.log('No Components page found in document') throw new Error('Components page not found in Figma file') } const page = componentsPage.children let componentSets = [] let processedCount = 0 const checkExisting = (componentName: string) => validation ? !existsSync(`${componentDir}/${componentName}`) : true const specificComponent = ( componentName: string, componentToExtract: string ) => componentToExtract ? areSameComponent(componentName, componentToExtract) : true for (const section of page) { const { children } = section if (!children) continue for (const item of children) { const { type, name } = item const componentName = toPascalCase(name) if ( type === 'COMPONENT_SET' && checkExisting(componentName) && specificComponent(componentName, componentToExtract) ) { processedCount++ try { const props = extractComponentProps(item.children) const minified = { name: componentName, props, children: extractComponentChildren(item.children), } componentSets.push(minified) } catch (processError) { return { message: `Error processing component ${name}: ${processError}`, componentSets: [], } } } } } // Create a formatted result for the user const message = `Successfully processed ${processedCount} components.\n\nComponent sets: ${componentSets.length}\nComponent paths:\n${componentSets.map((cs) => `- ${cs.name}`).join('\n')}` // Return both the result message and the component data return { message, componentSets, } } catch (error) { console.error(`Error generating component: ${error}`) throw error } }
  • fetchFigmaData: retrieves Figma file JSON data via API, called by the tool handler.
    export async function fetchFigmaData() { const response = await fetch(`https://api.figma.com/v1/files/${FIGMA_FILE}`, { headers: { 'X-Figma-Token': FIGMA_TOKEN, }, }) if (!response.ok) { const errorText = await response.text() return { isError: true, content: [ { type: 'text' as const, text: `Failed to fetch Figma file: ${response.status} ${response.statusText} - ${errorText}`, }, ], } } return await response.json() }

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/kailashAppDev/figma-mcp-toolkit'

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