Протокол моста
Как figma-agent-mcp взаимодействует с figma-agent-plugin. Весь трафик моста проходит через localhost.
Общую картину и диаграммы Mermaid см. в разделе Архитектура.
Обзор
Стандартный порт берётся из bridge.config.json в корне репозитория (defaultPort, синхронизируется с MCP + UI плагина + manifest.json при сборке).
Необязательное переопределение только для MCP: FIGMA_AGENT_MCP_PORT (должно совпадать с портом, встроенным в плагин).
Сериализация (MessagePack)
Кадры WebSocket моста и тела leader↔follower POST /rpc используют MessagePack (application/msgpack) через msgpackr с useRecords: false.
Почему MsgPack
- Скриншоты PNG передаются как MsgPack
bin(Uint8Array/Buffer) — без base64 (~33% накладных расходов на размер) - Большие деревья узлов упаковываются плотнее, чем JSON
- Те же логические формы сообщений; бинарным является только формат обмена
Полезная нагрузка скриншота
Плагин → MCP:
save_screenshotsнапрямую записывает буферыdataна диск (с необязательным сжатием)get_screenshotпреобразуетdataв base64 для текстового вывода, доступного агенту
Роли
Если leader завершается, follower пытается его заменить.
WebSocket плагина
Подключение
fileKeyобязателен (figma.fileKeyили локальный резервный вариант для несохранённых файлов).- Один активный сокет для каждого
fileKey(новое подключение заменяет старое). - Клиенты должны задавать
binaryType = "arraybuffer".
Heartbeat
Leader примерно каждые 30 с отправляет управляющий объект MsgPack:
Плагин отвечает:
В этих кадрах нет requestId, и их нельзя обрабатывать как RPC инструмента.
Пропуск двух циклов heartbeat → leader закрывает соединение с 4002 heartbeat timeout.
Интересующие коды закрытия: 4000 отсутствует fileKey, 4001 заменено более новым соединением, 4002 тайм-аут heartbeat.
Запрос (MCP → плагин)
UI передаёт его в главный поток как server-request.
Ответ (плагин → MCP)
Ошибка:
На стороне MCP тайм-аут запросов составляет 180 секунд.
HTTP (followers / здоровье)
GET /ping
GET /files
POST /rpc
Тело (MsgPack от):
Ответ: MsgPack от { ok: true, data } или { ok: false, error }.
Маршрутизация файлов
Когда подключены плагины нескольких файлов Figma, передавайте fileKey в аргументах инструмента, чтобы leader выбрал правильный WebSocket. list_files возвращает текущую карту.
Примечания по стабильности
- Не записывайте трафик протокола MCP в stdout (он зарезервирован для stdio MCP).
- Предпочтите Figma Desktop; вкладки браузера могут перейти в сон и разорвать сокет.
- По возможности сохраните файл, чтобы
fileKeyоставался стабильным. - Обновляйте плагин и MCP вместе — в пути моста необходим бинарный MsgPack.
