Skip to main content
Glama

Import image

figma_import_image
Idempotent

Place a picture: from a url (http/https, fetched by Figma), a local path inside the export directory or BRIDGE_EXPORT_ROOTS (read by the bridge), or renderNodeId: a layer of this file rendered to a picture inside Figma — a styleframe…

Instructions

Place a picture: from a url (http/https, fetched by Figma), a local path inside the export directory or BRIDGE_EXPORT_ROOTS (read by the bridge), or renderNodeId: a layer of this file rendered to a picture inside Figma — a styleframe snapshotted into a storyboard thumbnail, a frame on a mood board. With nodeId it becomes that node's fill; otherwise a new rectangle at the image's own proportions (a render: the layer's own size), or width/height. scaleMode fill / fit / crop / tile. PNG, JPEG or GIF, at most 4096 px a side. To look at a layer yourself, figma_export_node returns its picture to you instead of placing it. Editors: Design; unverified: FigJam, Slides.

Input Schema

NameRequiredDescriptionDefault
xNo
yNo
urlNo
nameNo
pathNoA file inside an allowed root; relative paths resolve from the export directory.
forceNoOverwrite on purpose. A write to a node someone changed after you last read it is refused (STALE); read it again and resend instead. Pass true only when the person said to overwrite their edit.
widthNo
heightNo
nodeIdNoFill this existing node instead of creating a rectangle.
sizingNoHow it sizes, as in Figma's panel: { "horizontal": "fill" } to take the parent column's width; "hug" fits content; "fixed" keeps the number.
sessionNoOptional sessionId or file name, to pick a Figma file when more than one is connected.
parentIdNo
scaleModeNoDefault "fill".
renderWidthNoPixel width of the render; its height follows the layer. Default twice the target's width, within 4096 px a side.
cornerRadiusNo
renderNodeIdNoA layer of this file to render as the picture. Not with `url` or `path`.
idempotencyKeyNoCaller-owned retry key, ≤128 chars. Re-calling with the same key never executes twice: it returns the existing result, or waits for the op still in flight. Supply your own for anything large — if the MCP client times out (rather than the bridge), only a key you chose can be used to retry safely.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.3.0
    • addedInput schema / properties / force
      Added value: +{
      +  "description": "Overwrite on purpose. A write to a node someone changed after you last read it is refused (STALE); read it again and resend instead. Pass true only when the person said to overwrite their edit.",
      +  "type": "boolean"
      +}
  2. First observedv0.1.1

TDQS

A4.3/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=true), so credit goes to what the description adds: format/size limits (PNG/JPEG/GIF, ≤4096 px a side), the nodeId-fills-vs-new-rectangle branching, and the editor support caveat ('Design; unverified: FigJam, Slides'). One mild tension: url fetching is arguably open-world while openWorldHint=false — not a hard contradiction since Figma, not the bridge, performs the fetch.

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

Conciseness4/5

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

Information-dense and front-loaded with the core action; nearly every clause carries a constraint or branch. The heavy parenthetical/em-dash stacking makes it harder to parse than a short bulleted form would be, but there is no filler.

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

Completeness4/5

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

For a 17-param mutation with no output schema, it covers sources, sizing, format limits, target behavior, and editor support — enough to call it correctly. It does not say what is returned (the new node, the filled node) or default placement when nodeId/width/height are omitted, which a careful agent would still want.

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?

With 17 parameters and only 53% schema description coverage, the description meaningfully compensates: it explains the exclusivity of url/path/renderNodeId, what nodeId does, how width/height size a new rectangle, and the scaleMode vocabulary. Remaining undocumented params (sizing, cornerRadius, session, x/y defaults) are neither covered here nor fully in the schema.

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?

Opens with a concrete verb+resource ('Place a picture') and then enumerates the three distinct sources — url, path, renderNodeId — that define the tool. It also distinguishes itself from figma_export_node by contrasting placing vs. returning the picture, so an agent can route correctly without opening a schema.

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

Usage Guidelines4/5

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

Gives clear selection logic for the three source modes and explicitly names the alternative (`figma_export_node`) for the 'just look at a layer' case. It stops short of stating when not to use this tool (e.g. using `figma_set_fills` to swap an existing fill on a node you already have), so it's strong but not exhaustive.

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

Deploy Server

Other Tools