Skip to main content
Glama

figma_inspect

Read-onlyIdempotent

Reads live Figma documents in one call, accepting multiple node IDs to return compact outlines, exact properties, comparisons, prototype flows, and mismatch checks without modifying the canvas.

Instructions

READ the live Figma document in ONE call — the tool for any read (not figma_execute_code); pass every node id you need at once instead of one call per node. Default: a compact outline, one line per node (TYPE "name" #id WxH @x,y [V gap8 pad16 fill/hug a:start/center] size:fill/hug fill:#FFF stroke:#E8EAF0/0,1,1,1 r0,0,3,3 shadow:… font "text…"; non-defaults only; a TEXT named after its text drops the name; a:P/C = primaryAxisAlignItems/counterAxisAlignItems, start = MIN, center = CENTER, end = MAX, between = SPACE_BETWEEN, absent = MIN/MIN), as deep as fits the reply unless depth is given; children:N marks a node with more below. like: "<ref id>" (or several) FINDS every copy of the reference under node_ids (screens/sections; default: its section) — instances of the same component, or same name — and diffs each against it: the call for "redo these like the reference" when you don't know where the copies are. compare: "<ref id>" lists, per node_id, every difference from that reference (layout, sizing, stroke, radius, effects, clip, font, variant; children matched by name) and ends with REF lines, the reference's exact values to copy into the write (no props read needed) — one call for "make these like that one", and the check after the write. props returns exact values instead: { id: { prop: value } } (also fill, stroke, text, font, layout, padding, parent, children, main, variant, props, absolute, reactions, connector). find searches node names under node_ids (or the current page); find_text searches text content. view: "map" = canvas map (sections, breakpoints). view: "flow" = the prototype links under node_ids (a section or screens): per screen, source, trigger, action, target, transition, plus the overlay settings of overlay targets — never scan the page for reactions. context: true adds ancestor sections, breakpoints and component variants. offset skips the first N outline lines when a reply ends with pass offset=K. check returns only mismatches. Combine them freely. Changes nothing.

Input Schema

NameRequiredDescriptionDefault
idsNoAlias of node_ids.
findNoCase-insensitive substring of node names to search for under node_ids (or the current page). Up to 8 matches come back with their subtree outline (as deep as fits, no extra read needed); more matches as one line each.
likeNoReference node id (several: comma-separated): find its copies under node_ids (default: the reference's top section) and list, per copy, its frame and how it differs (missing children come with the reference's own line, and REF lines at the end give the reference's exact values, so no extra read is needed). Copies that already match are listed as identical.
viewNo"outline" (default) = one line per node; "map" = canvas map: sections, frames, breakpoints and component sets in a few lines; "table" = per table (found by structure) the columns: header, width, sizing, cell contents, plus row and cell ids; "flow" = prototype links (screen, source, trigger, action, target, transition, overlay settings) under node_ids (without node_ids: every top-level screen of the current page).
checkNoExpectations to verify: { "12:34": { "width": 320, "fill": "#FFFFFF", "layout": "V gap8 pad16" } }. Returns { pass, fail: [{ id, key, want, got }], missing }.
depthNoOutline levels below each node (0 = the nodes only, max 6). Omit it: the outline goes as deep as fits the reply.
limitNoMax find matches (default 30).
propsNoReturn these properties per node instead of an outline, e.g. ["width", "layoutSizingHorizontal", "fill", "text"]; also "reactions" (prototype interactions) and "connector" (FigJam connector ends).
offsetNoSkip the first N lines of the outline / found list (use the K from a '… pass offset=K' line to read the next page).
targetNofileName of a specific connected Figma document, when more than one is open (see figma_list_targets).
compareNoReference node id: instead of an outline, list how each node_id differs from it (x/y/width and text content are skipped; height, stroke sides/align are compared). Ends with REF lines: the exact values of the differing reference nodes, to copy in figma_execute_code without a props read. 'identical' = nothing to fix.
contextNoAlso return, per node: ancestor sections, breakpoint siblings and component variants ({ id: context }).
node_idNoAlias of node_ids for one id.
node_idsNoNode ids to read ("12:34" or "12-34"). Omit to use the current page.
find_textNoCase-insensitive substring of TEXT content to search for under node_ids (or the current page). One line per match: #id "layer" «text» in <parent layer #id>, screen "<top frame>" (the parent is the frame to click or edit).
find_typeNoRestrict find to one node type, e.g. FRAME, TEXT, INSTANCE.
max_output_bytesNoCap on the text response in UTF-8 bytes (default 3500; in clients that spill big outputs to a file, 0 and values above 3900 become 3900). A cut outline ends with '… pass offset=K': use `offset` to page instead of raising this.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description confirms with "Changes nothing." rather than contradicting. Beyond that it discloses non-obvious behavior the annotations can't: the default is a truncated compact outline, truncation ends with "… pass offset=K", and max_output_bytes caps spill at 3900 — the things that actually bite an agent on a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly — the one-call, use-this-not-figma_execute_code rule is the first clause. But the bulk is a single run-on paragraph cramming an outline format legend, alignment abbreviations, and five mode definitions into one block, which is hard to scan and partly duplicates the schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-param, nested-schema, no-output-schema tool this is nearly exhaustive: default mode, each alternative mode, pagination, size caps, document targeting via target/figma_list_targets, and the exact shape of what comes back. An agent can call it correctly without consulting any other source.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 17 params. The description adds real meaning on top: the outline line grammar (TYPE "name" #id WxH @x,y, a:P/C mapping to MIN/CENTER/SPACE_BETWEEN, fill/hug), the REF-line payload of compare, and the ids-at-once batching rule. The inline legend is arguably output semantics more than parameter semantics, which keeps this off a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("READ the live Figma document") and immediately differentiates from the sibling write path ("not figma_execute_code"). The mode verbs (like, compare, props, find, find_text, view out/map/flow, check) are each given a concrete job, so an agent can pick a mode without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: "the tool for any read (not figma_execute_code)", "pass every node id you need at once instead of one call per node", and "never scan the page for reactions". It also names the exact intent each mode serves ("redo these like the reference" for like, "make these like that one" plus post-write check for compare).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.