Figbridge
Free, local MCP bridge for Figma — HTML, CSS, Tailwind, tokens, agent handoff bundles.
Connector by rudraptpsingh · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/rudraptpsingh-figbridge
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: frontend-development, ui-design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 33 read · 13 write · 3 delete · 6 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Tools by what they do 55
Read from the source code; the running server may list different tools.
Read 33 · Look things up without changing anything.
audit_a11yaudit_interactionsaudit_mobileaudit_paletteaudit_regressionaudit_typographyaudit_whitespacedescribe_screendiff_imagesdiff_sincediff_specsdiff_to_source
Show 21 more tools
export_app_specexport_design_specfingerprint_urlget_code_connectget_current_selectionget_last_exportget_tokenslint_connectlint_dslist_assetslist_componentslist_frameslist_historylist_pageslist_screensmatch_mockupmeasure_fidelitymeasure_layoutscreenshot_urlverify_text_fidelityvisual_diff
Write 13 · Create, change, send or run things.
apply_tokensbridge_statusclone_screenconnect_componentsexport_nodegenerate_patchimport_from_codeimport_responsive_setimport_urlimport_url_batchpreflight_importrecolor
Show 1 more tools
select_node
Delete 3 · Delete, drop, revoke or wipe things.
delete_noderun_scriptupdate_from_code
Not yet classified 6 · We could not tell from the name and description.
demarcateexport_all_pagesexport_frameget_agent_bundlemap_componentsprobe_url
Secrets and settings it asks for
Other settings (environment variables or headers).
FIGBRIDGE_PORT
Network hosts it talks to 6
cdn.tailwindcss.com· found in codefonts.googleapis.com· found in codefonts.gstatic.com· found in codegithub.com· found in coderudraptpsingh.github.io· found in codestackblitz.com· found in code
Files it touches
- Your home directory (~)
- Any path the agent passes to its tools
Tools (55)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
apply_tokensBind loose SOLID color fills to matching local color variables (matched by exact hex). Scope is a nodeId or the current selection. Returns { bound, unboundRemaining, availableColorVariables }.
audit_a11yAudit accessibility of an imported Figma frame. Returns WCAG contrast pass/fail counts (AA 4.5 normal / 3.0 large), per-failure list with measured ratio and node text, landmark coverage, and image nodes without descriptive names. Pure deterministic measurement — no LLM.
audit_interactionsDiscover hover/focus-capable elements on a URL before attempting prototype variant capture. Returns interactive elements plus CSS :hover/:focus selector counts and examples. Use this to decide which components need hover variants.
audit_mobileRender a URL across mobile (375) / tablet (768) / desktop (1280) viewports and report responsive issues: horizontal page scroll, elements overflowing the viewport, touch targets < 44×44 (Fitts), text < 12px (unreadable on phone), and fixed-position traps taller than 50% of viewport. Pure deterministic measurement — no LLM. Run after audit_palette / audit_typography / audit_a11y for the full Pillar 2 review.
audit_paletteAudit color usage in an imported Figma frame. Returns total distinct colors, top-10 by frequency, coverage curve (how many of top-N cover X% of usage), and near-duplicate merge suggestions for consolidation. Pure deterministic measurement — no LLM.
audit_regressionCompare a baseline URL and candidate URL to find frontend/UI regressions. Runs deterministic screenshot pixel diffs across desktop/tablet/mobile, visible-text disappearance checks, responsive issue deltas, and CSS-feature drift. Use before/after a frontend change, in CI, or before syncing updated UI into Figma.
audit_typographyAudit typography in an imported Figma frame. Returns distinct font sizes / families / styles, the (family, style, size) triplet frequency, and which standard modular scale (1.25 / 1.333 / golden ratio / etc.) the existing sizes best fit. Surfaces a suggested clean scale from the base size.
audit_whitespaceAudit spacing rhythm of an imported Figma frame. Returns padding / gap distributions, percentage divisible by 4 / 8 (grid conformance), and off-grid stragglers that break the spacing system.
bridge_statusHealth check for the Figbridge HTTP bridge and the stored payload. Also reports whether a plugin is currently connected (pluginConnected).
clone_screenDuplicate a frame (screen) inside Figma, optionally renaming it and applying text replacements to every TEXT child. Places the clone to the right of the source. Returns { nodeId, name, textReplacements }.
connect_componentsCreate or update Code Connect entries in a figbridge.connect.json committed in the consuming repo — the free, local equivalent of Figma Code Connect. Each entry maps a Figma component (file key + node id + name + a snapshot of its properties) to a code component (source path, export, import statement) and maps Figma variant / boolean / text / instance-swap properties to React props. Pass `entries` to upsert hand-written entries, and/or seed suggestions from Figma components (`figmaComponents` JSON, or `fromPlugin: true` to read them from the open file): the component description's `Code: src/……
delete_nodeDelete a Figma node by id, a list of ids, or by exact name. Returns { deleted, errors }. Use this to clean up junk frames between imports.
demarcateDemarcate a page's components — numerically AND visually. Returns the same mathematical layout metrics as measure_layout, plus writes a PNG with every repeated-component group boxed in its own colour (so the component boundaries and the grid are unmistakable). Use to SEE and MEASURE the structure of a mockup or a rendered app in one call.
describe_screenReturn a semantic description of a single screen: size, background color, all text content, components used, inferred category, and a one-paragraph natural-language summary. Useful for agents that want to reason about a screen without fetching its full HTML.
diff_imagesCompare two image files (any PNGs — Figma exports, mockup screenshots, rendered pages). Returns a raw-pixel score (0-100), a perceptual SSIM score (0-1, tolerant of anti-aliasing / sub-pixel shifts), hotspot diff regions, and writes three legible artifacts to disk that you Read() to SEE the difference: `overlay` (onion-skin — image B with image A at 50% on top), `montage` (A | B | overlay side-by-side, colour-coded), `boxed` (B with red boxes on the diff regions). The general-purpose visual comparator — use when you have two images and no DOM.
Show 40 more tools
diff_sinceReturn history entries captured after the given timestamp (milliseconds since epoch). Each entry includes a 12-char SHA-1 fingerprint of the payload so you can detect real content changes vs re-selections.
diff_specsExact structured diff between a rendered design URL and app URL, or captured JSON specs from a native Electron/Playwright state. Provide exactly one URL or spec path per side; mixed URL/spec inputs work. Use anchors when Figma and app layer trees differ: each explicit Figma node id or name pairs with one app data-testid. Missing/ambiguous pairs and explicitly requested fields missing from either spec remain non-PASS and appear in coverage. Reports copy, color, typography, spacing, size and viewport x/y drift. Pass sourceDir to resolve app nodes through data-testid and figbridge.connect.json, i…
diff_to_sourceCompare an imported Figma frame against the freshly-extracted source URL spec and report per-text-node field-level differences: characters, fontSize, fontFamily, color, plus presence (nodes that exist on one side but not the other). Use after the designer edited a frame to see exactly what diverged from source — the input to generate_patch. Pure deterministic measurement, no LLM.
export_all_pagesExport every page's top-level frames in one call. Returns { pageCount, pages: [{ pageId, pageName, frameCount, html, css, tailwindHtml, tokens, cssVars }] }. Use for whole-file handoff; prefer get_agent_bundle for agent-ready output.
export_app_specReturn a complete JSON catalog of the currently open Figma file: every screen, every component (with variants), design tokens, CSS variables, Tailwind config, screens grouped by category, and a per-page flow ordering. Drop this into an agent's context as the authoritative spec for the app.
export_design_specRead an entire Figma frame into a structured FigBridge spec with node IDs, viewport bounds, paint, typography, layout, and text. Hidden subtrees are omitted; unsupported or mixed authored values are listed in _capture.warnings. Save the returned JSON as mockupSpecPath for diff_specs against a matched app DOM capture. Requires the Figbridge plugin with Live bridge on.
export_frameExport a Figma frame as PNG. With `outPath`: writes to disk, returns path. Without: returns base64. Use to pull a rendered version of an imported frame back out for visual diff.
export_nodeTrigger the plugin to export a specific node (by id) without requiring the user to click. Returns the same payload shape as get_current_selection.
fingerprint_urlAudit a URL's CSS-feature usage in one call — returns counts of flexbox/grid/gradients/shadows/filters/blends/transforms/pseudo-elements/iframes/etc, plus tag mix and color/font palette. Run BEFORE bigger fidelity pushes to know where the actual coverage gaps are. Returns { totalElements, topTags, displays, positions, features, colors[], fonts[] }.
generate_patchTurn a diff_to_source result into a minimal patch plan against a local source directory. For text-content changes, finds the exact old string in HTML/JSX/TSX/etc and emits a before/after edit. For color / fontSize / fontFamily changes, surfaces a structured note pointing at candidate CSS files (style swaps usually want a token edit, not a literal replacement). No files are written — the caller decides whether to apply. Returns { edits[], notes[], unifiedDiff }.
get_agent_bundleBuild an LLM-ready handoff bundle from the currently selected frames (or current page if nothing selected). Returns a list of files: hierarchy.md, components.json, tokens.json, tokens.css, DESIGN.md, AGENTS.md, ISSUES.md, issues.json, snapshot.json, manifest.json, optional CHANGES.md (if prior snapshot exists), optional responsive.md/json, optional flow.mmd, per-variant .tsx + .stories.tsx, optional screenshots (base64 PNG), and tailwind.config.js. Text files are returned verbatim; binary files (screenshots) are base64. Requires the Figbridge plugin open with Live bridge on.
get_code_connectCode Connect for a Figma node, like Dev Mode's Code Connect panel: resolves an instance to its main component and component set, finds the entry in figbridge.connect.json, maps the instance's current variant / boolean / text / instance-swap values to props, and returns a ready-to-paste JSX snippet with its import. Target: `nodeId`, or the current selection (from the last plugin push, else asked live). Offline: pass `node` as JSON { nodeId, name, componentSet: { id, name }, mainComponent: { id, name }, properties: { 'Style': { type: 'VARIANT', value: 'Primary' }, 'Label#59:128': { type: 'TEXT',…
get_current_selectionGet the most recent Figma selection pushed from the Figbridge plugin, in the requested format.
get_last_exportAlias for get_current_selection. Returns the last pushed Figbridge payload.
get_tokensGet only the design-token payload (color + number variables, plus CSS variable file and Tailwind config).
import_from_codeCreate a real Figma frame (auto-layout, text, fills, radii — editable layers, not a flattened image) directly from code. Provide ONE of: `spec` (deterministic JSON tree — preferred), `html` (raw HTML string — best-effort element→frame mapping), or `htmlPath` (read file from disk, then parse as html). Top-level spec shape: { name, width?, height?, fill?, layout: 'VERTICAL'|'HORIZONTAL'|'NONE', padding?, spacing?, children: Node[] } where Node = { type: 'frame'|'text'|'rect', ...style }. The new frame is placed to the right of any existing top-level frame on the current page and selected. Return…
import_responsive_setImport a URL at multiple viewport widths and optional light/dark color schemes in one call. Creates one Figma frame per width/theme combination, or returns telemetry only with dryRun. This is the multi-viewport capture path for desktop/tablet/mobile and theme sets. Default widths: 1280, 768, 375. Returns { frames: [{ width, colorScheme, nodeId, name, createdCount, telemetry }] }.
import_urlRender a URL in headless Chrome (figbridge-managed), walk the DOM with computed styles, and create the resulting frame tree in Figma. The single highest-fidelity path from web → Figma. Returns { nodeId, name, createdCount, warnings }.
import_url_batchBulk-import multiple URLs using the same website-to-Figma pipeline as import_url/import_responsive_set. Each URL can be imported at one or more widths and optional light/dark themes. Use dryRun first for large batches. Returns { results: [{ url, frames: [...] }] }.
lint_connectVerify figbridge.connect.json cannot rot: every entry's source file and export exist, every mapped prop exists on the component (TS/TSX props are read, including interfaces, extends, Omit, forwardRef and imported literal unions), every mapped enum value is still in the prop's string-literal union, and every mapped Figma property / variant value is still in the entry's Figma snapshot. Returns { ok, checked, errors, warnings }. `figbridge-mcp call lint_connect` exits non-zero when ok is false, so it can gate CI.
lint_dsLint the file for design-system violations: unbound colors (SOLID fills not using a variable), non-grid spacing (padding/gap not divisible by 4), orphan components (defined but never instanced), and duplicate names. Returns findings grouped by rule.
list_assetsExport bulk assets from the file as base64. kind='icon' scans small vector frames + names like ic-* and exports SVG. kind='image' finds IMAGE-fill nodes and exports PNG@2x. kind='illustration' finds large vectors on 'Illustrations' pages and exports SVG. limit caps the number of assets returned (default 40).
list_componentsList local components and component sets (with variants) in the currently open Figma file. Returns [{ nodeId, name, kind: 'COMPONENT' | 'COMPONENT_SET', variantCount?, variants? }].
list_framesList the top-level layers on a specific page (or the current page). Returns [{ id, name, type, width, height, hasChildren }]. Use this to walk the file without exporting.
list_historyList recent Figma selections that have been pushed (metadata only, newest first).
list_pagesList every page in the currently open Figma file: { id, name, frameCount, isCurrent }. Cheap — use this before list_screens / list_frames to orient.
list_screensList every top-level frame (screen) across pages in the currently open Figma file. Each result has { nodeId, name, pageName, width, height, category, orderHint }. Category is inferred from name: splash | onboarding | auth | home | detail | settings | overlay | editor | search | state | commerce | error | other. Requires the Figbridge plugin to be open with Live bridge on.
map_componentsIndex app source to resolve data-testid and figbridge.connect.json component names to files, plus CSS and checked-in generated design tokens. Reports dimension-token drift when Figma-exported tokens.json disagrees with generated v2Tokens.json. Pass sourceDir to match_mockup or diff_specs to use these maps automatically.
match_mockupCompare a rendered design HTML reference with the live app at matched viewport widths. Returns pixel/SSIM evidence plus copy, style, size and viewport x/y deltas. With sourceDir, uses data-testid and figbridge.connect.json to locate app code, quotes the nearby authored JSX class, suggests a codeChange only when one literal matches the computed dimension, and reports checked-in Figma vs generated dimension-token drift. Dynamic flex/calc dimensions remain unresolved instead of receiving guessed edits. Requires matching content and UI state for a whole-screen verdict; screenshot-only references u…
measure_fidelityPhase 6 — compute pixel-similarity score between the live URL and a Figma frame export. Returns { score (0-100), diffPercent, regions[] }. The diff regions are the top spots where the import diverges from the live page — feed these back into the extractor for targeted fixes.
measure_layoutMathematical layout metrics for a URL — numbers an agent can reason over directly (more actionable than a screenshot). Returns the inferred GRID (column/row count, column pitch, gutter, cell size, size-regularity) from the dominant repeated component; ALIGNMENT (count of shared vertical/horizontal edge lines + a snap score); SPACING (detected base unit e.g. 8px, the spacing scale, % off-grid); the repeated-COMPONENT groups with instance counts; and an XY-CUT block segmentation (depth, leaf count, and the largest whitespace seams = the structural splits like sidebar|content|inspector). Determin…
preflight_importCheck a URL for common website-to-Figma import risks before spending time on a full import: bot-protection/captcha pages, HTTP errors, missing-font risk, low-resolution images, SVG-heavy pages, deep wrapper nesting/auto-layout noise, horizontal scroll, and very tall pages. Run this before import_url/import_responsive_set/import_url_batch.
probe_urlRender a URL in headless Chrome and run an arbitrary JS snippet inside the page. Use to inspect the live DOM / computed styles when planning an extraction. Replaces external chrome-devtools-mcp.evaluate_script. Snippet is the async-function body; use `return` for the result. Returns { ok, result }.
recolorSwap SOLID fill/stroke colors across a scope. Scope is 'selection' (default), 'page', 'file', or a specific nodeId. Mapping maps old hex → new hex (case-insensitive, 3- or 6-digit hex, with or without #). Returns { changes, nodesVisited }.
run_scriptEscape hatch: evaluate an arbitrary JavaScript async-body inside the Figma plugin sandbox. The `figma` plugin API is in scope. Use this when no purpose-built tool exists for what you want — e.g. one-off queries, exotic node manipulations, prototyping a future tool. Body must return a JSON-serializable value (or undefined). Returns { ok, result, error? }. Trust model: bridge binds 127.0.0.1 only, same as recolor/clone_screen. Example script: `const sel = figma.currentPage.selection[0]; return { id: sel?.id, type: sel?.type, name: sel?.name };`
screenshot_urlRender a URL in headless Chrome and capture a PNG. If `outPath` is given, writes the PNG to disk and returns the path (cheap on agent context). Otherwise returns the base64 bytes. Use for visual diffs against Figma exports.
select_nodeSelect a node in Figma and scroll the viewport to it. Provide either a nodeId (e.g. '1:2') or a name substring. Requires the Figbridge plugin to be open with Live bridge enabled.
update_from_codeUpdate an existing Figma frame in place from a new spec or HTML — finds the frame by `nodeId` or by exact `name`, removes its children, and rebuilds them from `spec` / `html`. The root frame id stays stable so anything that references it survives the update. If no match found, falls back to creating a fresh frame. Returns { nodeId, name, replacedCount, warnings[] }. Use this for iterative re-imports instead of `import_from_code` to avoid duplicate frames.
verify_text_fidelityAfter importing a URL, verify that every visible text string from the live page also exists in the Figma frame. Returns { liveCount, specCount, missing[], matchedPct }. Use as a fast sanity check that the extractor didn't drop content.
visual_diffOne-call visual reference: take a live Chrome screenshot of `url` AND export the Figma frame at `nodeId`, write both PNGs to `outDir` (default: OS temp dir), and return their paths. Hand the paths to the Read tool to view side-by-side. Replaces the chrome-devtools-mcp + python-decode + manual-write dance.
Compare and alternatives
Featured in
Signals
- Stars
- 14
- Forks
- 1
- Open issues
- 0
- Last commit
- Oct 11, 2026 (17 days ago)
- Last release
- Jun 10, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.rudraptpsingh/figbridge- Version
- 0.4.0
- Auth
- No auth
- Packages
- npm figbridge-mcp
- License
- MIT
- Repository
- github.com/rudraptpsingh/figbridge
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Figbridge MCP server. Agent Mart. https://agentmart.dev/connectors/rudraptpsingh-figbridge (last updated 2026-10-24)