Skip to main content
Glama
alucardeht
by alucardeht

extract_styles

Extract design tokens like colors, fonts, and spacing from Figma frames to generate CSS or theme files with organized JSON output.

Instructions

Extract all design tokens from a frame.

HOW IT WORKS:

  • Collects colors, fonts, spacing, border radius, shadows

  • Returns organized JSON ready for CSS/theme generation

  • No chunking needed (compact output)

TYPICAL WORKFLOW:

  1. get_frame_info → understand structure

  2. extract_styles → design tokens

  3. Use tokens to build theme/CSS

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
file_keyYesFigma file key
page_nameYesPage name (partial match)
frame_nameYesFrame name (partial match)

Implementation Reference

  • The main handler function that executes the extract_styles tool: fetches Figma file, page, and frame; collects design tokens (colors, fonts, sizes, radii, spacing, shadows) using collectStyles; formats and returns chunked JSON response.
    export async function extractStyles(ctx, fileKey, pageName, frameName) { const { chunker, figmaClient } = ctx; const file = await figmaClient.getFile(fileKey, 2); const page = figmaClient.findPageByName(file, pageName); if (!page) throw new Error(`Page "${pageName}" not found`); const frameRef = figmaClient.findFrameByName(page, frameName); if (!frameRef) throw new Error(`Frame "${frameName}" not found`); const frame = await figmaClient.getNode(fileKey, frameRef.id); const styles = { colors: new Set(), fonts: new Set(), fontSizes: new Set(), borderRadii: new Set(), spacing: new Set(), shadows: [], }; collectStyles(frame, styles); const response = chunker.wrapResponse( { frame: frame.name, designTokens: { colors: [...styles.colors].sort(), fonts: [...styles.fonts].sort(), fontSizes: [...styles.fontSizes].sort((a, b) => a - b), borderRadii: [...styles.borderRadii].sort((a, b) => a - b), spacing: [...styles.spacing].sort((a, b) => a - b), shadows: styles.shadows, }, }, { step: "Design tokens extracted", progress: `${styles.colors.size} colors, ${styles.fonts.size} fonts`, nextStep: "Use these tokens to build your theme/CSS, or extract_assets for icons/images", } ); return { content: [{ type: "text", text: JSON.stringify(response, null, 2) }] }; }
  • The input schema and description for the extract_styles tool, defining required parameters: file_key, page_name, frame_name.
    name: "extract_styles", description: `Extract all design tokens from a frame. HOW IT WORKS: - Collects colors, fonts, spacing, border radius, shadows - Returns organized JSON ready for CSS/theme generation - No chunking needed (compact output) TYPICAL WORKFLOW: 1. get_frame_info → understand structure 2. extract_styles → design tokens 3. Use tokens to build theme/CSS`, inputSchema: { type: "object", properties: { file_key: { type: "string", description: "Figma file key" }, page_name: { type: "string", description: "Page name (partial match)" }, frame_name: { type: "string", description: "Frame name (partial match)" }, }, required: ["file_key", "page_name", "frame_name"], }, },
  • src/index.js:57-59 (registration)
    The dispatch registration in the main server request handler switch statement, mapping 'extract_styles' tool name to handlers.extractStyles function call.
    case "extract_styles": result = await handlers.extractStyles(this.ctx, args.file_key, args.page_name, args.frame_name); break;
  • Export of the extractStyles handler from styles.js, making it available via the handlers namespace imported in src/index.js.
    export { extractStyles, getFileStyles } from "./styles.js";

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

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