Skip to main content
Glama
comments.js4.28 kB
/** * Comment Management Tools * MCP tools for managing comments and feedback in Figma files */ export function registerCommentTools(protocol, figmaClient) { // Get comments protocol.registerTool("get_comments", { description: "Retrieve all comments from a Figma file", inputSchema: { type: "object", properties: { fileKey: { type: "string", description: "Figma file key", }, }, required: ["fileKey"], }, handler: async (args) => { const { fileKey } = args; const commentsData = await figmaClient.getComments(fileKey); return { fileKey, comments: commentsData.comments || [], }; }, }); // Create comment protocol.registerTool("create_comment", { description: "Create a new comment on a Figma file at a specific position or node", inputSchema: { type: "object", properties: { fileKey: { type: "string", description: "Figma file key", }, message: { type: "string", description: "Comment message text", }, x: { type: "number", description: "X coordinate for comment position (required if node_id not provided)", }, y: { type: "number", description: "Y coordinate for comment position (required if node_id not provided)", }, nodeId: { type: "string", description: "Node ID to attach comment to (alternative to x/y coordinates)", }, }, required: ["fileKey", "message"], }, handler: async (args) => { const { fileKey, message, x, y, nodeId } = args; if (!nodeId && (x === undefined || y === undefined)) { throw new Error( "Either nodeId or both x and y coordinates must be provided", ); } const commentData = { message, client_meta: nodeId ? { node_id: nodeId } : { x, y }, }; const result = await figmaClient.postComment(fileKey, commentData); return { fileKey, comment: result, success: true, }; }, }); // Resolve comment protocol.registerTool("resolve_comment", { description: "Mark a comment as resolved (Note: This may require Plugin API, currently returns info)", inputSchema: { type: "object", properties: { fileKey: { type: "string", description: "Figma file key", }, commentId: { type: "string", description: "Comment ID to resolve", }, }, required: ["fileKey", "commentId"], }, handler: async (args) => { const { fileKey, commentId } = args; // Note: Comment resolution via REST API may be limited // This is a placeholder for the functionality // Actual implementation may require Plugin API or webhook handling return { fileKey, commentId, message: "Comment resolution via REST API may be limited. Please use Figma interface or Plugin API for full functionality.", note: "This feature may require additional API endpoints or Plugin API integration", }; }, }); // Delete comment (placeholder - may not be available via REST API) protocol.registerTool("delete_comment", { description: "Delete a comment (Note: May require Plugin API or may not be available via REST)", inputSchema: { type: "object", properties: { fileKey: { type: "string", description: "Figma file key", }, commentId: { type: "string", description: "Comment ID to delete", }, }, required: ["fileKey", "commentId"], }, handler: async (args) => { const { fileKey, commentId } = args; // Note: Comment deletion via REST API may not be available // This is a placeholder return { fileKey, commentId, message: "Comment deletion may not be available via REST API. Please use Figma interface or Plugin API.", note: "This feature may require Plugin API integration", }; }, }); }

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/oabolade/figma_mcp_server_actor'

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