The absence of the create and set operations is the point — you can hand an agent a live design file without wondering what it might move. The pairing that does the real work is get_node_children followed by scan_nodes_by_types: the tree first, then only the node types you asked for.
A Python server that talks to a Figma plugin over a WebSocket channel and gives an assistant read-only access to the open document.
- get_document_info for the current document and get_selection for what is selected right now
- read_my_design for full detail on the selection, and get_node_info or get_nodes_info for specific nodes
- get_node_children for every child id with full recursive nesting
- get_styles for the document's styles and get_local_components for its local components
- get_instance_overrides for what an instance changes about its component
- scan_text_nodes to find the text inside a node, with chunking for large trees
- scan_nodes_by_types to pull only the node types you care about, such as text, rectangles or frames
- get_annotations for a node or the whole document, and get_reactions for prototype links between nodes
- export_node_as_image as PNG, JPG, SVG or PDF at a scale you choose
- join_channel to attach to the plugin's channel before any of the above
Figma Desktop with the bundled plugin loaded and connected, plus the WebSocket relay running alongside the server; you join the plugin's channel before the first read. Runs under Python from a checkout. Creating nodes and changing styles, colours, text, size or position are deliberately not implemented.
Build from source — clone the repository and build it, then point your client at the binary
