Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

io.github.tathagat22/plumb-mcp

NPM · PLUMB-MCP · SCANNED AUG 3

Two-way Figma MCP: extract + verify design-to-code, or generate on-brand Figma pages from a prompt.

Available components

+25 this week 67 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →

Supply Chain Security87
  • No malware found by supply-chain analysis.Pass
  • Only part of the dependency tree could be resolved (100 of 104), so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Only part of the dependency tree could be resolved (100 of 104), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability63
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6338 tokens (~275/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · plumb-mcp

# add to Claude Code
claude mcp add tathagat22-plumb-mcp -- npx -y plumb-mcp
# add to Codex CLI
codex mcp add tathagat22-plumb-mcp -- npx -y plumb-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tathagat22-plumb-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "plumb-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add tathagat22-plumb-mcp --command npx --arg -y --arg plumb-mcp
# ~/.hermes/config.yaml
mcp_servers:
  tathagat22-plumb-mcp:
    command: "npx"
    args: ["-y", "plumb-mcp"]
// mcp.json
{
  "mcpServers": {
    "tathagat22-plumb-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "plumb-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +4
    • Stability: unverified → 0.27 functional
  • 2 Aug 26 +46
    • Provenance: unverified → fail security
    • Known CVEs: unverified → partial security
    • Install scripts: unverified → pass security
    • Malware scan: unverified → pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • Tool coverage: 100 → unverified functional
    • Schema quality: unverified → excellent functional
    • License: unverified → pass functional
    • Dependency health: unverified → partial functional
    • Maintenance: unverified → pass functional
    • MCP protocol: unverified → pass functional
    • Licence: MIT functional
  • 1 Aug 26 +12
    • Tool coverage: unverified → 100 functional
  • 31 Jul 26 −37
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 27 Jul 26 42

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Analysed npm/[email protected]

Provenance none

Ecosystem: npm · Outcome: none

Dependencies 100 packages

100 packages in the resolved dependency tree · 99 deprecated · 31 stale.

The dependency tree was only partially resolved, so these counts may be incomplete.

MCP tools — 23 exposed · ~6,049 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
plumb_assets ~318

Export Figma assets — icons as SVG, images as PNG — through the paired plugin. Three modes: • Default — `id` or `name` of a screen → recursive export of every asset in it, written to a local folder. • List — same + `list: true` → just the manifest (id, name, format, parentId) of available assets; no files written. Cheap; use first to see what's there. • Surgical — `ids: [...]` → export exactly those node ids (one file each, no recursion). Preferred once you know what you need.

NameTypeReqDescription
idstringScreen/node id to scope the export to.
idsarraySurgical — export exactly these node ids (one each, no recursion).
inlinebooleanReturn asset bytes inline on each row: SVGs as raw markup, bitmaps under 64KB as a data: URI. Useful for dropping SVG icons straight into JSX without re-reading from disk. Files are still written; th…
listbooleanManifest only — return id/name/format/parentId per candidate; no file writes.
namestringScreen name — resolved against the file.
rawbooleanFor nodes with IMAGE fills, export the original uploaded bytes (JPG/PNG/GIF/WEBP) via getImageByHash, instead of a 2× rasterised PNG render. Other nodes (icons, vectors) export the same as default.

No output schema declared.

No examples provided.

plumb_brand ~216

Direct a brand board from a one-line brief and BUILD it into the paired Figma file. Given a brief (e.g. "a premium fintech dashboard"), Plumb discovers a diverse set of best-in-class reference sites, screenshots them live, synthesizes a coherent semantic palette from their computed CSS, and assembles a single 1440-wide Brand page (reference screenshots + colour swatches + a type scale) — then compiles it down through the same DSL → PDS → emit-plan write path plumb_design uses and executes it via the plugin. Returns the picked references, the synthesized brand palette, and the built root node id. Requires the Plumb plugin to be paired.

NameTypeReqDescription
briefstringyesOne-line description of what's being built, e.g. "a premium fintech dashboard". Drives reference discovery + palette.
countintegerHow many reference sites to study + screenshot (default 4).
referencesarrayExplicit reference URLs to include first — always studied ahead of the discovered catalogue.

No output schema declared.

No examples provided.

plumb_components ~110

List every Figma component definition in the file and the instance usages of each — useful for understanding the design system before building. Each component carries an instance count; each instance carries the component id, so you can match usage to definition. Plugin path; needs the Plumb plugin paired.

NameTypeReqDescription
pagestringFilter components and instances to a single Figma page by name (case-insensitive, substring-friendly). Massive token saver on files that hide a 200-variant style guide on one page.

No output schema declared.

No examples provided.

plumb_describe ~167

Text-only visual description of a Figma screen or node — useful when you can't read the rendered screenshot (image-blind harness, sandboxed Read, or token-conscious flows). Returns a per-region narrative ('top-left: ...') and a flat child summary derived from the PDS. Pair with plumb_node for the full structural spec, or pair with plumb_screenshot for the pixel reference.

NameTypeReqDescription
depthintegerLevels of the tree to mine for the narrative. Default 2.
fileKeystringREST path file key.
idstringNode id to describe.
namestringScreen name (plugin path).
urlstringPaste a full Figma URL — fileKey + node-id auto-extracted.

No output schema declared.

No examples provided.

plumb_design ~350

Author a design from a high-level Plumb Design DSL document and BUILD it into the paired Figma file. This is the write direction: the DSL (semantic pages → sections → blocks + brand tokens) is validated, compiled DOWN to the PDS IR, lowered to a Figma-native emit plan, and executed by the plugin (auto-layout frames, text, images, icons). Returns the created node ids keyed by authored element handle — the join key you then feed to plumb_review / motion. Pass a `brief` to record intent (audience, tone, brand) alongside the build. Use `dryRun: true` to compile + validate without touching Figma.

NameTypeReqDescription
briefobjectOptional design-brief intake — records author intent alongside the build.
docA Plumb Design DSL document (version "1": brand + pages of semantic sections). Validated against DesignDocSchema.
dryRunbooleanCompile + lower only; do NOT touch Figma. Returns plan stats + warnings so you can sanity-check before building.
modestring`create` (default) — fresh nodes. `sync` — idempotent re-apply keyed on stable plumbKey (authored element handle); pair with `prune` to delete stale nodes.
pageWidthintegerLayout width hint for pages that don't set their own.
prunebooleansync only — delete built nodes no longer in the design.
revealbooleanScroll + select the built root in Figma when done.
targetobjectWhere to build. Defaults to a new top-level frame on the current page.

No output schema declared.

No examples provided.

plumb_fig_node ~114

Read one node from a saved .fig file by its id (the `sessionID:localID` form returned by plumb_fig_outline). Returns the node's type, name, size, auto-layout mode, fills, opacity, and (for TEXT nodes) characters and font. Pair with plumb_fig_outline to find the id first.

NameTypeReqDescription
figPathstringyesAbsolute path to a .fig file on disk.
idstringyesNode id — `sessionID:localID` form.

No output schema declared.

No examples provided.

plumb_fig_outline ~96

Read a saved .fig file from disk and list every screen (top-level frame) across every page. The headless / CI counterpart to plumb_outline — works with no Figma desktop, no plugin pairing, no FIGMA_TOKEN. Use this when you've exported a .fig file and need to inspect or implement screens without opening Figma.

NameTypeReqDescription
figPathstringyesAbsolute path to a .fig file on disk.

No output schema declared.

No examples provided.

plumb_fit ~444

Self-healing build loop — iterate to a pixel-perfect match instead of a one-shot check. The loop: 1. Build the component, stamping data-plumb-id="<el>" on each element using the PDS handles (same `el` keys plumb_node/plumb_query return). 2. Capture box (getBoundingClientRect) + the getComputedStyle subset (backgroundColor, color, font*, padding*, gap, flex*, justifyContent, alignItems, borderRadius/Color/Width, opacity, textDecorationLine) + text for every tagged element. Same shape as plumb_verify. 3. Call plumb_fit with `rendered`. You get back: • score — 0–100 convergence (coverage × fidelity), climbs as you go • done — true once score ≥ accept (default 98) and no errors remain • topFixes — the highest-leverage changes, sorted error-first • bar — a printable ▰▱ progress bar • instruction — what to do next 4. If done=false, apply topFixes, re-render, call plumb_fit again. Repeat until done=true. Each round the score should rise; if it stalls, read the full `deltas` and `coverage.untagged` to see what you missed.

NameTypeReqDescription
acceptnumberScore at which to stop. Default 98.
depthintegerPDS depth to fetch. Default 12 — deep enough for most screens.
fileKeystringFile key (REST path).
idstringScreen id.
iterationintegerWhich pass this is (1, 2, 3…). Informational — sharpens the coaching.
namestringScreen name (plugin path).
renderedarrayyesEach element you tagged data-plumb-id="<el>", with box + styles.
tolerancesobjectOverride default thresholds.
urlstringPaste a full Figma URL — fileKey and node-id are auto-extracted.

No output schema declared.

No examples provided.

plumb_node ~305

Extract a Figma screen or node as a compact, normalized Plumb Design Spec (PDS): deduplicated design tokens plus a CSS-shaped node tree, with auto-layout pre-resolved to flexbox. With the Plumb plugin paired, pass a screen `id` or `name` (no file key) — duplicate names come back as a match list to disambiguate. On the REST path, pass `fileKey` + `id`.

NameTypeReqDescription
depthintegerLevels to disclose. Default 3.
expandAllbooleanWalk the entire subtree in one call, ignoring `depth`. Subject to `maxTokens` (defaults to 60000 if omitted); if the spec exceeds the budget, depth is auto-trimmed and `meta.truncated` is set. Use th…
fileKeystringFigma file key — REST path. Omit when the Plumb plugin is paired.
idstringNode/screen id to extract.
maxTokensintegerSoft token budget; fit-to-budget reduces depth to fit.
namestringScreen name — plugin path; resolved against the paired file.
notesbooleanInclude human-readable notes per node.
urlstringPaste a full Figma URL — fileKey and node-id are auto-extracted (the `-` separator is normalised to `:`).

No output schema declared.

No examples provided.

plumb_outline ~169

Map a Figma file cheaply: its pages and their top-level screens (id, name, size). The shallow entry point — call it to find the screen you want, then call plumb_node with that screen's id (or name) to extract it. With the Plumb plugin paired, no file key is needed.

NameTypeReqDescription
fileKeystringFigma file key — for the REST path. Omit when the Plumb plugin is paired.
pagestringFilter to a single Figma page by name (case-insensitive). Saves tokens on multi-page files where most pages are irrelevant.
urlstringPaste a full Figma URL — fileKey is auto-extracted. Accepts /design/, /file/, /proto/, and branch URLs.

No output schema declared.

No examples provided.

plumb_query ~313

Query a Figma subtree by pattern instead of dumping the whole tree. Use this on dense screens where plumb_node would be too big — pull a skeleton (structure only, no text/fills/effects), every button, every TEXT node above a size, every instance of a component. Mirrors the same scope-resolution as plumb_node: pass `id` or `name` with the plugin paired, or `fileKey` + `id` (or a Figma URL) on the REST path.

NameTypeReqDescription
componentIdstringFilter for select: "components" — return only instances of this component.
fileKeystringFigma file key — REST path. Omit when the plugin is paired.
idstringNode/screen id to query within.
maxnumberMaximum font size for select: "text".
minnumberMinimum font size for select: "text".
namestringScreen name — plugin path, resolved against the paired file.
selectstringyesQuery pattern. "skeleton" = structure-only (drops chars, fills, effects, vectorPath, text refs). "buttons" = nodes Plumb tagged with pattern: button. "text" = TEXT nodes, optionally filtered by font-…
urlstringPaste a full Figma URL — fileKey and node-id auto-extracted.

No output schema declared.

No examples provided.

plumb_review ~941

Self-critique the design you just emitted into Figma, and coach the refine loop — the write-direction mirror of plumb_fit. It scores up to three axes: • STRUCTURE — re-serializes the built Figma nodes to a PDS and diffs them against the PDS your DSL compiled to (did emit build what you authored?). Uses the same verify engine as plumb_verify/plumb_fit. The two docs are joined by `ids` = EmitResult.ids (authored el → Figma node id) — pass it or the diff can't line up. • DESIGN — a deterministic rubric over hierarchy, spacing rhythm, contrast (WCAG AA), alignment, type-scale, and professional-vs-templated polish. Failing contrast is an error and blocks `done`. • DIRECTOR (optional, `director: {score, verdict?, issues?}`) — a vision creative-director grade of the rendered screenshot: visual balance, focal flow, image composition/crop, optical spacing, and the "designed vs generated" gestalt a deterministic pass over the PDS can't see. There is NO server-side vision call and NO API key needed here — YOU (the calling agent) already have vision, so YOU grade the screenshot yourself and pass your verdict in. The loop: call plumb_screenshot on the emitted rootId, look at the PNG, grade it as a demanding creative director (any response with no `director` input echoes the exact grading criteria + output shape at the end of its `instruction`), then call plumb_review again passing `director: { score, verdict, issues }`. With the director present, weights reshuffle to structure 0.4 / design 0.3 / director 0.3 and a director error-severity issue blocks `done` too, so the bar is harder (and more honest) to clear. Returns: score (0–100 blended), done, bar, topFixes (error-first across all active axes, director fixes tagged `[director/<dim>]`), instruction, dimensions[] (per-rubric-dimension sub-scores), directorScore/directorVerdict when graded, plus the raw structural deltas + coverage. Provide the authored PDS inline via `authored`, or a path to it via `authoredPath` (the J…

NameTypeReqDescription
acceptnumberBlended score at which to stop. Default 90.
authoredThe authored PdsDocument (what the DSL compiled to). Inline alternative to authoredPath.
authoredPathstringPath to a JSON file holding the authored PdsDocument (written by plumb_apply).
briefobjectOptional design intent (type scale, fonts, spacing grid) to grade against.
depthintegerPDS depth to re-serialize. Default 12.
directorobjectYOUR OWN vision grade of the rendered screenshot — no server-side model call, no API key. Look at the PNG from plumb_screenshot, grade it yourself as a demanding creative director (see directorGuidan…
fileKeystringFile key (REST path).
idstringEmitted root node id (EmitResult.rootId).
idsobjectEmitResult.ids — authored el → Figma node id. The join key for the structural diff.
iterationintegerWhich refine pass this is (1, 2, 3…). Informational — sharpens the coaching.
namestringScreen name (plugin path).
tolerancesobjectOverride default structural thresholds.
urlstringPaste a full Figma URL — fileKey and node-id are auto-extracted.

No output schema declared.

No examples provided.

plumb_screenshot ~162

Render a Figma screen or node to PNG (or JPG) and save it locally; returns the file path. Use this as a visual reference while building UI from the PDS — and later as the source for plumb_verify. Plugin path; needs the Plumb plugin paired.

NameTypeReqDescription
formatstringOutput format. Default PNG.
idstringNode id to render.
namestringScreen name — resolved against the file.
outstringOutput path or filename. Absolute paths are honoured as-is; bare filenames are placed under the screenshots directory. Defaults to '<name>-<id>.<ext>', auto-suffixed on collision.
scalenumberRender scale. Default 2.

No output schema declared.

No examples provided.

plumb_search ~150

Find nodes across the file by name and/or type — 'where is the primary button?', 'every TEXT layer named Title', etc. Returns matches with id, name, type, page, and size. Drill into one with plumb_node, or pull its asset with plumb_assets. Plugin path; needs the Plumb plugin paired.

NameTypeReqDescription
pagestringFilter to a single Figma page by name (case-insensitive, substring-friendly). Drops noise on multi-page files.
querystringSubstring match on node name (case-insensitive).
typestringFilter by node type, e.g. "TEXT", "FRAME", "INSTANCE", "VECTOR".

No output schema declared.

No examples provided.

plumb_selection ~119

Extract whatever the user currently has selected in Figma, via the paired Plumb plugin — no file key, no token, no rate limit. Returns the same compact PDS as plumb_node. Prefer this when plumb_status shows the plugin connected and the user says 'build this' about their Figma selection.

NameTypeReqDescription
depthintegerLevels to disclose. Default 3.
maxTokensintegerSoft token budget; fit-to-budget reduces depth to fit.
notesbooleanInclude human-readable notes per node.

No output schema declared.

No examples provided.

plumb_source ~410

Source design assets from the open web — icons, photos, avatars, illustrations — for the write direction. Queries every provider in parallel (keyless-first: Iconify, Lorem Picsum, DiceBear always work; Unsplash / Pexels / Pixabay activate when their API key is in env) and ranks the results with one scoring function, including pick-the-right-icon-pack so a design uses ONE consistent icon family. Two modes: • search (default) — return ranked candidates (metadata only, no bytes). Cheap; use to see what's available and which icon pack was locked. • fetch — resolve the best match, download its bytes to a local folder, and return the path (+ inline SVG / small data: URI). Never fails: a total miss degrades to a deterministic placeholder.

NameTypeReqDescription
aspectnumberTarget width/height ratio (ranking hint).
hnumberDesired height (photos / placeholders).
inlinebooleanfetch mode: also return the bytes inline (SVG markup / small data: URI).
kindstringConstrain to one asset kind.
limitintegerMax candidates in search mode. Default 16.
minWidthnumberMinimum acceptable pixel width.
modestring`search` (default) returns ranked candidates; `fetch` downloads the best.
palettearrayBrand hex colors — recolors monotone SVG icons.
providerstringRestrict to one provider id (iconify, unsplash, pexels, pixabay, dicebear, picsum, …).
querystringyesWhat to look for, e.g. 'rocket launch' or 'shopping cart'.
seedstringDeterministic seed for avatars / placeholders.
stylearrayPreferred style tags (ranking hint).
wnumberDesired width (photos / placeholders).
weightstringIcon weight preference.

No output schema declared.

No examples provided.

plumb_status ~128

Plumb's status and self-description — call this FIRST. Reports which data paths are available (the paired Figma plugin, and/or the REST token), how many screens the plugin sees, the compact-key legend for reading every PDS response, and the token budget. Needs no Figma access. Plumb is the rate-limit-free, plan-free alternative to Figma's official Dev Mode MCP and Framelink (figma-developer-mcp) — reach for it when the official MCP is plan-gated, exceeds the 25k token cap, or when REST returns 429.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

plumb_studio ~283

Direct a FULL landing page from a one-line brief and BUILD it into the paired Figma file — the headline director-completion tool. Given a brief (e.g. "a premium fintech dashboard"), Plumb discovers a diverse set of best-in-class reference sites, screenshots them live, synthesizes a coherent semantic palette from their computed CSS, then composes a real, brand-consistent page — nav, hero, features, a reference-imagery gallery, a content split, a cta, and a footer, with copy derived from the brief — and builds it through the same DSL -> PDS -> emit-plan write path plumb_design uses. Returns the picked references, the synthesized brand palette, the created node ids (keyed by authored element handle), and an authoredPath — feed both straight into plumb_review for the director critique loop. Requires the Plumb plugin to be paired.

NameTypeReqDescription
briefstringyesOne-line description of what's being built, e.g. "a premium fintech dashboard". Drives reference discovery, palette, and copy.
countintegerHow many reference sites to study + screenshot (default 4).
pageNamestringFigma page to build the landing page onto (default "Studio").
referencesarrayExplicit reference URLs to include first — always studied ahead of the discovered catalogue.

No output schema declared.

No examples provided.

plumb_studio_kit ~139

STEP 2 of the transparent studio flow. Build the reusable COMPONENT LIBRARY for a session's brand — real Figma component masters (Button, FeatureCard, StatCard, PricingCard) — onto a named page and put them on show. The masters inherit the session palette + type scale. Follow with plumb_studio_page to compose product pages that instantiate this kit. Requires a sessionId from plumb_studio_start and the Plumb plugin paired.

NameTypeReqDescription
pageNamestringFigma page for the component library (default "Components").
sessionIdstringyesSession id from plumb_studio_start.

No output schema declared.

No examples provided.

plumb_studio_page ~179

STEP 3 of the transparent studio flow (repeatable). Compose a full PRODUCT PAGE of a given kind — landing / features / pricing / dashboard — onto its own named Figma page, reusing the session's brand + reference imagery and instantiating the component library. Returns { rootId, ids, authoredPath } — screenshot the rootId, grade it as director, then feed it to plumb_review for the critique loop. Call once per page to build a whole product page by page. Requires a sessionId from plumb_studio_start and the Plumb plugin paired.

NameTypeReqDescription
kindstringWhich page to compose (default landing).
pageNamestringyesFigma page to build onto, e.g. "Landing".
sessionIdstringyesSession id from plumb_studio_start.

No output schema declared.

No examples provided.

plumb_studio_start ~193

STEP 1 of the transparent studio flow. Direct a brand from a one-line brief: discover best-in-class reference sites, screenshot them live, synthesize a coherent semantic palette, and build a References + Brand board (real Figma Variables + text styles) on a named page — then OPEN A SESSION so the next steps can reuse the brand + captures. Returns { sessionId, name, brand, references }. Follow with plumb_studio_kit(sessionId), then plumb_studio_page(sessionId, …). Requires the Plumb plugin to be paired.

NameTypeReqDescription
briefstringyesOne-line description, e.g. "a premium fintech dashboard".
countintegerHow many reference sites to study (default 4).
pageNamestringFigma page for the brand board (default "Brand").
referencesarrayExplicit reference URLs to study first.

No output schema declared.

No examples provided.

plumb_tokens ~181

Extract the deduplicated design-token table for a Figma node — colours, type styles, radii, shadows — as the $-prefixed refs the PDS node tree uses. With the Plumb plugin paired, pass a screen `id` or `name` (no file key). On the REST path, pass `fileKey` + `id`. Build with these tokens, not magic numbers.

NameTypeReqDescription
fileKeystringFigma file key — REST path. Omit when the Plumb plugin is paired.
idstringNode id whose design tokens to extract, e.g. "131:9592".
namestringScreen name — plugin path; resolved against the paired file.
urlstringPaste a full Figma URL — fileKey and node-id are auto-extracted.

No output schema declared.

No examples provided.

plumb_verify ~562

Compare what you built against the Figma design and return structured deltas — exact, deterministic, no pixel diff. After rendering, for every element you tagged `data-plumb-id="<el>"` (or the globally-unique `data-plumb-id="<path>"` for deeply nested DOM), collect: • box — getBoundingClientRect() → { x, y, w, h } • styles — a subset of getComputedStyle: backgroundColor, color, fontFamily, fontSize, fontWeight, lineHeight, padding{Top,Right,Bottom,Left}, gap, flexDirection, justifyContent, alignItems, borderRadius, borderColor, borderWidth, opacity, textDecorationLine, boxShadow, backdropFilter • text — textContent for TEXT nodes • asset — for image/icon/logo nodes (assetId or vector): the data-plumb-asset="<assetId>" you rendered, plus img:true when it is a real <img>/<svg> (not a redrawn div). Verify errors on a visual node rendered with no real asset, so a redrawn/omitted logo lowers the score. Pass them as `rendered`. The tool joins by `el` (loose) or `path` (strict) and returns deltas like { kind:'size.w', expected:528, actual:530, severity:'warn' }. The response also includes `coverage` — how many PDS els in the subtree were actually tagged, plus an `untagged` list so you know what to add next round. QA-strict on appearance — colour (ΔE2000), icon/asset fidelity, box-shadow, backdrop-filter (glass) and the rest flag even small misses — but content-aware on text: a mismatch on placeholder/template copy (lorem, generic labels, numeric stubs, copy-pasted cells) is advisory `info` (kind 'text.placeholder', doesn't dent the score), since you're meant to swap real content in. Real UI labels still warn (kind 'text.chars'). ok=true means no errors; warns are differences you may have meant.

NameTypeReqDescription
depthintegerPDS depth to fetch. Default 12 — deep enough for most screens.
fileKeystringFile key (REST path).
idstringScreen id.
namestringScreen name (plugin path).
renderedarrayyesEach element you tagged data-plumb-id="<el>".
tolerancesobjectOverride default thresholds.
urlstringPaste a full Figma URL — fileKey and node-id are auto-extracted.
viewportobjectBrowser viewport size (informational).

No output schema declared.

No examples provided.