set_sticky_text
Update the text content of an existing FigJam sticky note by specifying its node ID and the new text.
Instructions
Update the text content of an existing FigJam sticky note.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the sticky note node to update | |
| text | Yes | The new text content |
Implementation Reference
- The tool registration and handler for 'set_sticky_text'. Accepts nodeId and text, sends command via WebSocket to Figma.
server.tool( "set_sticky_text", "Update the text content of an existing FigJam sticky note.", { nodeId: z.string().describe("The ID of the sticky note node to update"), text: z.string().describe("The new text content"), }, async ({ nodeId, text }) => { try { const result = await sendCommandToFigma("set_sticky_text", { nodeId, text, }); return { content: [ { type: "text", text: `Updated sticky note text: ${JSON.stringify(result)}`, }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error updating sticky note text: ${error instanceof Error ? error.message : String(error)}`, }, ], }; } } ); - Type definition: 'set_sticky_text' is included as a valid FigmaCommand in the FigmaCommand union type.
| "set_sticky_text" | "create_shape_with_text" | "create_connector" | "create_section"; - src/talk_to_figma_mcp/tools/figjam-tools.ts:128-160 (registration)Registration of the tool on the MCP server via server.tool() within registerFigJamTools().
server.tool( "set_sticky_text", "Update the text content of an existing FigJam sticky note.", { nodeId: z.string().describe("The ID of the sticky note node to update"), text: z.string().describe("The new text content"), }, async ({ nodeId, text }) => { try { const result = await sendCommandToFigma("set_sticky_text", { nodeId, text, }); return { content: [ { type: "text", text: `Updated sticky note text: ${JSON.stringify(result)}`, }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error updating sticky note text: ${error instanceof Error ? error.message : String(error)}`, }, ], }; } } ); - Helper function that sends a command (including 'set_sticky_text') to the Figma server via WebSocket and returns a promise.
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)); }); }