streamable-httpupdated 1mo ago
Give your AI agent a visual system to build against โ so it writes brand-consistent styles instead of guessing colors, radii, spacing, and type.
What can you do with validator?
Swatchdog MCP Server
Give your AI agent a visual system to build against โ so it writes brand-consistent styles instead of guessing colors, radii, spacing, and type.
โ Now in the Anthropic Connector Directory. In Claude, open Settings โ Connectors, search swatchdog, and click Connect โ no URL, no key, no setup.
See it in action
- Live claude.ai run: connector session walkthrough โ
- Full test transcript (all green): part-b-transcript.txt โ
https://github.com/user-attachments/assets/6ae8b242-d6c7-4a29-8892-27b067835308
What it is
Swatchdog is a Model Context Protocol (MCP) server that runs on-demand design-token drift checks for AI coding assistants โ Claude Code, Claude Desktop, Cursor, Google Antigravity, other MCP clients, and claude.ai via the connector.
When your agent asks, Swatchdog checks the generated CSS against a design system โ a curated pack or your own tokens โ and returns every off-token color, radius, spacing, and type value, each with the closest matching token to use instead. The check is on-demand and the loop is yours: Swatchdog reports drift; it never intercepts writes or changes your code.
Why Swatchdog
AI agents are fast but blind to your design system โ they invent off-brand spacing, off-palette colors, and quietly ignore your scales. Swatchdog adds a deterministic drift check to the build loop:
- The agent sets a standard โ your own tokens, or a pack.
- It calls Swatchdog on the CSS it generated.
- Swatchdog returns precise fixes (e.g. "use
radius.sm(5px) instead of 7px"). - The agent applies them. The loop, and the review, stay yours.
How is it different from a linter like ESLint?
A linter checks whether your code is valid; Swatchdog checks whether your design is on-system. A linter happily passes color: #ff00ff because it's valid CSS โ it has no idea magenta isn't in your palette. Swatchdog catches exactly that, even when the code is flawless. Lint catches broken code; Swatchdog catches broken design.
Can't I just give my agent the tokens, or a design.md?
You can, and it'll still drift. Agents approximate and interpolate even with the rules right in front of them โ having the rules isn't the same as following them. Swatchdog verifies conformance in the build loop, where the drift actually happens.
Modes
Pack mode โ check against a curated Swatchdog family (Workbench, Showcase, Terminal, plus the free Studio sandbox). Zero-config.
BYO mode โ check against your own design system. The agent extracts your tokens (from tailwind.config.js, CSS variables, etc.) and passes them as parameters. Content-only and stateless โ your code and tokens are never stored. Free to try on the keyless connector lane, or uncapped with a $12 license.
Intelligent suggestions โ Swatchdog doesn't just flag drift, it maps each off-token value to the nearest valid token: color (hex/rgb โ nearest theme color), radius, spacing, font-size, and font-family.
Coverage note: checks currently cover hex and standard color formats. HSL-channel representation and complex multi-file token resolution are on the Phase 2 roadmap.
Tools
check_design_drift โ connector endpoint ยท BYO-only ยท keyless-friendly
reference_tokens(object, required) โ your design tokens, e.g.{"color":{"primary":"#b06ed0"},"radius":{"md":"6px"}}code(string, required) โ the CSS/markup to check- Returns, per violation: axis ยท found value ยท expected token + value ยท location
check_drift โ main endpoint ยท checks CSS against a pack or a custom token set
content(string, required) โ the CSS/markup to checkpaletteId(string, optional) โ a pack id (e.g.studio-blue-hour); pack modetokens(object, optional) โ your own token set; BYO modesource(string, optional) โ telemetry tag (pack,css,tailwind)
Pricing โ one-time, no subscriptions
| Tier | What you get | Where |
|---|---|---|
| Free โ keyless | BYO checks on a shared, rate-capped lane | connector endpoint |
Free โ sandbox key swt_sandbox_studio |
pack checks vs the Studio family | main endpoint |
| $12 โ drift-check license | BYO checks, your own uncapped key | both endpoints |
| $19 / $49 โ pack or bundle | premium families (Workbench ยท Showcase ยท Terminal) + a paid key | both endpoints |
On the main endpoint, a free caller attempting a premium or BYO check gets a structured upgrade payload pointing to swatchdog.dev.
Connect
In Claude (easiest): Settings โ Connectors โ find swatchdog in the directory โ Connect. Nothing to paste, no key.
Other MCP clients (Cursor, Claude Code, Claude Desktop) โ add one of these to your MCP config:
Connector endpoint โ BYO-only, keyless (add a key to remove the rate cap):
{
"mcpServers": {
"swatchdog-check": {
"type": "http",
"url": "https://swatchdog-connector-970396648818.us-central1.run.app/mcp"
}
}
}
Main endpoint โ packs + BYO, bearer key (free sandbox key shown):
{
"mcpServers": {
"swatchdog-sandbox": {
"type": "http",
"url": "https://swatchdog-mcp-970396648818.us-central1.run.app/mcp",
"headers": { "Authorization": "Bearer swt_sandbox_studio" }
}
}
}
Prefer to add the connector to claude.ai manually? Settings โ Connectors โ Add custom connector โ paste the connector URL above โ leave auth empty.
Privacy
All checks are on-demand and transient. No source code, files, or tokens are ever stored on our servers. We log only minimal usage metadata โ a source tag, which pack, and the finding count โ never your license key, your code, or your tokens. Full policy: swatchdog.dev/privacy.html.
Created and maintained by swatchdog.dev ยท Support: hey@swatchdog.dev ยท A Ziola Project
Install
Add validator to your client. Pick the one you use.
claude mcp add --transport http validator https://swatchdog-mcp-970396648818.us-central1.run.app/mcpcodex mcp add validator --url https://swatchdog-mcp-970396648818.us-central1.run.app/mcp{
"mcpServers": {
"validator": {
"url": "https://swatchdog-mcp-970396648818.us-central1.run.app/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"validator": {
"type": "http",
"url": "https://swatchdog-mcp-970396648818.us-central1.run.app/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"validator": {
"url": "https://swatchdog-mcp-970396648818.us-central1.run.app/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"validator": {
"serverUrl": "https://swatchdog-mcp-970396648818.us-central1.run.app/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
2 tools
validator exposes 2 tools to a connected agent.
- reference_tokens
- *(object, required)* โ your design tokens, e.g. `{"color":{"primary":"#b06ed0"},"radius":{"md":"6px"}}`
- paletteId
- *(string, optional)* โ a pack id (e.g. `studio-blue-hour`); pack mode
Score
63 / 100
Good
- Documentation25/25
- Maintenance16/25
- Trust6/20
- Capability4/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 50 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 2 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 1.0.1Latest | Jun 11, 2026 |
| 1.0.0 | Jun 8, 2026 |