Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
제작자가 쓴 설명(영어 원문)
Make AI-generated 3D assets web-ready: budgets, SSIM-verified optimization, STL/USDZ export.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
MESHY_API_KEY비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"glbforge": {
"command": "npx",
"args": [
"-y",
"@glbforge/mcp"
],
"env": {
"MESHY_API_KEY": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add glbforge --env MESHY_API_KEY=your-value -- npx -y @glbforge/mcp실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"glbforge": {
"command": "npx",
"args": [
"-y",
"@glbforge/mcp"
],
"env": {
"MESHY_API_KEY": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"glbforge": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@glbforge/mcp"
],
"env": {
"MESHY_API_KEY": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 도메인 glbforge.dev 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: MESHY_API_KEY
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.8.0)은 2개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.
같은 카테고리에는: Figma Context MCP, Claude Real Video, Figma MCP Server
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Let any LLM watch a video locally — and search everything it has ever watched.
The Figma MCP server brings Figma design context directly into your AI workflow.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
glbforge.dev · raw AI mesh in, shipped asset out
The deterministic layer after 3D generation, built for agents and CI. Two jobs: the agent's eyes while a mesh is being edited (inspect reads it semantically in tens of milliseconds, diff says what the last edit broke), and the gate before it ships (analyze → optimize → verify, with versioned performance budgets as a CI-able contract and "no visible loss" measured as an SSIM number). Also forges 2D artwork into watertight 3D, routes photographs to generators, and exports GLB / STL / USDZ.
glbforge inspect — the edit-loop read (sub-second): one shell or floating pieces, watertight or holes/overlaps, size in metres, up axis, origin placement, unapplied/mirrored transforms — each finding a versioned rule id (topo/open-edges from core-geometry@1) with measured/heuristic certainty, a likely cause with confidence, and a concrete fix. front is never guessed. Same thing as the MCP inspect tool: call it after every edit.glbforge diff — what changed since the last edit, including what it broke: per-part size deltas ("'legs' is 30% narrower along X"), triangle and shell deltas, topology regressions (was watertight, now has 3 open loops), origin drift, node transforms, meshes added or removed, and --visual front/side/top/iso SSIM with cameras fixed to the before framing. Same thing as the MCP diff tool.glbforge analyze — budget report card + named lint rulesglbforge optimize — weld/simplify/LOD/compress to hit the budgetglbforge scaffold — emit a React Three Fiber viewer for the optimized assetglbforge meshy — generate/download via Meshy REST API (image/text → 3D, --optimize glue)glbforge ship — one call from a GLB, a logo, or a photo to a budget-gated asset: route (optimize / forge / generate) → analyze → optimize → gate. --json emits the route, the forge's decision and the full optimization report as one document.@glbforge/mcp, 28 tools, dev.glbforge/glbforge in the official MCP registry)glbforge ui) — local web UI: drag-drop analyze, one-click optimize with a before/after compare slider in the viewport, logo forging, Meshy generation with live progress, STL export. Zero hosting; runs entirely on your machine.glbforge extrude — deterministic logo/graphic → 3D (no AI, no credits): traces the silhouette (marching squares → Douglas-Peucker → earcut), extrudes it watertight, and projects the source image back on as the texture. For 2D artwork (logos, wordmarks) this beats image-to-3D generation outright: ~1.5k tris vs ~2M, exact silhouette, original colors. --bevel adds a signage-style rounded rim (miter-limited, clamp-probed insets + a crack stitching pass keep it watertight even on thin graffiti strokes; verified 0 boundary / 0 non-manifold edges on real logo fixtures). Photographic inputs are detected and routed to Meshy instead — or, with --matte auto, lifted off their background first (see below). Also exposed as the extrude_image MCP tool.--matte auto — lift the subject, forge the stickerA photograph has no alpha and no white ground, so the forge refuses it. The matte (matte/border@2, core/src/extrude/matte.ts) is the third answer: it takes the frame edge as the background, grows it inward through pixels of that colour, and calls what survives the subject — the idea behind a phone's "lift subject", done with plain connectivity, so it adds no model download, runs identically in Node and the browser, and is byte-for-byte deterministic. Colour decides each pixel's class and connectivity decides what happens to it, which is what keeps a mug's handle open: an enclosed region of background colour is a hole, not subject. Small enclosed regions (highlights, JPEG speckle) are filled, small disconnected pieces are dropped as debris. Matching is chromaticity-aware in one direction — a pixel that is close in colour and *darker* than the background is a shadow of it, so a cast shadow stops being welded to the object, while a white mug on a grey desk (brighter, same hue) is never absorbed. A 3x3 majority filter smooths the mask before tracing, so JPEG ringing along an edge does not become hundreds of contours.
The tolerance tunes itself. tuneMatte sweeps an eight-rung ladder and keeps the best-scoring cut, because confidence falls off at both ends of the knob — too tight leaves the background attached, too loose eats the object. The Studio does it on drop (the slider opens on the tuned value, tagged auto), --matte-tolerance auto does it on the CLI and prints the ladder, and the MCP's matte_preview does it by default.
Look before you forge. A tolerance you cannot see is a tolerance you cannot choose, so the cut is previewable everywhere it is offered: glbforge extrude photo.jpg --matte auto --matte-preview cut.png writes the cut (subject opaque, removed background ghosted) and prints its numbers without building geometry; extrude_image takes matte_preview: true and returns that image plus nextActions naming the tolerances to try; and the Studio redraws the cut live under the lift button as the slider moves.
A mask is an inference, so it reports like one — coverage, pieces, holes, and a confidence built from how uniform the edge was, how much contrast the cut ran through, and whether the result is a sensible size. Below 0.4 the forge refuses with those numbers rather than handing back a blob; the MCP surfaces the accepted case as a SUBJECT_LIFTED diagnostic so an agent knows the silhouette was inferred, not read. --matte auto on the CLI, matte on extrude_image, and ✂ Lift subject and forge in the Studio, offered exactly where the refusal used to be a dead end.
pnpm install && pnpm build
node packages/cli/dist/index.js analyze fixtures/veiled-guardian.glb --profile mobile-hero node packages/cli/dist/index.js optimize fixtures/veiled-guardian-tex4k.glb -o out.web.glb --lods 40000,10000 node packages/cli/dist/index.js scaffold out.web.glb -o viewer && cd viewer && pnpm install --ignore-workspace && pnpm dev node packages/cli/dist/index.js ui model.glb # GLBForge Studio on localhost:5177
inspect (glb/gltf/usdz/usda/usdc) answers what an agent editing a mesh gets wrong blind: ~0.1 s on a 150k-triangle asset, ~0.8 s on a raw 2M-triangle generation (the welded topology pass itself is ~70 ms per 150k triangles). --profile authoring (default) treats topology problems as warnings because they are most likely the last edit's doing; a budget profile (mobile-hero) reports them as info. --packs core-geometry@1,core-scene@1 pins rule packs, --no-topology skips the welded pass (rules are listed as skipped, never silently absent), --strict exits 1 on warnings, --json emits the full report. --expect "chair, Z-up, meters, single-shell, 0.4-1.2m tall, front -Y, watertight, origin base" turns the run into a contract (intent@1): shell count, watertight, size range and origin are measured and fail as errors (exit 1); a bare category gives a plausibility warning from a coarse size table with a stated confidence; front is recorded as declared and never measured; Z-up on a GLB is informational because glTF is Y-up by definition. Tokens the parser cannot place are reported, not dropped.
glbforge usage is the local, opt-in counter behind the one metric that says whether GLBForge is in the loop: invocations per asset. Off by default; opt in with glbforge usage --enable or GLBFORGE_USAGE=1. Every inspect / diff / analyze (and every MCP call) then appends one JSON line to ~/.config/glbforge/usage.jsonl (GLBFORGE_CONFIG_DIR to move it). Nothing is ever sent anywhere; --clear deletes it. Because every edit changes the file's hash, assets are grouped into *lineages*: the same path in the same session, the same path within two hours, a diff edge (before → after), or an explicit --lineage . The report gives median / p90 invocations per lineage and the share of assets inspected at least five times.
analyze flags: --profile mobile-hero|desktop-hero|product-configurator, --json, --no-topology. Exits non-zero when the asset is over budget — wire it into CI like a linter. optimize flags: --target , --lods a,b, --no-textures, --no-compress, --no-verify. LOD files (--lods 40000,10000) are geometry-only: materials stripped, positions welded, meshopt-simplified, and when non-manifold topology stalls the simplifier (stacked forge layers, doubled shells) they fall back to grid vertex clustering so the target is always reached — the CLI and the Action report say grid-clustered when that happened.
Measured on the included Meshy 7 fixture (4K textures, 1.99M tris): 89.4MB → 5.5MB (93.8% smaller), score 25 → 100, ~7s. Pipeline: dedup → weld → meshopt-simplify to budget (error ladder) → fill missing normals → texture resize + WebP (normal maps near-lossless) → prune → EXT_meshopt_compression → perceptual verification.
Every optimize/ship renders the asset from four fixed cameras before and after (deterministic software rasterizer, 2x supersampled, smooth shading, base-color textures) and scores the pairs with SSIM. The weakest view must clear the profile's minSsim floor (mobile-hero 0.94, product-configurator 0.95, desktop-hero 0.96) or the report card gets an error-severity fidelity/perceptual finding and the command exits non-zero, exactly like a budget violation. A passing run records the number as an info finding, so the score ships with the report everywhere (CLI, --json, MCP, Studio).
visual fidelity ✓ SSIM 96.7% weakest view 95.8% @ verify_135 · floor 94.0% · geometric deviation ≤ 0.1%
On the fixture: the budget pass (1.99M → 150k tris) measures 0.958; forcing 40k tris drops to 0.896 (fails, and it should — hair strands merge); 10k measures 0.73. glbforge verify scores any two files the same way. The cameras are fixed to the reference's bounds so a shifted or shrunken result cannot re-frame itself into a good score.
| package | purpose |
|---|---|
@glbforge/core | pure analysis library: stats, topology, rules, budgets |
glbforge (CLI) | glbforge command-line interface |
@glbforge/meshy | typed Meshy REST client: tasks, polling w/ backoff, downloads |
@glbforge/mcp | MCP server: validate / inspect / render GLB and USD with stable error codes + prim paths, compact report cards, optimize/ship/forge/STL/USDZ with dry-run + diff, generation |
.mcp.json registers the server for Claude Code automatically (build first: pnpm build). For other clients:
claude mcp add glbforge -- node /path/to/XUI/packages/mcp/dist/index.js
Built for agents. Every tool answers one envelope — { ok, summary, duration_ms, errors[], data } — where errors[] carries every diagnostic with a stable code (docs/error-codes.md), a severity and the prim path it refers to, and every response validates against schemas/ .output.json. validate, inspect_geometry, inspect_animation, inspect_materials, analyze_performance and inspect_all read GLB, glTF, USDZ, USDA and USDC (pure-TypeScript USD readers, single layer); render / render_animation_strip draw any of them, posed at any animation time. Mutating tools take dry_run and return a diff plus post_validation, and report every change they made on their own (generated normals, joined primitives, transcoded textures…) as a coded entry. Results are compact cards
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요