set_paragraph_spacing
Adjust the vertical spacing between paragraphs in a Figma text node by specifying a pixel value. Solves inconsistent text layout by allowing precise control over paragraph separation.
Instructions
Set the paragraph spacing of a text node in Figma
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the text node to modify | |
| paragraphSpacing | Yes | Paragraph spacing value in pixels |
Implementation Reference
- The tool handler that registers the 'set_paragraph_spacing' MCP tool. It defines the Zod schema for nodeId (string) and paragraphSpacing (number) inputs, sends the command to Figma via sendCommandToFigma, and returns a success/error message.
// Set Paragraph Spacing Tool server.tool( "set_paragraph_spacing", "Set the paragraph spacing of a text node in Figma", { nodeId: z.string().describe("The ID of the text node to modify"), paragraphSpacing: z.coerce.number().describe("Paragraph spacing value in pixels"), }, async ({ nodeId, paragraphSpacing }) => { try { const result = await sendCommandToFigma("set_paragraph_spacing", { nodeId, paragraphSpacing }); const typedResult = result as { name: string, paragraphSpacing: number }; return { content: [ { type: "text", text: `Updated paragraph spacing of node "${typedResult.name}" to ${typedResult.paragraphSpacing}px` } ] }; } catch (error) { return { content: [ { type: "text", text: `Error setting paragraph spacing: ${error instanceof Error ? error.message : String(error)}` } ] }; } } ); - The FigmaCommand type union member '"set_paragraph_spacing"' used for type-safe command dispatching.
| "set_paragraph_spacing" - src/talk_to_figma_mcp/tools/text-tools.ts:342-376 (registration)The tool is registered via server.tool('set_paragraph_spacing', ...) inside the registerTextTools function.
// Set Paragraph Spacing Tool server.tool( "set_paragraph_spacing", "Set the paragraph spacing of a text node in Figma", { nodeId: z.string().describe("The ID of the text node to modify"), paragraphSpacing: z.coerce.number().describe("Paragraph spacing value in pixels"), }, async ({ nodeId, paragraphSpacing }) => { try { const result = await sendCommandToFigma("set_paragraph_spacing", { nodeId, paragraphSpacing }); const typedResult = result as { name: string, paragraphSpacing: number }; return { content: [ { type: "text", text: `Updated paragraph spacing of node "${typedResult.name}" to ${typedResult.paragraphSpacing}px` } ] }; } catch (error) { return { content: [ { type: "text", text: `Error setting paragraph spacing: ${error instanceof Error ? error.message : String(error)}` } ] }; } } ); - The sendCommandToFigma utility function that sends the 'set_paragraph_spacing' command (and any command) over WebSocket to the Figma plugin server.
export function sendCommandToFigma( command: FigmaCommand, params: unknown = {}, timeoutMs: number = 300000 ): Promise<unknown> { return new Promise((resolve, reject) => { // If not connected, try to connect first if (!ws || ws.readyState !== WebSocket.OPEN) { connectToFigma(); reject(new Error("Not connected to Figma. Attempting to connect...")); return; } // Check if we need a channel for this command const requiresChannel = command !== "join"; if (requiresChannel && !currentChannel) { reject(new Error("Must join a channel before sending commands")); return; } const id = uuidv4(); const request = { id, type: command === "join" ? "join" : "message", ...(command === "join" ? { channel: (params as any).channel, sessionId: SESSION_ID } : { channel: currentChannel }), message: { id, command, params: { ...(params as any), commandId: id, // Include the command ID in params }, }, }; // Set timeout for request const timeout = setTimeout(() => { if (pendingRequests.has(id)) { pendingRequests.delete(id); logger.error(`Request ${id} to Figma timed out after ${timeoutMs / 1000} seconds`); reject(new Error('Request to Figma timed out')); } }, timeoutMs); // Store the promise callbacks to resolve/reject later pendingRequests.set(id, { resolve, reject, timeout, lastActivity: Date.now() }); // Send the request logger.info(`Sending command to Figma: ${command}`); logger.debug(`Request details: ${JSON.stringify(request)}`); ws.send(JSON.stringify(request)); }); }