mercury — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited mercury (Plugin) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Stop building UI blind.
You're shipping a product with Claude Code. Components compile, routes work, CLAUDE.md is 400 lines of vibes-as-a-spec. And you've never actually seen your product — just whichever route happens to be open in localhost. Markdown files don't render. Your product does.
Mercury turns Figma into the visual mirror for your AI coding workflow. Your agent writes React in the terminal. Mercury paints the same screens into Figma — all of them, side-by-side, with atomic undo, real auto-layout, real icons. You review the product, not one component at a time.
And Mercury ships with the taste layer: skills that encode design reasoning (product → palette → type → style) and a radical-2030 curation that refuses the 2022 SaaS defaults most AI-generated UIs drift into. 18 tools, consolidated from 70+. Local, MIT, BYO Claude API key. No cloud, no accounts, no credits.
Mercury is a local bridge that lets your AI agent paint directly into Figma — creating, editing, and organizing nodes — with a consolidated tool surface and a bundled taste layer. It bets on three things the tool-surface race ignores:
patch, paint, component each cover what used to be 5–10 separate tools). Smaller surface, fewer wrong calls.figma.commitUndo(). One agent action = one Cmd+Z. A 40-op batch still reverts in one keystroke.Mercury is for people who want a tight, opinionated, local bridge with the design intelligence already wired in.
Vibe coders. You ship with Claude Code / Cursor / Codex. You want to see the product you're building, not one route at a time. Mercury renders everything into Figma so you judge the whole thing at once.
Designers. You live in Figma. You want the boring, repetitive work — bulk rename, generate 8 component states, propagate tokens across 40 frames, drop real icons instead of color squares — to just happen. You talk to Claude on the side; layers materialize.
Same system, same 18 tools, same Cmd+Z semantics.
┌──────────────┐ stdio ┌─────────────────┐ ws://127.0.0.1:3055 ┌──────────────┐
│ Claude Code │ ──────► │ Mercury MCP │ ◄───────────────────► │ Figma plugin │
│ (terminal) │ ◄────── │ server (node) │ │ (in Figma) │
└──────────────┘ └─────────────────┘ └──────────────┘mcp/ — Node MCP server. Stdio to Claude Code; WebSocket on 127.0.0.1:3055. UUID-keyed promise map correlates plugin responses to in-flight MCP calls.figma-plugin/ — Figma desktop plugin. Sandbox dispatcher (code.ts) + UI iframe (ui.html) holding the WebSocket and a connection dot.skills/ — Claude Code skills: design-system, radical-2030, ambient-depth, variant-component-setup, tab-metaphors, rename-layers, mercury-gotchas..claude-plugin/ + .mcp.json — plugin packaging so the whole thing installs as /plugin install mercury.git clone <this-repo> mercury
cd mercury
# Build the MCP server (one-time)
npm --prefix mcp install && npm --prefix mcp run build
# Install as a plugin
claude --plugin-dir $(pwd)Claude Code auto-registers the bundled MCP (mcp/dist/server.js) and loads all 7 skills. No further claude mcp add needed.
npm --prefix mcp install && npm --prefix mcp run build
claude mcp add mercury --scope user -- node "$(pwd)/mcp/dist/server.js"Figma Desktop → Plugins → Development → Import plugin from manifest… → pick figma-plugin/manifest.json.
Then Plugins → Development → Mercury to launch. Grey connection dot until Claude Code spawns the MCP; green once the bridge is up.
claude
/mcp # confirm `mercury` is listed and connectedAsk for something:
Design system for a meditation app, premium feel, dark mode. Use radical-2030 aesthetic.
The design-system and radical-2030 skills load, consult the bundled references (palettes, type pairings, 85-style catalog with era_2030 flags), and scaffold variables + paint styles + text styles + a Components page — opinionated, not defaults.
See docs/usage.md for the full flow with skill-by-skill examples.
| Category | Tools |
|---|---|
| Status | ping |
| Query | query (op: document / selection / subtree / find / bounds / viewport) |
| Create | create (kind: frame / text / rectangle / ellipse / line / vector) |
| Icons | icon (op: search / create) — 1,943 Lucide icons bundled, recolored at creation |
| Edit | paint, patch, set_text_style |
| Structure | nodes (op: clone / delete / move / select / zoom) |
| Components | component (op: list / create / instantiate / detach / combine-variants / add-property / bind-property) |
| Styles | style (op: list / create-paint / create-text / apply / delete) |
| Variables | variable (op: list / create-collection / create-mode / create / set-value / bind / set-mode-for-node) |
| Pages | page (op: create / set-current / create-section) |
| Prototype | prototype (op: get-reactions / set-reactions / set-flow-starts) |
| Images | image (source: path / url) |
| Export | export_node, get_image_fill_bytes |
| Batch | batch — N ops, one round-trip, one undo, with templated ${idx}.id refs |
| Feedback | notify |
Every call is atomic. batch with 40 ops is one Cmd+Z.
| Skill | Loads when |
|---|---|
| `design-system` | "set up a design system", "new app", "give me a palette and type scale" |
| `radical-2030` | "2030", "radical", "cyberpunk", "HUD", "anti-polish", "make this less generic" |
| `ambient-depth` | "premium dark mode", "glow behind hero", "atmospheric depth" |
| `variant-component-setup` | "make this a component set", "add size/state variants" |
| `tab-metaphors` | "design 4 screens", "multi-tab app" |
| `rename-layers` | "rename these", "clean up layer names" |
| `mercury-gotchas` | Reference — batch sizing, auto-layout sizing modes, text-style order, off-canvas scaffolding |
Skills live in skills/<name>/SKILL.md. Invoke explicitly as /mercury:design-system, or let Claude auto-load when your request matches the skill's description.
Skills tell Claude what to do. These docs tell you why.
docs/usage.md — plugin install, skill walkthroughs, end-to-end example flow, troubleshootingdocs/design-notes.md — 28 hard-earned lessons from building a real 4-screen fitness app via Mercurydocs/ambient-depth.md — prose companion to the ambient-depth skilldocs/variant-component-setup.md — prose companion to the variant-component-setup skilldocs/tab-metaphors.md — prose companion to the tab-metaphors skillfetch / WebSocket / setTimeout. The WebSocket lives in the UI iframe; the sandbox dispatches via postMessage.documentAccess: "dynamic-page" is required — all variable APIs, cross-page reads, and InstanceNode.getMainComponentAsync() must be awaited.target: "es2017" — Figma's JS engine doesn't support ?? or ?.. esbuild down-levels everything.code.ts, close and reopen the plugin window to pick up the new bundle.skills/design-system/data/ATTRIBUTION.md for source and MIT license.MIT. See LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.