token-reconciler-mcp
Ваша дизайн-система говорит одно. Продукт выпускает другое. Этот инструмент покажет, где именно.
npx token-reconciler ./design-tokens.json https://yourproduct.comПередайте ему любые два источника — экспорт из дизайн-инструмента (Figma, Sketch, Penpot, Tokens Studio…), URL живого сайта или веб-приложения, файл токенов из кодовой базы — и он выведет настоящий отчёт о расхождениях. URL сайтов сканируются вживую (извлечение делегируется опенсорсному экстрактору Dembrandt), так что настраивать нечего и ничего не подготавливается: отчёт — это ваша реальная дизайн-система в её текущем виде.
Без аргументов? npx token-reconciler запускает интерактивный мастер, который проведёт вас по шагам.
Проблема
Дизайн-система никогда не живёт в одном месте. Есть файл Figma, опубликованный CSS и кодовая база — три копии одних и тех же решений. Со временем они тихо перестают совпадать: разработчик захардкодил синий из Tailwind вместо фирменного индиго, в Figma появился новый серый, который никогда не попадает в продукт, заголовок выходит за 700, хотя типографическая шкала говорит 600. Ни один инструмент этого не замечает, потому что каждый видит только свою копию.
К 2026 году сторона извлечения уже решена — хорошие опенсорсные инструменты вытаскивают токены с живых сайтов, а Figma экспортирует Variables — и все они говорят на одном формате DTCG (стандарте W3C Design Tokens Community Group: единая согласованная JSON-структура для дизайн-токенов, благодаря которой каждый инструмент может читать вывод любого другого). Чего не хватало — следующего шага: сравнивать эти файлы и понимать, какие различия важны. Именно это и делает инструмент.
Related MCP server: Figma MCP Server by Bao To
Что вы получаете
Запуск сравнения формирует отчёт из трёх разделов:
Конфликты — один и тот же токен определён по-разному в двух источниках, отсортированы по оценке уверенности от 0 до 1, отражающей, насколько различие существенно. Оценка учитывает тип: цвета сравниваются перцептуально (OKLab), а не как строки — поэтому
#FFFFFFпротивrgb(255,255,255)— это не конфликт, а два серых, различающихся на один оттенок, — конфликт. Размеры и длительности нормализуются по единицам (1rem=16px,0.3s=300ms), а алиасы DTCG разрешаются перед сравнением, так что{color.base.indigo.500}и его сырое значение согласуются.Несопоставленные токены — спроектированы, но не попали в продукт, либо попали, но не были спроектированы. Пока не конфликты; обычно именно здесь зреет следующий.
Предлагаемое разрешение каждого конфликта — от намеренно простого резолвера по умолчанию (
mostRecentWins) с указанием обоснования. Более умное разрешение подключается.Анализ доступности: текущий и следующий стандарт — цветовые токены с ролью текста сопоставляются с токенами с ролью фона и проверяются на WCAG 2.2 AA (4.5:1 — текущий стандарт W3C, тот уровень, к которому привязываются требования EU EAA / ADA), плюс по каждой паре даётся уровень AAA и информативный показатель APCA (черновой алгоритм WCAG 3.0). Уникальность в том, что этот инструмент видит несколько источников и может сказать, когда расхождение изменило доступность — одна и та же пара проходит AA в Figma, но не проходит на опубликованном сайте. Обычный аудит такого не скажет, а сверщик — может.
Вот фрагмент реального запуска (два продакшен-сайта, отсканированы вживую):
### typography.style.text-heading-1
Confidence: 0.97 🔴 · type: typography
| Source | Value |
|---------------|----------------------------------------------------------|
| wildchild.ai | { fontFamily: Geist, fontSize: 48px, fontWeight: 400 … } |
| humano.ai | { fontFamily: Inter, fontSize: 12px, fontWeight: 700 … } |
### color.palette.palette-3
Confidence: 0.94 🔴 · type: color
| wildchild.ai | #7a7a7a |
| humano.ai | #888888 |Как использовать
Сравните дизайн-систему с продуктом (основной сценарий):
Экспортируйте токены дизайн-системы в DTCG JSON из любого инструмента, где они хранятся, — Figma (плагины сообщества вроде "Design Tokens (W3C)" или DesignBridge), Penpot (нативный экспорт DTCG), Sketch или Tokens Studio.
Запустите:
npx token-reconciler ./design-tokens.json https://yourproduct.comСравните любые два источника — каждый аргумент может быть путём к .json-файлу, URL файла токенов или URL сайта для сканирования:
npx token-reconciler https://yoursite.com https://staging.yoursite.com
npx token-reconciler design-system.tokens.json codebase-scan.tokens.jsonИнтерактивный режим — если не знаете, с чего начать:
npx token-reconcilerВ CI — код возврата служит шлюзом проверки на расхождения (0 — чисто, 1 — конфликты с высокой уверенностью, 2 — ошибка входных данных):
npx token-reconciler reconcile figma.tokens.json site.tokens.json --threshold 0.7 --out report.mdПолезные флаги: --json (отчёт в JSON), --out <file>, --names a,b, --kinds figma-variables,live-site, --threshold <0..1>, --no-fail. Полную настройку GitHub Actions см. в examples/ci-usage.md, а разобранный пример — в examples/dembrandt-vs-figma.md.
Не только маркетинговые сайты: SaaS, веб-приложения и мобильные приложения
Дизайн-системы живут в основном в продуктах, а не на публичных сайтах. Продукт любого типа подключается — просто отличается источник:
SaaS и веб-приложения с входом. Это по-прежнему веб — сканеру просто нужна ваша сессия. Возьмите cookie из инструментов разработчика браузера (Application → Cookies) и передайте его:
npx token-reconciler ./design-tokens.json https://app.yourproduct.com --cookie "session=abc123"--header "Authorization: Bearer …" тоже работает для приложений с аутентификацией по токену. Сканируйте нужные экраны, указывая их URL напрямую.
Мобильные приложения (iOS / Android / React Native / Flutter). URL сканировать не нужно — но дизайн-токены мобильного приложения живут в его кодовой базе, что даже лучше сканирования: темы Android Compose/XML, каталоги ресурсов iOS, файлы тем React Native. Если вы используете Style Dictionary или Tokens Studio, ваш исходный JSON токенов уже совместим с DTCG — передавайте его напрямую:
npx token-reconciler ./design-tokens.json ./mobile-app/tokens/theme.tokens.jsonПодход «кодовая база как источник» — также самый точный для веб-приложений, если вы предпочитаете сравнивать задуманные токены кода, а не отсканированные вычисленные стили.
Все три сразу. Инструмент принимает 2+ источника — так что один запуск может ответить на вопрос: «Figma, веб-приложение и мобильная тема согласованы?»
npx token-reconciler design-tokens.json https://app.yourproduct.com android/tokens.jsonИспользование из AI-агента (MCP)
claude mcp add token-reconciler -- npx -y token-reconciler-mcpТри инструмента: reconcile(sources) запускает сравнение и возвращает отчёт с оценками; get_conflicts(runId) получает прошлый запуск; explain_conflict(runId, tokenPath) полностью разбирает один конфликт — сырые и разрешённые значения по каждому источнику, цепочки алиасов и каждый фактор уверенности с его весом и обоснованием. Естественно сочетается с MCP-серверами экстракторов: агент может отсканировать сайт с помощью Dembrandt и сверить его с экспортом из Figma в одном диалоге.
Использование в качестве библиотеки
import { reconcileSources } from "token-reconciler";
const report = await reconcileSources([
{ name: "Design system", kind: "design-tool", document: "./design.tokens.json" },
{ name: "Live site", kind: "live-site", document: "./site.tokens.json" },
]);
for (const conflict of report.conflicts) {
console.log(conflict.path, conflict.confidence.score, conflict.confidence.factors);
}document принимает путь к файлу, URL http(s) или уже разобранный DTCG-объект. Если в источнике есть временная метка извлечения в $extensions (как у Dembrandt), она подхватывается автоматически.
Как работает оценка уверенности
Оценка каждого конфликта строится из трёх документированных факторов — полная разбивка включается в каждый отчёт, а не остаётся чёрным ящиком:
Фактор | Вес | Что он измеряет |
| 0.6 | Расстояние с учётом типа. Перцептуальное (OKLab) для цветов, относительное числовое для размеров и длительностей, усреднённое по полям для составных значений. Дельта в среднем диапазоне набирает больше всего баллов — крошечные дельты обычно шум округления, огромные часто означают, что два разных токена делят одно имя. |
| 0.25 | Один и тот же путь токена существует в обоих источниках. |
| 0.15 | Оба источника согласны по |
Оценка по замыслу упирается в потолок около 0.97: это эвристика, а эвристика, претендующая на 1.00, врала бы.
Подключение собственного резолвера
Обнаружение конфликтов — задача библиотеки; выбор победителя подключается. В комплекте идёт один намеренно простой резолвер (mostRecentWins — побеждает самое свежее извлечение; без временных меток воздерживается). Свой резолвер — это одна функция:
import type { Resolver } from "token-reconciler";
const designWins: Resolver = (conflict) => {
const design = conflict.sightings.find((s) => s.sourceKind === "design-tool");
if (!design) return { decision: "unresolved", reasoning: "no design-tool source" };
return {
decision: "resolved",
winner: design.sourceName,
value: design.token.resolvedValue,
reasoning: "design file is the declared source of truth",
};
};Каждое разрешение всегда несёт строку reasoning. Происхождение данных — в этом суть.
Границы — что инструмент намеренно не делает
Нет собственного движка извлечения. Сканирование сайтов делегируется Dembrandt; экспорт из Figma — дело плагинов Figma. Инструмент начинается там, где заканчиваются экстракторы.
Никакой выдуманной схемы. Стандартный DTCG на входе, стандартные концепции DTCG на выходе.
Никакого притворного суждения. Резолвер по умолчанию честно признаёт свою ограниченность. Настоящее суждение — знание замысла вашей системы — это отдельный продукт.
Отлично сочетается с
Dembrandt — живой сайт → DTCG-токены; обеспечивает сканирование URL в этом инструменте.
designlang — живой сайт → токены + layout + данные a11y (GitHub).
uiscanner — URL → разбор токенов через MCP.
DesignBridge — дизайн-система Figma → структурированные
DESIGN.md+ токены.W3C DTCG format — формат обмена, который делает всё это компонуемым.
Разработка
npm install
npm run build # tsc → dist/
npm test # vitest — includes an end-to-end MCP client/server testЛицензия
Apache-2.0. Используйте, форкайте, стройте на нём продукты.
Разработано wildchild.ai
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
- AlicenseAqualityAmaintenanceDesign contract layer for AI agents. Scans Figma, code, Storybook, and token files, reconciles conflicts, and serves a single machine-readable source of truth so every agent gets the same authoritative design rules before it builds. Local-first.637119Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to extract design systems, analyze components, and maintain design-code consistency from Figma files, providing intelligent component analysis and accessibility compliance.12430MIT
- AlicenseNot gradedqualityBmaintenanceBridges AI assistants with Figma for design system extraction, bidirectional token sync, visual debugging, and design creation.1861MIT
- AlicenseAqualityCmaintenanceManages design tokens (colors, spacing, fonts) in a JSON file and enables agents to read, write, export, and detect drift between tokens and CSS via MCP.5MIT
Related MCP Connectors
On-demand drift checks: declared CSS color, radius, spacing & type vs your own tokens or a pack
UI design from prompts, screenshots, and URLs for AI coding agents and theme tokens.
52 paid x402 API endpoints for AI agents — crypto, data, DeFi, market intelligence.
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/humano-ai/token-reconciler'
If you have feedback or need assistance with the MCP directory API, please join our Discord server