A two-way Figma MCP

Design → code.
Prompt → design.
Either way, plumb tells you when it's true.

One direction: Figma in, a normalised design spec out, and a verification loop that drives headless Chrome to prove your code matches the design. The other: a one-line brief in, a full, on-brand Figma page out. No REST rate limits, no metered tool-call quotas, no 25k-token cap explosions, no extra API key.

Two directions, one loop

Design → code

  1. 01
    Extract

    plumb_outline, plumb_node, or plumb_query pull a Plumb Design Spec — auto-layout pre-resolved to flexbox, tokens deduped to $c1, $t1 refs.

  2. 02
    Build

    Your agent writes the component from the PDS, same as it always does.

  3. 03
    Verify

    plumb_verify drives headless Chrome and diffs the rendered DOM against the design — layout, color, type, shadow, assets.

  4. 04
    Fit

    plumb_fit turns the diff into a 0–100 convergence score and ranked fixes. Fix, re-run, repeat until true.

Ends true — score 100, pixel-identical.

Prompt → design

  1. 01
    Research + brand

    The director studies live reference sites, screenshots them, and extracts a palette and type scale from their computed CSS.

  2. 02
    Compose

    plumb_studio writes real Figma nodes — nav, hero, features, gallery, CTA, footer — from the brand DSL.

  3. 03
    Critique

    plumb_review blends a structural diff, a design rubric, and the agent's own vision verdict into a score and fixes — director, not just generator.

Ends on your canvas — reviewed, on-brand, ready.

No rate limits, on any plan

Plumb reads and writes through a companion Figma plugin, not the REST API — so none of Figma's Dev Mode MCP or Framelink ceilings apply.

Dev Mode MCP / FramelinkPlumb
REST rate limit429 on Free/Starter budgetsnone — reads the in-memory doc
Tool-call quota6 calls / month (Starter)unmetered
Payload size351,378 tokens on a real screen~2.6k tokens for a 178-node dialog
VariablesEnterprise-only (REST)visible on every plan, incl. Free

Pixel-perfect, or it keeps going

Every iteration of plumb_verifyplumb_fit nudges the render closer to the design. The bob only stops swinging when the score hits 100 — same idea, same word: plumb, exactly vertical, exactly right.

shadow offset wrong, radius drifted

61/100

Everything local

Plugin and server talk over loopback. Nothing about your design leaves your machine — the director never calls an external model.

Open source

MIT-licensed. Twenty focused tools, plus an offline .fig parser. Issues and roadmap on GitHub.

Every Figma plan

Free, Starter, Professional, Organization, Enterprise — no plan-gating on the plugin path.

No extra key

Prompt → design runs on the calling agent's own model. No network calls, no second API bill.