flyu-design
flyu
Локальный клиент для дизайн-файлов: парсит файлы Sketch / Figma в единый DSL v3 и через встроенный MCP (HTTP, запускается вместе с приложением) открывает доступ к ним для Cursor / Claude, чтобы ИИ мог напрямую смотреть макеты, писать код, править макеты и экспортировать вырезанные ассеты.
Демо
https://github.com/user-attachments/assets/51cc93c6-8413-4c3b-8bfd-7fd135e26a3c
Лицензия: MIT. Сторонние уведомления — в NOTICE.md. Раскрытие уязвимостей — в SECURITY.md. Участие в разработке — в CONTRIBUTING.md.
Форматы файлов и товарные знаки Sketch / Figma принадлежат их правообладателям. Этот проект парсит импортированные вами файлы .sketch / .fig на вашей локальной машине, не включает лицензий от вендоров и не заявляет о связи с Figma, Inc. или Sketch B.V. Соблюдайте их условия обслуживания и импортируйте только те дизайн-файлы, которые вы вправе использовать. Реализация декодирования .fig — в crates/fig-kiwi-rs.
Документация для пользователей — в docs/user-guide.md (установка / функции / формулировки / устранение неполадок); детали инструментов MCP — в docs/write-tools-guide.md.
Related MCP server: figma-opencode-mcp
Разработка
pnpm install # 安装依赖(postinstall 会把 better-sqlite3 编到 Electron ABI)
pnpm dev # 启动 Electron + HMR
pnpm typecheck # 类型检查(main + renderer + mcp + tests)
pnpm lint # ESLint
pnpm test # 单元 + 契约测试(tsx --test)
pnpm test:visual # 渲染像素回归(改 import/render 后必跑)
pnpm build # 构建到 out/(含 main/preload/renderer/mcp)
pnpm dist # 打本机未签名 mac 双架构(arm64 + x64).dmg → release/Сборка пакета (локально на macOS, без подписи)
pnpm dist # build + electron-builder → release/flyu-*-mac-arm64.dmg + flyu-*-mac-x64.dmg
pnpm dist:dir # 只打 arm64 .app 到 release/mac-arm64/(便于调试)Две архитектуры: electron-builder собирает пакеты отдельно для каждой целевой архитектуры; better-sqlite3 перекомпилируется для каждой архитектуры отдельно (кросс-сборка x64 на хосте arm64 проверена и работает).
Результат — неподписанный пакет (identity: null), после установки приложение называется «非鱼». Если Gatekeeper блокирует локальный запуск: правый клик → «Открыть». Не запускайте одновременно с работающим pnpm dev (из-за блокировки одиночного экземпляра второй процесс сразу завершится).
MCP Server
Два способа подключения, один и тот же набор tools/prompts (29 Tool + 4 Prompt):
HTTP (рекомендуется): встроенный Streamable HTTP в клиенте, запускается вместе с приложением. Настройки → Конфигурация использования MCP → Копировать (URL + Bearer token). Порт по умолчанию 32677 и сохраняется постоянно; только если занят — сдвигается дальше; token хранится в
userData/mcp-token(0600), можно перегенерировать.stdio (запасной вариант, нужен локальный Node):
node out/mcp/server.js. Требуется, чтобы БД уже существовала (клиент должен был запуститься хотя бы один раз).
Сборка stdio-входа
pnpm mcp:build # esbuild 打包到 out/mcp/server.js
pnpm mcp:dev # tsx 直跑(调试用)Проверка (ручной тест JSON-RPC)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | pnpm mcp:devДолжен вернуться serverInfo: { name: "flyu-design", version: "1.0.0" }.
Ловушки локальной разработки на macOS (двойной ABI + подпись кода)
Переключение ABI: better-sqlite3 в один момент времени может быть скомпилирован только под одну среду выполнения.
Для Electron:
pnpm rebuild(черезelectron-rebuild)Для прямого запуска Node (отладка MCP / тесты tsx):
cd node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3 && ./node_modules/.bin/prebuild-install -r nodeСимптом: при запуске под не ту среду появляется ошибка вида
NODE_MODULE_VERSION 130 vs 127.
Подпись кода: prebuilt-файл
.node, скачанный из npm, на macOS 26+ убивается AMFI с ошибкойInvalid Page(SIGKILL, exit 137, stderr пуст). Исправление:codesign --remove-signature node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3/build/Release/better_sqlite3.node codesign --force --sign - node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3/build/Release/better_sqlite3.nodeПосле каждого
prebuild-installнужно повторять заново. При последующей сборке пакета это автоматизируется хуком afterSign в electron-builder.
Структура каталогов
src/
├── main/ Electron 主进程(DB / IPC / 渲染 / 导入导出)
│ ├── import/ 双通道导入:sketch-*(.sketch)/ fig-*(.fig 本地,@open-pencil/core)
│ │ + html-to-dsl(HTML 生成)、collect-tokens(共享令牌统计)
│ ├── render/ 渲染调度(fig 走 Skia 直渲;sketch 走 DSL→HTML→Chromium)
│ ├── export/ dsl-to-jsx / dsl-to-fig / vector-to-svg / code-snippets / cut-cache
│ ├── tokens/ 设计令牌(L1 命名令牌 / L3 组件令牌 / tokenize)
│ ├── db/ SQLite(writers / write-ops / write-docs / restyle / migrations)
│ └── ipc/ 渲染进程桥(files / folders / explorer / mcp-config / library)
├── preload/ contextBridge 桥
├── renderer/ React + AntD UI
├── mcp/ MCP Server:server.ts(stdio)+ tools.ts(聚合器)+ tools-*.ts(8 个域模块)
├── shared/ 三端共享(DSL v3 类型 / IPC 通道 / 错误码 / 路径)
└── native/ fig-kiwi WASM(由 crates/ 编译)
crates/ Rust 原生(.fig Kiwi 解码)
resources/ 打包图标 icon.png / icon.icns
docs/ 用户教程 / 写能力设计与工具文档
scripts/ 正式脚本(icons / wasm / 视觉回归)
tests/ 单元与契约测试Локальные данные времени выполнения — в пользовательском каталоге (~/Library/Application Support/flyu) и в опциональном .tokensave/ (в gitignore), артефакты сборки — в out/.
Текущее состояние
Импорт по двум каналам: локально .sketch / .fig (@open-pencil/core)
Единый DSL v3 + хранение в SQLite + группы версий
Рендеринг: fig — прямая отрисовка Skia; sketch/ai DSL→HTML→Chromium; degraded — явное сообщение
MCP 29 Tool + 4 Prompt (навигация/данные/визуал/код/вырезка ассетов/операции записи/семантические правки)
Возможности записи: транзакционные apply_operations / restyle_*(dryRun)/ create_from_html / fork_document / rollback
Экспорт: get_html (самодостаточный одиночный файл)/ get_code (JSX+Tailwind, vw/rem/tokenize)/ export_fig (неофициальная совместимость с .fig)/ download_assets (SVG/PNG/оригиналы)
Дизайн-токены: именованные токены L1 (fig variables/sketch styles, экспорт css/dtcg) + ревизия покрытия компонентных токенов L3
Установочные пакеты для Windows / Linux (конфигурация есть, релиз не выпущен)
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceBidirectional MCP bridge enabling AI assistants to draw UI on Figma canvas and read designs back as structured data or code tokens via localhost, requiring Figma Desktop.5458225MIT
- AlicenseAqualityBmaintenanceLocal-first MCP server that connects AI coding agents to the currently open Figma file through a local plugin bridge, requiring no Figma API token.8MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI IDEs to query Figma design tokens, component specs, and audit issues via MCP tools, without cloud subscriptions.MIT
- AlicenseBqualityBmaintenanceLocal MCP server connecting AI clients to the Figma desktop app for inspecting and editing Figma documents via the Plugin API.162511MIT
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sevenyang129/flyu'
If you have feedback or need assistance with the MCP directory API, please join our Discord server