Skip to main content
Glama

extract_node_elements

Extract all design elements including images, vectors, and components from Figma nodes to analyze and export design assets from Figma files.

Instructions

提取节点中的所有设计元素(图片、矢量、组件)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
includeDetailsNo是否包含详细信息,默认为false
urlYesFigma文件URL,必须包含node-id参数

Implementation Reference

  • Primary handler for 'extract_node_elements' tool: parses args, delegates to FigmaElementExtractor, formats response with optional details and summary.
    private async handleExtractNodeElements(args: any) { const { url, includeDetails = false } = args; try { console.error(`开始提取节点设计元素: ${url}`); const elements = await this.elementExtractor.getElementsFromUrl(url); console.error(`成功提取设计元素: ${elements.totalElements} 个`); const responseData: any = { success: true, data: { nodeId: elements.nodeId, nodeName: elements.nodeName, summary: { totalElements: elements.totalElements, images: elements.images.length, vectors: elements.vectors.length, components: elements.components.length, }, elements: includeDetails ? { images: elements.images, vectors: elements.vectors, components: elements.components, } : undefined, }, }; // 如果不包含详细信息,提供可读的摘要 if (!includeDetails) { responseData.data.textSummary = this.elementExtractor.generateElementsSummary(elements); } return { content: [ { type: 'text', text: JSON.stringify(responseData, null, 2), }, ], }; } catch (error) { const errorMessage = error instanceof Error ? error.message : '未知错误'; console.error(`提取设计元素失败: ${errorMessage}`); return { content: [ { type: 'text', text: JSON.stringify({ success: false, error: errorMessage, troubleshooting: { commonIssues: [ '检查Figma URL是否包含node-id参数', '确认对该文件和节点有访问权限', '验证节点是否存在且包含设计元素', ], tip: '使用includeDetails=true获取详细的元素信息' } }, null, 2), }, ], }; } }
  • Input schema definition for the tool, specifying parameters like url and includeDetails.
    { name: 'extract_node_elements', description: '提取节点中的所有设计元素(图片、矢量、组件)', inputSchema: { type: 'object', properties: { url: { type: 'string', description: 'Figma文件URL,必须包含node-id参数', }, includeDetails: { type: 'boolean', description: '是否包含详细信息,默认为false', default: false, }, }, required: ['url'], }, },
  • src/index.ts:215-216 (registration)
    Tool dispatch registration in the CallToolRequestSchema switch statement.
    case 'extract_node_elements': return await this.handleExtractNodeElements(args);
  • Core helper method called by handler: parses Figma URL and invokes getAllNodeElements to extract images, vectors, and components.
    async getElementsFromUrl(figmaUrl: string): Promise<NodeElements> { try { const urlInfo = this.figmaService.parseUrl(figmaUrl); const { fileId, nodeId } = urlInfo; if (!nodeId) { throw new Error('URL中缺少节点ID,无法提取设计元素。请确保URL包含node-id参数'); } return await this.getAllNodeElements(fileId, nodeId); } catch (error) { throw new Error(`从URL获取设计元素失败: ${error instanceof Error ? error.message : '未知错误'}`); } }
  • Extracts all elements (images via getNodeImages, vectors via extractVectorElements, components via traversal) from a Figma node.
    async getAllNodeElements(fileId: string, nodeId: string): Promise<NodeElements> { try { const node = await this.figmaService.getNodeDetails(fileId, nodeId); if (!node) { throw new Error(`节点 ${nodeId} 不存在`); } const [images, vectors] = await Promise.all([ this.getNodeImages(fileId, nodeId), this.extractVectorElements(fileId, nodeId) ]); // 收集组件节点 const components: any[] = []; this.figmaService.traverseNodeTree(node, (currentNode) => { if (currentNode.type === 'COMPONENT' || currentNode.type === 'INSTANCE') { components.push({ id: currentNode.id, name: currentNode.name, type: currentNode.type, componentId: currentNode.componentId || undefined }); } }); return { nodeId, nodeName: node.name || 'Unnamed Node', images, vectors, components, totalElements: images.length + vectors.length + components.length }; } catch (error) { throw new Error(`获取节点元素失败: ${error instanceof Error ? error.message : '未知错误'}`); } }

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/Echoxiawan/figma-mcp-full-server'

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