
melta UI
io.github.tsubotaxPublished by GitHub account tsubotaxv1.9.1Updated Oct 25, 2026
AI-Ready design system MCP: melta UI tokens, component contracts, 107 rules, check_html self-verify
Overview
A local MCP server that gives an assistant melta UI design tokens, component contracts and 107 rules, plus HTML lint tools to check generated UI against them.
- What you can do
- Look up design tokens by path and fetch component specifications including variants, sizes, states and accessibility notes. Read the full set of 107 prohibition rules, filtered by category, and search tokens, components and rules by keyword. Check a class string or a whole HTML/JSX snippet for forbidden patterns and get rule IDs, reasons and suggested alternatives. Read the design constitution and token, component and rule resources as reference material.
- When to use it
- Useful when an AI coding agent generates or edits Tailwind-based web UI and you want it to consult a fixed design contract and self-check its output before you review it. Less useful if you want a ready-made component library to install, or if your styling does not appear as classes and attributes in the markup.
- Requirements
- Runs as a local stdio process via npx from the npm package melta-ds-mcp; Node.js 22 or newer. An MCP client that supports stdio. Styling is assumed to be Tailwind class based. No accounts, API keys or environment variables are declared.
Installation
In SourceWeft
- Open melta UI in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
melta UI
AI 向けデザインガイドラインを、違反を止める実行可能な契約へ。
🇬🇧 English: README.en.md · Showcase: https://melta.tsubotax.com (ドキュメント・契約の正本はこのリポジトリ)
AI にガイドラインを読ませることはできる。守るかどうかは AI 任せになる。melta UI は、その「任せ」を機械に置き換える。生成の前(MCP で契約を参照させる)・直後(lint / hook が違反を突き返す)・マージ前(CI が止める)・その後(drift 検査がドキュメントと実装の腐りを検知し続ける)の 4 点で機械が関与する。読ませるだけでなく、守らせる。
境界: melta UI は完成済みの CSS コンポーネント集ではない。配るのは値(tokens)・規則(rules)・仕様(contracts)・検証器(lint / MCP)で、import して貼れば動く UI ライブラリではない。web の実装は HTML + Tailwind クラスの参照実装として同梱している。
誰のためのものか
向いている
- AI コーディングエージェント(Claude Code / Cursor / Codex 等)で UI を生成・運用しているチーム
- 「ガイドラインは書いたのに守られない」を仕組みで潰したい個人・少人数チーム
- web と React Native で 1 つのデザイン契約を共有したいプロダクト
向いていない
- 完成済みの Web コンポーネント集(React コンポーネントを install してすぐ使いたい)が欲しい場合
- Tailwind / class ベース以外のスタイリング(CSS-in-JS の props 経由など)が主体で、スタイルがマークアップに現れない場合。静的 lint が効かない
Proof — 主張には検証経路をつける
- 107 禁止ルールのうち 49 / 107 を静的に自動検出。残りも「なぜ自動検出しないか」を
automationStatusで分類・可視化する(rules.json / 内訳は制約と正直な範囲) - Playwright + axe-core 372 tests が CI 必須ゲート(.github/workflows/design-check.yml / 実行履歴)
- 5 種の代表的リセット CSS 環境で VRT 差分ピクセル 0。pixelmatch の literal 比較で機械検証(tests/reset-vrt.spec.ts、
npm run test:reset-vrt) - npm 3 パッケージ + MCP Registry で配布(melta-contracts / melta-ds-mcp / melta-app、Registry ID
io.github.tsubotax/melta-ui) - 別リポジトリの React Native 実装が同じ契約を購読し、契約の破壊的変更は APP 側が契約バージョンを取り込んだ時点で consumer テストが検出する(melta-app / npm 公開版との互換は
npm run design:compatが publish 前に検査) - 外部プロジェクトで「AI が違反を書く → 即検出 → 自己修正」ループを実測(2026-08、非公開 RN アプリへ npm 経由で導入。melta-app README の成熟度・メンテナンス節)
- drift 検査自身に負のテストがある(わざと壊して発火することを固定:tests/drift-heal.spec.ts)
配布物 — いま install できるもの
melta-ds-mcp自体の bare import(import "melta-ds-mcp")は非サポート。entry は import しただけで stdio サーバーが起動する CLI なので、npx melta-ds-mcpか subpath 経由で使う。entry 規約・deep import 互換・パッケージ分割の予定は docs/distribution.md。
自分のデザインシステムで検査したい場合(BYO-DS):
melta-ds-mcpは起動時に読み込むアセット root を自分の DS bundle へ切り替えられる(melta のルールとは混在しない)。4 ファイルの最小構成から始める手順と限界は docs/distribution.md の BYO-DS 節。
前提条件・互換性
5 分クイックスタート
経路 A — npm(MCP サーバー、推奨)
clone せずに、契約参照と自己検証だけを既存プロジェクトへ足す経路。
成功判定 — claude mcp list にこの行が出る:
接続時に MCP instructions が渡るので、「melta は完成 CSS ライブラリではない」「先に melta://design-constitution を読む」「生成後は check_html で自己検証する」を利用側が毎回プロンプトに書く必要はない。あとは UI を指示するだけ:
ユーザー一覧のテーブルを作って
成功判定 — AI が生成 HTML を check_html に通し、この形の応答を得る(違反があれば修正して再検証する):
生成された HTML をブラウザで表示するには Tailwind と melta のトークン設定が要る。プロトタイプなら CDN でよい:
経路 B — clone(フルハーネス)
hook / CI / lint CLI まで含めた強制層が要る場合。npm install した消費者にはこの 3 層は届かない(制約と正直な範囲)。
npm install で有効になるもの: .mcp.json(Claude Code へ MCP 自動接続)/ .cursor/mcp.json(Cursor 向けに同じ MCP サーバーの設定を同梱。有効化は Cursor 側の操作に従う。作業指示は AGENTS.md を読ませ、.cursor/rules/melta-ui.mdc は所在ポインタだけを置く)/ .claude/settings.json の PostToolUse hook / lint CLI。
成功判定 1 — 違反ファイルに lint CLI をかけると exit 1 で落ちる:
成功判定 2 — Claude Code が .html / .tsx / .jsx / .vue を Write / Edit した直後、hook がこの JSON を返して修正ループに乗せる(warn のみなら additionalContext で助言注入):
仕組み — 契約・参照・検証・監視の 4 層
MCP が公開するツール:
Resource は melta://design-constitution(DESIGN.md 全文)/ melta://tokens / melta://components / melta://components/{id} / melta://rules / melta://rules/auto-detectable。
web の実装対象は 28 コンポーネント + 13 ファウンデーション + 5 パターン。設計原則は Content First / WCAG 2.1 AA / Semantic Color / 3-Color Rule / 4px Grid / Minimal Elevation / No AI-ish Decoration の 7 つ(DESIGN.md)。
Web と APP — 1 つの契約が両方に降りる
同じ契約パッケージ(melta-contracts)を web(このリポジトリ / HTML + Tailwind)と APP(melta-app / React Native)の両実装が購読する。トークンを各実装にコピーして持つ経路は存在しない(二重化の物理防止)。
契約は規範と具象の 2 層。規範(components/*.contract.json)は variant の語彙・states・tokenRefs・a11y で、全プラットフォーム共通。分岐が正当な箇所(hover→pressed、elevation の表現差、タッチターゲット 44pt 等)は platformSemantics で意味論だけを宣言する。具象(recipes/)は web が契約の Tailwind からの導出ミラー(鮮度を CI が担保)、app が RN の styleRefs(色は 100% token 参照)を手書きする authoring source。
守らせる仕組みも双方向:
- web 側 → 互換ゲート(
npm run design:compat): npm 公開版と HEAD の golden diff。token 削除・variant 削除・rule の意味変更を breaking 分類し、semver bump を機械強制する - APP 側 → consumer テスト: melta-app の CI が「契約 subset・token 実在・contractVersion 同期」を照合する。web 側が契約を壊すと APP のテストが赤くなる
melta-app は消費者プロジェクト向けの eslint plugin も npm で配っており、使う側のコードで生値の直書きが止まる。RN カタログの live showcase は https://app.melta.tsubotax.com。
制約と正直な範囲
49 / 107 の意味。「107 禁止ルールを強制する」とは言えない。静的に自動検出できるのは 49 件で、残りは検証経路を automationStatus で分類して可視化している(宣言だけのルールをゼロにするための棚卸し)。
この表は npm run design:coverage が contracts から生成し、鮮度を npm run design:drift が守る。数字は改善のたびに動く。各ルールの状態の SSOT は rules.json の automationStatus。
その他の制約:
- clone 経路と npm 経路で届く層が違う。PostToolUse hook と CI workflow は「このリポジトリを clone して使う」前提の層で、
npm installした消費者には届かない。npm 経路の強制層はmelta-ds-mcp/lint(composition 込み。check_html/ CI / hook と同じ判定)、それを CLI にしたmelta-lint、MCP のcheck_htmlの 3 つで、これを各プロジェクトのフック / CI に自前で組み込む - class ベースでないスタイリングは検査できない。スタイルがマークアップ(class / 属性)に現れないコードでは静的 lint が空振りする
- JSX の composition lint は未対応。ネスト構造・a11y DOM の検査は HTML のみ。JSX は class / 属性 lint まで
- BYO-DS はデータ差し替えのみ。自分の DS のトークン・ルールを JSON で書けば同じエンジンで検査できるが、component metadata の生成ツールは npm に未同梱で、detector は 6 種固定(
manualは自動検査しない宣言)。新しい検査ロジックはエンジン側の変更が要る check_html.passedは完成承認ではない。lint-clean draft であってブランド適合の判定ではなく、最終判断は人間に渡す
セキュリティ・データ境界
MCP サーバーも lint エンジンもローカルプロセスで完結する。生成コード・プロンプト・検査結果を外部へ送信する経路はなく、telemetry も持たない。ネットワークに出るのは npx によるパッケージ取得と、npm run design:compat / npm run check:pack / npm run check:registry が npm registry や MCP Registry の公開バージョンを照会するときだけ。
成熟度とメンテナンス
- 個人メンテナンスの OSS(tsubotax)。SLA も専任チームもない。実運用の dogfood(web showcase / RN アプリ)で回している
- 0.x / 1.x の方針: 契約パッケージ
melta-contractsは 0.x で、破壊的変更は minor bump で入りうる。ただし破壊的変更の分類は人手ではなくnpm run design:compatの機械判定で、semver bump を強制する - 変更の通知経路は CHANGELOG.md。リリースごとに Added / Changed / Removed を残す
- バグ・要望は GitHub Issues へ。手を動かすなら CONTRIBUTING.md(ローカル CI ミラー・生成物の扱い・PR 前チェックリスト)
- 脆弱性は issue ではなく SECURITY.md の非公開経路(GitHub private vulnerability reporting)へ。セキュリティ修正は各パッケージの最新 minor にのみ提供する
もっと知る
License
MIT License — LICENSE。同梱アイコンのライセンスは THIRD_PARTY_LICENSES.md を参照。
Acknowledgments: Charcoal Icons(pixiv Inc., Apache License 2.0)/ Lucide Icons(ISC License)/ Tailwind CSS
Source: README.md at commit 11d5875
Tools
0Version history
4- v1.9.1LatestOct 10, 2026
- v1.9.0Oct 10, 2026
- v1.8.0Oct 9, 2026
- v1.3.0Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts