Designesy
Designesy is a deterministic design-quality server that scores URLs, token files, and animations against a published design contract, then adds drift, AI-readiness, comparison, monitoring, and reporting capabilities.
Score any live URL against the 45-check design contract (numeric score, A–F grade, per-check breakdown) in JSON, canonical, markdown, or Google-compatible formats
Validate DTCG design-token files with 10 conformance checks against W3C DTCG 2025.10
Validate Lottie animations with 10 checks from Lottie spec v1.0.1 and the Ten Non-Negotiable Motion Standards
Get a WCAG 2.2 AA accessibility kit: 11 checks plus a ready-to-run Playwright/axe-core script template
Fetch the design-system contract (tokens, motion, acoustic, takt, cadence, typography, components, verification), whole or by named sections
Get the 8-dimension qualitative design review rubric
Retrieve published documents: SKILL.md agent-skill export, agent.json discovery manifest, llms.txt and llms-full.txt briefs
List published packages with versions, URLs, and statuses
Score UI drift with 12 checks covering token fabrication, within-session drift, between-session amnesia, and silent breaking changes
Score AI readiness with 10 probes for machine-readable artifacts (tokens, llms.txt, agent.json, MCP endpoint, DESIGN.md, and more)
Generate a build-contract bundle of 6 files (DTCG tokens, Stylelint config, AGENTS.md rules, component contract, anti-patterns, DESIGN.md), optionally trimmed by part
Monitor drift over time: rerun drift checks, compute 10 monitor checks against history, and optionally email drift alerts
Compare two design systems by URL: added/removed/renamed/changed tokens, scale and contrast drift, structure delta, and score delta
Produce a composite report per URL (score × 0.5 + drift × 0.3 + readiness × 0.2) with an interactive MCP Apps dashboard
All tools are read-only and idempotent except
designesy_monitor_score, which can send an alert email
Provides a GitHub Action that scores a target URL against the 42-check design-system contract and fails the CI workflow when the score or grade drops below configured thresholds, posting summary comments on pull requests via the GitHub REST API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DesignesyScore https://example.com for design compliance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Designesy
Design quality gate for AI-generated UI: score any URL on 45 deterministic checks, A–F grade. Live at designesy.org.
Quick Start
Score any URL in 5 seconds — no install:
npx @designesy/score@latest https://your-site.comAdd to Claude Desktop, Cursor, or any MCP client:
# Claude Code, remote (zero install, no auth):
claude mcp add --transport http designesy https://www.designesy.org/api/mcp
# Or local stdio via PyPI:
pip install designesy-mcp && designesy-mcpClone this repo? The .mcp.json at root adds the local server (uvx designesy-mcp) to Claude Code as a project server. Claude Code asks you to approve it the first time you open the project. It needs uv.
Gate your CI on design-contract compliance:
- uses: LE-VAI/designesy-org@v1
with:
url: https://your-app.vercel.app
min-score: 70
min-grade: C
post-comment: true # posts a summary comment on PRs (default)The same 45-check engine powers an MCP server (17 tools for AI agents), a CLI with no required dependencies (npx @designesy/score), a GitHub Action, and a live leaderboard at designesy.org/leaderboard.
Designesy Contract Check is a GitHub Action that scores any URL against a 45-check design-system contract (tokens, motion, accessibility, cadence, takt, poise, identity, interaction, performance, responsive, semantic, security, spec, copywriting) and fails your CI workflow when the score or grade drops below your threshold. No LLM in the loop: every check is a published, deterministic rule, so the same page gives the same verdicts.
Related MCP server: art-director-mcp
Tools
designesy_score— Score a live URL against the 45-check design contract. Returns score, grade (A–F), and per-check breakdown.designesy_tokens_score— Validate a DTCG design-token file. 10 conformance checks against W3C DTCG 2025.10.designesy_a11y_score— Get the WCAG 2.2 AA accessibility framework and Playwright/axe-core script template.designesy_motion_score— Validate a Lottie animation file. 10 checks against Lottie spec v1.0.1 and §16 motion standards.designesy_contract— Get the design-system contract (tokens, motion, takt, cadence, typography, verification), whole or only the top-levelsectionsyou name.designesy_catalog— List the published Designesy packages with versions and URLs (the count comes back inpackage_count).designesy_design_review— Get the 8-dimension qualitative design review rubric.designesy_skill_md— Get the contract as an agent-skill-format SKILL.md for Cursor, Claude Code, or Replit.designesy_agent_json— Get the /.well-known/agent.json discovery document.designesy_llms_txt— Get the short /llms.txt agent brief.designesy_llms_full_txt— Get the full /llms-full.txt brief as reference data (its ingest steps and paste-ready agent prompt stay in the published file).designesy_drift_score— Score a live URL for UI drift: 12 checks on its custom properties and var() references.designesy_readiness_score— Score a URL for AI readiness: 10 probes for machine-readable design artifacts (DTCG tokens, llms.txt, agent.json, an MCP endpoint, DESIGN.md and more).designesy_guardrails— Generate a build-contract bundle for coding agents from a site's tokens: DTCG tokens, Stylelint config, AGENTS.md rules, component contract, anti-patterns and DESIGN.md.designesy_monitor_score— Re-run the drift checks against earlier snapshots and compute 10 monitor checks; can send a drift-alert email to an address you pass.designesy_compare— Diff the tokens of two live URLs: added, removed, renamed, changed values, scale and contrast drift, and the score delta.designesy_report— One composite report for a URL (score × 0.5 + drift × 0.3 + readiness × 0.2), with an interactive dashboard in hosts that support MCP Apps.
Tool reference table
Tool | Description |
| Score a live URL against the 45-check design contract — returns score, grade (A–F), per-check breakdown |
| Validate a DTCG design-token file (10 conformance checks, W3C DTCG 2025.10) |
| Get the WCAG 2.2 AA accessibility framework + Playwright/axe-core script template |
| Validate a Lottie animation file (10 checks, Lottie spec v1.0.1 + §16 motion standards) |
| Get the design-system contract (tokens, motion, takt, cadence, typography, verification), whole or only the top-level |
| List the published Designesy packages with versions and URLs |
| Get the 8-dimension qualitative design review rubric |
| Get the contract as an agent-skill-format SKILL.md (for Cursor/Claude Code/Replit) |
| Get the /.well-known/agent.json discovery document |
| Get the short /llms.txt agent brief |
| Get the full /llms-full.txt brief as reference data (its ingest steps and paste-ready agent prompt stay in the published file) |
| Score a live URL for UI drift (12 checks on custom properties and var() references) |
| Score a URL for AI readiness (10 probes for machine-readable design artifacts) |
| Generate a build-contract bundle for coding agents from a site's tokens (6 files) |
| Re-run drift checks against earlier snapshots; 10 monitor checks; optional drift-alert email |
| Diff the tokens of two live URLs, with the score delta |
| Composite report for one URL (score, drift, readiness), with an MCP App dashboard |
Live
Site: designesy.org
MCP endpoint: designesy.org/api/mcp (Streamable HTTP, no auth)
Score a site: designesy.org/score
Leaderboard: designesy.org/leaderboard — 30 sites scored
Methodology: designesy.org/methodology — full 45-check scoring methodology
Contract: designesy.org/contracts/design-system
Machine export: designesy.org/contracts/design-system.json
Contract verification
The live site is verified against the design system contract — 45 deterministic checks with provenance back to tokens. Both badges read the live leaderboard, which the weekly re-score refreshes, so the score here cannot drift from the engine; the per-check result is on the score page. See the methodology page for how the score is computed.
The contract
45 verification checks across 14 weighted categories — tokens, motion, accessibility, cadence, takt, poise, identity, interaction, performance, responsive, semantic, security, spec, copywriting
Copywriting principles (added in v0.4.0) — 16 UX copy principles + 4 verification checks (button verb phrases, no trailing periods, descriptive link text, no ALL CAPS)
10 Non-Negotiable Motion Standards — deliberate easing, explicit properties, opacity entrances, keyboard stillness, no layout animation, touch gating, bounded duration, reduced-motion paths, asymmetric press, no ease-in
10 acoustic cue tokens — custom
$type: sound(net-new vs W3C DTCG 2025.10), Cuelume 0.2 engine (MIT), interaction-only. The acoustic token document adds 9 extended feedback cues, 19 in all10 open tensions — documented, not hidden
Spring physics — default + momentum tokens via custom
$type: springMachine-readable — W3C DTCG 2025.10 format + custom extensions
See the contract page for the full adoption history.
GitHub Action
Gate your CI on design-contract compliance:
- uses: LE-VAI/designesy-org@v1
with:
url: https://your-app.vercel.app
min-score: 70
min-grade: C
post-comment: true # posts a summary comment on PRs (default)Scores a URL via the live /api/score engine and fails the workflow if the score or grade drops below your threshold. Runs on node24, posts PR comments via bare GitHub REST API (zero dependencies). See action/README.md for full usage.
CLI
Score a URL from the command line — for local development, pre-commit hooks, or scripts:
# No install needed:
npx @designesy/score designesy.org
# With gating (exit 1 on failure):
npx @designesy/score linear.app --min-score 70 --min-grade B
# JSON output for piping:
npx @designesy/score vercel.com --format canonical --jsonNo required dependencies. The engine runs locally, with no Designesy server; the checks that need a browser return MANUAL. See --help for all options and packages/score/README.md for the full reference.
From a clone of this repo: the engine's dist/ folder is not committed, so build it first.
npm --prefix packages/score ci
npm run build:score
node packages/score/dist/cli.js designesy.orgThe older cli/designesy-score.mjs (npm run score) reads the same build. It is superseded by @designesy/score. Its --api flag (or the SCORE_API env var) is an opt-in remote fallback that sends the URL to a scoring server instead of scoring locally; it is off by default.
Repository
The site is a Next.js 16 App Router app (React 19, webpack build), deployed on Vercel. The npm packages and the MCP server live beside it.
apps/site the site, its API routes (/api/score, /api/mcp) and its build checks (scripts/)
packages/score @designesy/score: the scoring engine and CLI (npm)
packages/cli @designesy/cli: one CLI for tokens and score (npm)
packages/tokens @designesy/tokens: DTCG token validator (npm)
packages/stylelint-plugin-dtcg-tokens @designesy/stylelint-plugin-dtcg-tokens (npm)
packages/lab-builder @designesy/lab-builder (npm)
packages/designesy-mcp designesy-mcp: the local stdio MCP server (PyPI)
packages/vai-icons, vai-motion @vai/icons and @vai/motion (not yet published)
action.yml, action/dist the Designesy Contract Check GitHub Action
cli/ designesy-score, the older CLI (superseded by @designesy/score)
scripts/ repo-level scripts
docs/designesy founding notes from May 2026: mission, architecture, contracts, labs
DESIGN.md operating principles and agent rules (v0.1)
AGENTS.md agent operating rulesContract mode, which scores a page against your own DESIGN.md or DTCG token file, is specified in docs/contract-mode-spec.md.
The design contract in DESIGN.md format is generated from the contract source and served at designesy.org/DESIGN.md. The root DESIGN.md file is the older v0.1 charter.
What Designesy is not
Designesy is not a template gallery. Designesy is not a generic AI design tool. Designesy is not a moodboard.
Designesy is a system.
Related tools
Lyse — 258-check design system health scoring from your codebase (6 axes). Designesy scores any public URL; Lyse scores your repo. Complementary.
axe-core — WCAG accessibility testing. Designesy checks design-contract compliance (tokens, motion, typography) — a different layer. They complement each other.
Lighthouse — Performance, accessibility, and SEO auditing. Designesy checks design-contract compliance — Lighthouse doesn't know what a design token is.
FAQ
Does it need an API key?
No. The MCP endpoint is stateless Streamable HTTP with no authentication. Sixteen of the 17 tools are read-only; designesy_monitor_score can send a drift-alert email to an address you pass.
Is it deterministic? Yes. There is no LLM in the scoring loop: every check is deterministic and reproducible. The same page, engine and contract always produce the same verdicts, and the receipt's digest lets anyone check that. A live URL can change between runs, and results are cached for 24 hours.
What does it score against? The current Designesy design-system contract — 45 checks across 14 weighted categories (tokens, motion, accessibility, cadence, takt, poise, identity, interaction, performance, responsive, semantic, security, spec, copywriting).
Can I use it in CI? Yes. The GitHub Action gates your workflow on contract compliance — fail the build if the score drops below your threshold.
Where is the contract published? At designesy.org/contracts/design-system (human-readable) and designesy.org/contracts/design-system.json (machine-readable, W3C DTCG 2025.10).
License
MIT — see LICENSE. The contract is public; the code is open-source under MIT.
Available Tools
17 toolsdesignesy_a11y_scoreGet WCAG audit kitARead-onlyIdempotentInspect
Get the Designesy WCAG 2.2 AA accessibility verification framework: 11 conformance checks (a01-a11) plus a ready-to-run Playwright + axe-core 4.13.0 script template targeting your URL. Use this to audit a site for accessibility violations. When NOT to use: for a full design-contract score (not just a11y), use designesy_score. Does NOT run the scan: axe-core needs a real browser DOM. Returns the 11 checks + a Playwright script you execute locally (npm i -D @axe-core/playwright). The score comes from your local run, not from this tool. Returns JSON: { checks[{id (a01-a11), name, status: "PENDING_EXECUTION"}], playwright_script, install_command, run_command }. Pass config (JSON string) to customize axe.configure(), for example with branding overrides or rule disables. Omit for standard WCAG 2.2 AA.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to scan for accessibility. The returned script template will target this URL. | |
| config | No | Brand customization JSON for axe.configure() - branding, checks, rules, disableOtherRules. | |
| ruleset | No | Ruleset tag (default: wcag22aa). Options: wcag2a, wcag2aa, wcag21aa, wcag22aa, best-practice. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint/idempotent/non-destructive) cover the safety profile and the description is fully consistent with them. Beyond that, it discloses the crucial non-obvious behavior: the tool returns PENDING_EXECUTION checks and a script rather than results, requires a real browser DOM, and needs a local npm install to complete the audit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long, but information-dense and front-loaded: purpose and the 11-check scope come first, then exclusions, then execution caveats, then return shape. A few parentheticals (axe-core version, npm command) could be trimmed, but nearly every sentence carries routing or behavioral value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with no output schema and no destructive surface, the description is complete: it spells out the return JSON shape, the PENDING_EXECUTION status semantics, the install/run commands, and the sibling tool to use instead. Nothing needed to call or interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains config's purpose (customizing axe.configure() via branding overrides or rule disables) and the default behavior when omitted ('Omit for standard WCAG 2.2 AA'). It does not discuss the ruleset parameter's tag options, which the schema already enumerates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: fetching the Designesy WCAG 2.2 AA verification framework with 11 checks (a01-a11) plus a Playwright + axe-core script template. It explicitly differentiates itself from the sibling designesy_score ('for a full design-contract score (not just a11y)'), so an agent can select it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('audit a site for accessibility violations') plus a named when-NOT-to-use case routed to designesy_score. It also clarifies the boundary that this tool does not execute the scan and that the score is produced by the caller's local run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_agent_jsonGet agent discovery documentARead-onlyIdempotentInspect
Get the Designesy agent discovery document (/.well-known/agent.json) as reference data: the org identity, authority, discovery endpoints, package index, machine exports, permission policy, contact, and citation templates. Use this when integrating with or enumerating Designesy and need the canonical discovery manifest rather than one specific contract. When NOT to use: for the package list, use designesy_catalog (lighter); for the contract, use designesy_contract. Read-only: no side effects. Returns JSON: { kind: "published_document", source_url, media_type: "application/json", note, omitted_fields[], document }, where document is the published object (schema, name, identity, authority, topics, discovery, ingest, packages, machine_exports, contact, permission, cite, and the rest) with any field written as steps for an AI agent (such as ingest.steps) removed and its path listed in omitted_fields. No parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, and the description reinforces 'Read-only: no side effects' without contradicting them. It adds a genuinely non-obvious behavioral trait: fields written as agent steps (e.g. ingest.steps) are stripped from the returned document and their paths reported in omitted_fields. That disclosure is beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage before any return detail, and the when-not-to-use clause is placed early where it is most useful. The long enumeration of document fields is verbose but largely earns its place because no output schema exists; a tighter summary of the return shape would read better.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return contract itself, naming the output object's fields (kind, source_url, media_type, note, omitted_fields, document) and the shape of the nested document. Combined with the sibling routing guidance, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the description states this explicitly ('No parameters'), which is the correct baseline for a parameterless tool. There is nothing further to disambiguate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource (get the /.well-known/agent.json discovery manifest) plus its scope (org identity, authority, endpoints, package index, policy, contact, citations). It explicitly contrasts itself with designesy_catalog and designesy_contract, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both a positive trigger ('when integrating with or enumerating Designesy and need the canonical discovery manifest rather than one specific contract') and an explicit negative trigger with named alternatives for the package list and the contract. Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_catalogList Designesy packagesARead-onlyIdempotentInspect
List the published Designesy packages with versions, URLs, and statuses. Use this to discover what Designesy publishes before fetching a specific contract. When NOT to use: if you already know which package you need, skip this and call designesy_contract directly. Read-only — no side effects. Returns JSON: { package_count, packages[{id, kind, title, version, status, human_url, machine_url}], standing_rules[], machine_exports[] }. No parameters — accepts empty input.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only — no side effects' largely restates structured data. However, because no output schema exists, the description's disclosure of the return shape (package_count, packages[], standing_rules[], machine_exports[]) adds real behavioral context an agent cannot get elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage, then return shape. Every sentence carries information, though the enumerated return object is somewhat dense; it earns its place given the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema, the description supplies exactly what's missing: what it returns, when to call it, and when to skip it. Nothing an agent needs to invoke it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description confirms this explicitly ('No parameters — accepts empty input'), which usefully tells the agent no argument construction is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (published Designesy packages) with the fields returned (versions, URLs, statuses). It explicitly contrasts itself with the sibling designesy_contract, so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('discover what Designesy publishes before fetching a specific contract') and when-NOT-to-use ('if you already know which package you need, skip this and call designesy_contract directly'), naming the alternative tool by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_compareCompare two design systemsARead-onlyIdempotentInspect
Diff two design systems from live URLs — the only URL-scoped design-token diff engine. Fetches both URLs in parallel, extracts their :root custom properties, and produces a structured diff across 8 dimensions: tokens added (in A not B), removed (in B not A), renamed (heuristic Levenshtein ≤ 2), value-changed (same name, different value), scale-stop-changed (spacing/radius/color scale steps), contrast-drift-per-pair (WCAG contrast ratio change for shared color tokens), structure-delta (token count + category distribution), and score-delta (runs /score on both URLs and diffs). Use this to answer 'what actually changed between two design systems' or 'how does our design system differ from a reference'. When NOT to use: for single-site drift detection, use designesy_drift_score; for continuous monitoring, use designesy_monitor_score. Executable — fetches both URLs, extracts CSS + tokens, computes diff. No browser needed. Returns JSON: { ok, urlA, urlB, score (0-100, diff completeness), grade, pass, warn, fail, total, tokensA, tokensB, added[], removed[], renamed[], valueChanged[], scaleDiff, structureDelta, contrastDrift[], scoreDelta, checks[] }. Results cached ~24h server-side per URL pair.
| Name | Required | Description | Default |
|---|---|---|---|
| urlA | Yes | First URL to compare (e.g. your design system). | |
| urlB | Yes | Second URL to compare (e.g. a reference or competitor). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, openWorld, non-destructive), so the bar is lower, yet the description still adds substantive behavioral detail: parallel fetching of both URLs, no browser required, heuristic rename threshold (Levenshtein ≤ 2), and ~24h server-side caching per URL pair. The 'Executable' framing also tells the agent this performs the work rather than just planning it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, use cases, exclusions, execution model, and return contract are all front-loaded in that order with no filler sentences. The inline enumeration of the full JSON return shape is lengthy, but with no output schema it is the only place that contract is documented, so it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden and does so with an explicit field list (score, grade, added/removed/renamed/valueChanged, scaleDiff, contrastDrift, scoreDelta, checks). Combined with execution semantics, caching, and sibling routing, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters and the schema already explains urlA/urlB semantics, so the baseline is 3. The description reinforces the intent (your design system vs. reference/competitor) and notes both are fetched in parallel, but adds no format, validation, or normalization rules beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Diff two design systems from live URLs') plus a distinguishing scope claim ('the only URL-scoped design-token diff engine') and enumerates the eight diff dimensions produced. An agent can separate this from designesy_drift_score and designesy_monitor_score without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use-case phrasings ('what actually changed between two design systems', 'how does our design system differ from a reference') and an explicit 'When NOT to use' clause routing single-site drift to designesy_drift_score and continuous monitoring to designesy_monitor_score. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_contractGet design contractARead-onlyIdempotentInspect
Get the Designesy design-system contract: the canonical tokens, motion, acoustic, takt, cadence, typography, components, and verification rules that define what the Designesy org considers legitimate design. Use this when you need the actual contract values (token names and values, motion timings, accessibility rules) to author, check, or bind a design. When NOT to use: for a pass/fail score of a live site, use designesy_score; for an agent-skill-format export, use designesy_skill_md. Read-only; this server caches the fetched contract for 5 minutes. With no arguments it returns the full contract JSON, which is large (on the order of 100 KB, tens of thousands of tokens). To return less, pass sections, a list of top-level keys such as ["motion", "colors"]: the result holds id, version, and only those keys. section (one name) is the older form and returns { section, data }. An unknown name returns an error that lists every valid key.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | Optional, older form: one section name; returns { section, data }. Accepts the aliases color, tensions and poise. Prefer sections. | |
| sections | No | Optional: top-level contract keys to return, for example ["motion", "colors", "verification_checks"]. The result holds id, version, and only these keys. Omit for the full contract. An unknown key returns an error that lists every valid key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds real operational context: a 5-minute server-side cache, the 100 KB / tens-of-thousands-of-tokens size of the default response, and the error behavior for unknown names (returns an error listing all valid keys). It does not cover pagination or truncation semantics for the very large payload, but the added value over annotations is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then usage, then the practical size/arg guidance — a sensible order. It is dense with parentheticals and a long enumeration of section names, which adds some bulk, but each sentence carries actionable information and none is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return-shape burden, and it does: default full JSON, the sections-filtered shape, the legacy section shape, the error shape, plus size and caching. For a read-only getter of this complexity, an agent has everything needed to call it correctly and predict the payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3. The description goes beyond it by framing the relationship between the two parameters ('section (one name) is the older form', 'Prefer sections'), contrasting their return shapes ({id, version, keys} vs {section, data}), and warning that omitting both returns the full large contract — guidance the schema fields only partially state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Get the Designesy design-system contract') and enumerates the actual contents (tokens, motion, acoustic, takt, cadence, typography, components, verification rules). It explicitly distinguishes itself from sibling tools designesy_score (pass/fail) and designesy_skill_md (export format), so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides both sides of the decision: 'Use this when you need the actual contract values ... to author, check, or bind a design' and an explicit 'When NOT to use' clause naming the two alternatives and the condition that selects each. This is the textbook when/when-not/alternative pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_design_reviewGet design review rubricARead-onlyIdempotentInspect
Get the Designesy Design Review rubric for a qualitative design critique: eight dimensions (Purpose, Clarity, Context, Inclusion, System coherence, Durability, Delight, Responsibility), the output format, and the verification checklist, from the published Design Review kit. Use this when you want a structured rubric to critique a design holistically, rather than a numeric compliance score. When NOT to use: for a deterministic numeric score, use designesy_score; this tool gives you a rubric, not a number. Read-only: it returns reference data and does not evaluate the design. Returns JSON: { kind: "review_rubric", source_url, note, inputs (only when passed), kit { id, title, version, status, purpose, quality_bar, permission }, when_to_use[], required_inputs[], dimensions[8] { num, title, desc }, output_format[], verification_checklist[], anti_patterns[], rationalizations[], kit_prompt_url, kit_prompt_note, omitted_fields[] }. The kit's copy-ready agent prompt is not included; kit_prompt_url is the page where a person can read it. Pass artifact, purpose, context, or rules to have them recorded in inputs (rules defaults to the current contract version).
| Name | Required | Description | Default |
|---|---|---|---|
| rules | No | Governing rules or contract version (default: the current designesy design system contract version). | |
| context | No | Audience, device, environment, and constraints. | |
| purpose | No | What the design is trying to make possible. | |
| artifact | No | URL or description of the artifact to review. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the 'Read-only' sentence is partly redundant. However, the description adds genuinely new behavioral context: the kit prompt is deliberately NOT included, kit_prompt_url is a human-readable page, omitted_fields is reported, and passing inputs merely records them rather than triggering evaluation. That is real disclosure beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then exclusion, then behavior, then return shape – a sensible order with no filler sentences. The enumerated return-field list is heavy, but since there is no output schema it earns its place by preventing guesswork about the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing the return value and does so field-by-field, including which fields may be omitted. Combined with the routing guidance and annotation coverage, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further: it tells the agent that artifact/purpose/context/rules are simply recorded in 'inputs', that all are optional, and that rules defaults to the current contract version. That is semantic value the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the Designesy Design Review rubric') and immediately scopes it as a qualitative critique rubric with eight named dimensions. It explicitly differentiates itself from the numeric sibling by noting it is 'a rubric, not a number', so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('when you want a structured rubric to critique a design holistically') and a when-NOT-to-use that names the alternative tool ('for a deterministic numeric score, use designesy_score'). This is the full when/when-not/alternative triad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_drift_scoreScore UI driftARead-onlyIdempotentInspect
Score a live URL for AI-generated UI drift. Its 12 checks detect the four documented 2026 drift failure modes: token fabrication (var() references with no fallback to custom properties declared nowhere: not in a stylesheet, a block or a style attribute), within-session drift (spacing/color/radius value variance), between-session amnesia (inconsistent font stacks, shadows, transitions), and silent breaking changes (z-index chaos, alias chains that end in an undeclared property). Use this when you need to verify whether a site (especially an AI-generated one) is drifting off its own declared token system. When NOT to use: for a full 45-check design-contract score, use designesy_score; for token-file format validation, use designesy_tokens_score. Executable: fetches the URL server-side, extracts all CSS (inline + linked stylesheets), parses custom property declarations (stylesheets, blocks and style attributes) and var() references, runs 12 drift checks. No browser needed. Returns JSON: { ok, url, scope, score (0-100), grade (A-F), pass, warn, fail, skip, total, tokensExtracted, checks[{id, item, category, status, detail}] }. Results cached ~24h per URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to scan for drift. Defaults to https://www.designesy.org/ if not provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, and the description adds substantial behavior beyond them: server-side fetch, extraction of inline + linked CSS, custom-property parsing across stylesheets/style blocks/style attributes, no browser required, and ~24h per-URL caching. The caching and no-browser execution model are exactly the operational facts an agent can't get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then failure modes, usage, exclusions, execution model, and return shape in a logical order. The long parenthetical definitions of each drift failure mode are dense but each earns its place by telling the agent what the score means; slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return JSON shape ({ ok, url, scope, score, grade, pass, warn, fail, skip, total, tokensExtracted, checks[] }) and the execution model, leaving no gap an agent needs before calling or interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single url parameter, including its default, so the schema already carries the semantics. The description only restates that the URL is a live page to scan, adding no format, validation, or edge-case detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("Score") plus resource ("live URL for AI-generated UI drift") with the exact checks enumerated (12 checks across four named drift failure modes). It explicitly distinguishes itself from siblings by naming designesy_score and designesy_tokens_score, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit positive trigger ("Use this when you need to verify whether a site is drifting off its own declared token system"), names "When NOT to use", and routes to two concrete alternatives with the conditions that select them. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_guardrailsGenerate build-contract bundleARead-onlyIdempotentInspect
Generate a frozen build-contract bundle for AI coding agents from any design system URL (the product layer). Ingests a site, extracts its :root tokens, and emits 6 outputs: (1) DTCG-format token file, (2) Stylelint config generated from token values, (3) AGENTS.md-format rules with token allowlist, (4) component contract with allowed prop patterns, (5) anti-pattern documentation, (6) DESIGN.md file (Google open spec, google-labs-code/design.md), the de-facto AI-readable design-context standard: YAML front matter plus a markdown body. Use this when you need to turn a design system into the file AI agents read and the lint that enforces it. When NOT to use: for design-contract scoring, use designesy_score; for token-file validation, use designesy_tokens_score; for drift detection, use designesy_drift_score. Executable: fetches the URL, extracts CSS + :root custom properties, generates the bundle. No browser needed. The full bundle grows with the number of tokens a site declares: about 7 KB to about 530 KB of JSON on the 26 sites measured (about 110 KB for designesy.org). To trim it, pass parts, a list of bundle file names such as ["designMd"] or ["tokens", "lintConfig"]: the result keeps score, grade, counts and checks, and its bundle holds only those files, in the order asked. Valid parts: tokens, lintConfig, agentRules, componentContract, antiPatterns, designMd. A single part can still be large on a site with many tokens. An unknown name returns an error that lists the valid parts. Returns JSON: { ok, url, score (0-100, emission completeness), grade, pass, warn, fail, total, tokensExtracted, bundle: { tokens, lintConfig, agentRules, componentContract, antiPatterns, designMd }, checks[{id, item, category, status, detail}] }; with parts it adds parts, and bundle holds only the named files. Results cached ~24h per URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to generate guardrails for. Defaults to https://www.designesy.org/ if not provided. | |
| parts | No | Optional: the bundle files to return, by name. Omit for the whole bundle. Valid parts: tokens, lintConfig, agentRules, componentContract, antiPatterns, designMd. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, and the description adds substantial context beyond them: it fetches the URL and extracts CSS/:root tokens without a browser, caches results ~24h per URL, reports realistic bundle size ranges (~7 KB to ~530 KB), and specifies that an unknown part name errors with the valid list. No claim conflicts with readOnlyHint=true — generation is local, not a remote mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, outputs, and exclusions before the operational detail, which is good ordering. It loses a point for redundancy — the valid parts list (tokens, lintConfig, agentRules, componentContract, antiPatterns, designMd) is repeated verbatim twice, and the response-shape sentence is restated with a 'with parts' addendum.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates fully by spelling out the return shape ({ ok, url, score, grade, pass, warn, fail, total, tokensExtracted, bundle, checks[] }) and the parts-modified variant. Combined with caching, size expectations, and error behavior, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: parts is order-preserving, the response still keeps score/grade/counts/checks while bundle holds only the named files, and omitting parts returns everything. The url default is already in the schema, so this is additive rather than merely restated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Generate a frozen build-contract bundle') and enumerates the six concrete artifacts emitted, so an agent knows exactly what comes back. It also explicitly names the siblings it is not (designesy_score, designesy_tokens_score, designesy_drift_score), making it easy to distinguish from the other 16 designesy tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Contains an explicit 'Use this when...' clause plus a dedicated 'When NOT to use' section that routes to three named alternative tools by purpose. It also explains how to narrow output via parts, which is usage guidance for invocation as well.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_llms_full_txtGet llms-full.txt briefARead-onlyIdempotentInspect
Get the Designesy /llms-full.txt brief as reference data: authority, discovery endpoints, topics, every published package with its links, standing rules, and anti-patterns. Use this for a fuller picture of the Designesy ecosystem when the short brief from designesy_llms_txt is not enough. When NOT to use: for a quick orientation, use designesy_llms_txt (a few thousand characters; this one runs over ten thousand); for the contract itself, use designesy_contract. Read-only: no side effects. Returns JSON: { kind: "published_document", source_url, media_type: "text/plain", note, omitted_sections[], content }, where content is the published text with any section written as steps or a prompt for an AI agent (such as the ingest protocol and the paste-ready agent prompt) replaced by a one-line marker and named in omitted_sections. No parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false, so the restated 'Read-only: no side effects' is redundant. What the description does add is substantive: it discloses the relative payload size (over ten thousand characters vs a few thousand for the sibling) and, critically, that sections written as steps or prompts are replaced by a one-line marker and listed in omitted_sections — a non-obvious transformation of the returned content that no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long, but the front-loaded purpose sentence and the labeled 'When NOT to use' and 'Returns JSON' blocks make it scannable, and each clause carries information. Slight redundancy appears where 'Read-only: no side effects' repeats the annotations, but overall the sentences earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden, and it discharges it with an explicit JSON shape including field names and the meaning of omitted_sections. Combined with the usage routing and size expectation, an agent has everything needed to select and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case. The description confirms this explicitly ('No parameters.'), matching the empty input schema with no ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the Designesy /llms-full.txt brief') and enumerates the content scope: authority, discovery endpoints, topics, packages with links, standing rules, anti-patterns. It explicitly differentiates itself from the sibling designesy_llms_txt (short brief) and designesy_contract, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use ('when the short brief from designesy_llms_txt is not enough') and a labeled 'When NOT to use' section naming two alternatives and the conditions that select them (quick orientation -> designesy_llms_txt; the contract itself -> designesy_contract). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_llms_txtGet llms.txt briefARead-onlyIdempotentInspect
Get the Designesy /llms.txt brief as reference data: what Designesy is, canonical links, topics, the published package list, machine exports, standing rules, and contact. Use this first when you don't know what Designesy is; at a few thousand characters it is the cheapest orientation path before pulling heavier artifacts. When NOT to use: for the longer brief, use designesy_llms_full_txt; for the contract itself, use designesy_contract. Read-only: no side effects. Returns JSON: { kind: "published_document", source_url, media_type: "text/plain", note, omitted_sections[], content }, where content is the published text with any section written as steps for an AI agent (such as the ingest steps) replaced by a one-line marker and named in omitted_sections. No parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/no-side-effects, so 'Read-only: no side effects' is largely redundant. The genuinely additive disclosure is that agent-step sections (e.g. ingest steps) inside the returned content are replaced by a one-line marker and named in omitted_sections — that is non-obvious behavior an agent must know before relying on the text. It also flags the size/cost profile relative to heavier artifacts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a long single block, but front-loaded (purpose and use-case first, exclusions next, return contract last) and every sentence carries information. The return-shape sentence is dense but necessary since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the full return contract (kind, source_url, media_type, note, omitted_sections[], content) plus the omission rule, and covers selection, cost, and safety. An agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which the description states plainly ('No parameters.'), matching the empty input schema. Baseline for a 0-param tool; there is nothing further to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Get the Designesy /llms.txt brief as reference data') followed by an enumeration of what the brief contains. It explicitly differentiates itself from siblings by naming designesy_llms_full_txt and designesy_contract as the alternatives for adjacent needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive condition ('Use this first when you don't know what Designesy is') and an explicit negative one ('When NOT to use') with the two sibling tools that cover those cases. Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_monitor_scoreMonitor drift with email alertsAInspect
Score a URL for continuous design-drift governance — the temporal layer over the drift radar. Re-runs the 12 drift checks (d01-d12) on the URL and computes 10 monitor checks (m01-m10): schedule registered, last run fresh, drift delta vs baseline, trend slope (3-run trajectory), new violations since last run, resolved since last run (the healing signal), score degradation threshold, token-set mutation, contract version drift, and alert delivered. When alerts fire and an email address is provided, sends an HTML drift-alert email via Resend (requires RESEND_API_KEY env var). Pass a history array of prior snapshots to compute deltas; omit it for a first-run baseline. Use this to watch a design system over time — 'weekly audits at cents per report' (Into Design Systems 2026). When NOT to use: for a single point-in-time drift check, use designesy_drift_score; for design-contract scoring, use designesy_score. Executable — fetches the URL, extracts CSS + :root tokens, runs checks, computes deltas. No browser needed. Returns JSON: { ok, url, score (0-100, governance health), grade (A-F), pass, warn, fail, total, currentSnapshot, baseline, previous, driftChecks, monitorChecks, alerts, emailAlert }. Results cached ~24h server-side per URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to monitor for drift. Defaults to https://www.designesy.org/ if not provided. | |
| No | Email address to receive drift alerts. When alerts fire AND this is provided AND RESEND_API_KEY is set, an HTML alert email is sent. Optional — without it, alerts surface in-UI only. | ||
| history | No | Prior snapshots for delta computation. Omit for a first-run baseline. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that the tool executes and fetches the URL, extracts CSS and :root tokens, sends an HTML email via Resend only when alerts fire AND email is given AND RESEND_API_KEY is set, requires no browser, and caches results ~24h server-side. These are real behavioral traits (auth dependency, side effect, caching) not derivable from the hints, and readOnlyHint=false / non-idempotent is consistent with a tool that emails and re-scores.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Effectively one dense paragraph but front-loaded: purpose, then mechanics, then when-not-to-use, then return shape. Nearly every clause carries information, though the marketing quote ('weekly audits at cents per report' — Into Design Systems 2026) is decorative padding that could be cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned JSON keys (ok, url, score, grade, pass/warn/fail/total, snapshots, driftChecks, monitorChecks, alerts, emailAlert) and the server-side caching behavior. An agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds genuine meaning for history ('prior snapshots for delta computation; omit for a first-run baseline') and reinforces the conditional email behavior. It adds usable semantics beyond the schema but does not, for example, explain the expected shape/ordering of the history snapshots.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Score a URL for continuous design-drift governance') and immediately frames its scope as 'the temporal layer over the drift radar', distinguishing it from the point-in-time siblings. It enumerates the concrete checks (d01-d12, m01-m10) so an agent knows exactly what work happens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit positive guidance ('watch a design system over time', pass history for deltas vs omit for a baseline) plus a dedicated 'When NOT to use' clause naming the alternatives designesy_drift_score and designesy_score with their selecting conditions. This is the textbook routing pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_motion_scoreValidate Lottie animationARead-onlyIdempotentInspect
Validate one Lottie animation file against the Designesy motion contract: its ten checks (m01-m10), drawn from the Lottie spec v1.0.1 and the Designesy §16 Ten Non-Negotiable Motion Standards. Each check returns PASS, FAIL, WARN or SKIP under the contract's own name for its id: m01 the schema's top-level animation object (layer contents are not validated, so a clean file returns SKIP, not PASS), m02 the required fields (v, fr, ip, op, w, h, layers), m03 no deprecated 4.x Bodymovin version, m04 a markers array, m05 a meta object, m06 a reduced-motion path (a marker or slot named for it, or a meta note of an external prefers-reduced-motion wrapper), m07 keyframe easing (linear, ease and ease-in curves fail), m08 duration within 300 ms (longer returns WARN, since a justification cannot be read from a file), m09 layout-property animation and m10 keyboard-initiated motion (both SKIP: they concern the page that embeds the file). Use this to check that a motion asset is well formed and carries reduced-motion support. When NOT to use: for the motion CSS of a whole site, use designesy_score. Executable: fetches the URL or parses the inline JSON; no browser needed. Score: PASS=1, WARN=0.5, FAIL=0, SKIP is not scored; points / scored checks x 100. Returns JSON: { contract_id, contract_version, contract_status, url, lottie_version, layer_count, score (0-100), grade (A-F), pass_count, fail_count, warn_count, skip_count, scoring, checks[{id (m01-m10), name, status (PASS, FAIL, WARN or SKIP), detail}], ten_non_negotiable, provenance, validator_note }. Pass url to fetch a remote Lottie file, or lottie_file to validate an inline JSON string. Provide exactly one.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to a Lottie JSON file. The tool fetches and validates it. | |
| lottie_file | No | Raw Lottie JSON string to validate (alternative to url). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), and the description adds substantial context beyond that: which checks are executable vs. SKIP, why m08 returns WARN instead of FAIL, why m09/m10 skip, the PASS/WARN/FAIL/SKIP scoring formula, and that no browser is needed. It even inlines the full return-object shape, which is unusually generous given no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then checks, then usage boundary, then mechanics — a logical order with zero filler sentences. It is admittedly dense and long, and the m01-m10 list is partly redundant with the checks[] return description, which keeps it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only validator with no output schema, the description supplies everything needed: input mode selection, per-check semantics including the non-obvious SKIP/WARN rationale, the scoring formula, and the full response field list. Nothing material is left for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by stating the mutual-exclusivity rule ('Provide exactly one') and clarifying that url triggers a fetch while lottie_file parses inline JSON — a constraint the flat schema cannot express on its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Validate one Lottie animation file against the Designesy motion contract' — and immediately enumerates the ten checks (m01-m10) it runs, so the agent knows exactly what the tool inspects. It also differentiates itself from the sibling designesy_score, which handles site-wide motion CSS rather than a single asset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Contains an explicit 'Use this to...' statement plus a 'When NOT to use' clause routing the agent to designesy_score for whole-site motion CSS. It further constrains invocation with 'Pass url..., or lottie_file... Provide exactly one,' leaving no ambiguity about when and how to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_readiness_scoreScore AI readinessARead-onlyIdempotentInspect
Score a URL for design-system AI readiness — the 6th maturity axis (zeroheight 2026). 10 checks probe the target origin for machine-readable artifacts: DTCG token files, llms.txt, agent.json, MCP endpoint (tools/list), DESIGN.md, token $description, component schemas, sitemap.xml, robots.txt, and Open Graph/Twitter meta. Use this to verify whether a design system is the default context AI tools build from, or whether AI is silently working around it. When NOT to use: for full design-contract scoring, use designesy_score; for AI-drift detection, use designesy_drift_score. Executable — fetches the URL and probes the origin via HEAD/GET for each artifact. No browser needed. Returns JSON: { ok, url, score (0-100), grade (A-F), pass, warn, fail, total, checks[{id, item, category, status, detail}] }. Results cached ~24h server-side per URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to score for AI readiness. Defaults to https://www.designesy.org/ if not provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, idempotent, open-world, non-destructive, but the description adds material context beyond them: it fetches the URL and probes the origin via HEAD/GET, needs no browser, and caches results ~24h server-side. It also enumerates the ten artifact probes performed, telling the agent exactly what side effects and network behavior to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first clause, and each subsequent sentence carries distinct payload (exclusions, execution model, return shape, caching). The enumeration of all ten probed artifacts is slightly list-heavy but is genuinely informative rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description compensates by spelling out the return JSON shape (ok, url, score, grade, pass/warn/fail counts, checks[]), plus execution model, caching behavior, and exclusion routing. Nothing an agent needs to call or interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single url parameter's default is already documented in the schema, so the description adds no new syntactic or semantic detail about the argument. Baseline 3 applies when the schema fully carries parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (score a URL for design-system AI readiness) and scopes it precisely as the '6th maturity axis'. It explicitly names the sibling tools it is not (designesy_score, designesy_drift_score), so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both the positive trigger ('verify whether a design system is the default context AI tools build from') and explicit exclusions with named alternatives ('for full design-contract scoring, use designesy_score; for AI-drift detection, use designesy_drift_score'). This is exactly the when/when-not/alternatives pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_reportBuild composite design reportARead-onlyIdempotentInspect
Generate a unified design-intelligence report for a single URL, the synthesis capstone. Fires /score (45-check audit), /drift (12-check drift radar), and /readiness (10-check AI readiness) in parallel, then computes a weighted composite: score × 0.5 + drift × 0.3 + readiness × 0.2. One input, one output, one composite grade. Use this when you need a single holistic assessment instead of three separate scans, or when sharing a design-intelligence verdict (the report is the most shareable surface). When NOT to use: for just the audit score, use designesy_score; for just drift, use designesy_drift_score; for just AI readiness, use designesy_readiness_score. Executable: fires 3 internal APIs in parallel, each fetches the target URL. No browser needed. The full result is large: about 75 to 100 KB of JSON on the ten sites measured, on the order of 20,000 tokens or more, because it carries each engine's whole result beside the merged check list. To trim it, pass detail "summary": the same keys with fewer rows, about 4 to 31 KB on the same sites. It keeps the composite, the totals, each engine's score, grade and counts, and only the checks and synthesis entries that did not PASS; omitted counts what was left out. detail "full" (the default) returns everything. Returns JSON: { ok, url, compositeScore (0-100), compositeGrade (A-F), score { sub-result }, drift { sub-result }, readiness { sub-result }, totalChecks, totalPass, totalWarn, totalFail, totalSkip, totalManual, checks[] (all checks across all engines, tagged with engine), synthesis[] (8 synthesis checks verifying the report ran correctly), appUrl (standalone interactive dashboard URL) }; with detail "summary" it adds detail and omitted. Results cached ~24h per URL. MCP Apps: hosts that support io.modelcontextprotocol/ui render an interactive dashboard inline; others get the JSON plus an appUrl link.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public URL to generate a design-intelligence report for. | |
| detail | No | Optional: "full" (the default) returns everything; "summary" returns the composite, the totals, each engine's score, grade and counts, and only the checks that did not PASS. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, openWorld=true, destructive=false, so the safety profile is covered. The description adds substantial non-annotation behavior: three internal APIs fired in parallel, no browser needed, ~24h per-URL caching, and the 75-100KB / 20k-token payload size. That is real added value, but it never states failure modes (e.g. what happens on an unreachable or non-public URL), which holds it below a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then fan-out, formula, routing, cost, and return shape in a logical order, and the return-value sentence is genuinely load-bearing given there is no output schema. It is longer than needed in places — 'One input, one output, one composite grade' and 'the report is the most shareable surface' are rhetorical filler — which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full return contract and does so thoroughly: the JSON key list, the conditional detail/omitted keys, the composite formula weights, caching, and the MCP Apps dashboard fallback. An agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by quantifying the tradeoff for detail='summary' (4-31KB vs 75-100KB, omitted tracks what was dropped) and confirming 'full' is the default, which is decision-relevant information the enum alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (generate a unified design-intelligence report for a single URL) and explicitly positions it as the synthesis capstone that fans out to three named engines. It names each sibling it is not (designesy_score, designesy_drift_score, designesy_readiness_score), so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('single holistic assessment instead of three separate scans', 'sharing a design-intelligence verdict') and an explicit when-NOT-to-use block that maps each single-engine need to the correct sibling tool. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_scoreScore URL against contractARead-onlyIdempotentInspect
Score a live URL against the Designesy design contract with the deterministic 45-check verification engine at https://www.designesy.org/api/score. Returns a numeric score, a letter grade (A-F), and the check results. Use this to audit whether a website or AI-generated UI complies with a real design contract (tokens, motion, accessibility, cadence, takt, typography, copywriting). When NOT to use: for token-file validation only, use designesy_tokens_score; for a Lottie file, use designesy_motion_score; for a qualitative critique, use designesy_design_review. The engine fetches the URL server-side, extracts its CSS, and runs 45 checks. Results are cached ~24h server-side per URL and scope. Checks that need a live browser (Core Web Vitals, sound toggle, overflow) return MANUAL; the full audit (/api/score/audit) resolves them. Checks that do not apply to the site (no tokens, no buttons, no DESIGN.md) return SKIP (N/A). format selects the output. designesy (the default) returns JSON: { url, contract_version, summary { total, pass, fail, warn, skip, manual, score (0-1), score_percent (0-100), grade }, tokens_extracted, checks[{ id, item, category, status, detail }], note }. canonical returns the engine's review-findings.json schema JSON unchanged. review returns the engine's markdown report unchanged (coverage by category, a findings table of the FAIL and WARN checks, and a verdict). google returns the engine's @google/design.md-compatible JSON unchanged. scope sets the scoring scope: contract or universal. Omit it and the engine auto-detects: contract for designesy.org, universal for every other site. If the engine is unreachable, format designesy falls back to the offline engine: 27 of the 45 checks run locally, each mirroring the live engine's verdict, under the same scope. Its result adds engine (kind offline, the engine version it mirrors, and the checks it did not run) and scope, and its note says so. The other three formats return an error, because only the live engine produces them.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to score. Defaults to https://www.designesy.org/ if not provided. | |
| scope | No | Scoring scope. contract: every check counts absence against the site. universal: optional features and Designesy-specific token checks return SKIP when absent. Omit to auto-detect: contract for designesy.org, universal for every other site. | |
| format | No | Output format. designesy (default): the native JSON. canonical: the review-findings.json schema. review: a markdown report. google: the @google/design.md-compatible JSON. | designesy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, non-destructive, openWorld); the description supplies genuinely additive behavior: server-side URL fetch plus CSS extraction, ~24h server-side caching per URL and scope, MANUAL status for browser-dependent checks with the /api/score/audit endpoint that resolves them, SKIP semantics for non-applicable checks, and a 27-of-45-check offline fallback that annotates its own result with engine/scope and degrades the non-default formats to errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then exclusions, then behavior and output contracts — a logical order. It is long, and the fallback/format cross-product is explained at a level of detail some agents won't need, but every sentence carries operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description assumes the full burden of describing returns and does so: the designesy JSON field tree (summary, checks, tokens_extracted, note), what each alternate format yields, the manual/skip statuses, and the fallback's added fields. An agent has everything needed to call it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description goes beyond it: it explains that format changes the returned document structure (native JSON vs review-findings.json vs markdown vs @google/design.md), that scope auto-detects by host (contract for designesy.org, universal otherwise), and that in offline fallback only the default format succeeds while the other three error out. No syntax/size constraints or defaults beyond the schema are added, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+mechanism: 'Score a live URL against the Designesy design contract with the deterministic 45-check verification engine.' It names the exact endpoint and enumerates the check categories (tokens, motion, accessibility, cadence, takt, typography, copywriting), so it is unmistakable among the 16 siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Contains an explicit 'When NOT to use' block that routes to three named siblings by distinct condition (token-file validation → designesy_tokens_score, Lottie file → designesy_motion_score, qualitative critique → designesy_design_review). When-to-use is also stated directly ('audit whether a website or AI-generated UI complies').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_skill_mdGet contract as SKILL.mdARead-onlyIdempotentInspect
Get the Designesy SKILL.md: the agent-skill-format export of the design-system contract, for a user to save into .agents/skills/ or a system prompt so a coding agent builds UI to the contract (tokens, anti-patterns, rules, verification). Use this when the user wants the contract in that form. When NOT to use: for the raw contract JSON, use designesy_contract; for scoring, use designesy_score. Read-only: no side effects. Returns JSON: { kind: "published_document", source_url, media_type: "text/markdown", note, omitted_sections[], content }, where content is the SKILL.md markdown (tens of thousands of characters) with any section written as steps or a prompt for an AI agent replaced by a one-line marker and named in omitted_sections. No parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/no-destructive, but the description adds context the annotations cannot: it documents that sections written as agent steps or prompts are replaced with one-line markers, names them in omitted_sections, and warns the content runs tens of thousands of characters. That omission behavior is a genuine, non-obvious trait an agent must know before relying on the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the when/when-not routing before the return-format detail, so the critical selection information lands first. It is longer than strictly necessary because the inline return-shape description is dense, but every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of documenting the return value and does so precisely (kind, source_url, media_type, note, omitted_sections, content), including the truncation semantics. Combined with the routing guidance, an agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so the baseline is 4. The description states 'No parameters' explicitly, which is correct and consistent with the schema, but adds no further parameter meaning to give.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the Designesy SKILL.md') plus the exact export format ('agent-skill-format export of the design-system contract') and its intended destination (.agents/skills/ or a system prompt). It explicitly distinguishes itself from designesy_contract and designesy_score, so an agent can select it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive trigger ('Use this when the user wants the contract in that form') and an explicit negative trigger ('When NOT to use'), naming the correct alternatives for the excluded cases (designesy_contract for raw JSON, designesy_score for scoring). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
designesy_tokens_scoreValidate DTCG tokensARead-onlyIdempotentInspect
Validate a design token file against the W3C Design Tokens Community Group (DTCG) 2025.10 Final Community Group Report (the spec's first stable version, published Oct 28 2025 as a Candidate Recommendation and considered stable). Returns 10 conformance checks (t01-t10) with PASS, FAIL, WARN or SKIP. Use this to verify a tokens.json (or any DTCG token export) is structurally correct: $type/$value/$description present, structured colors (colorSpace + components rather than bare hex), a valid $schema pointer to designtokens.org, and correct dimension units. With 84% of teams now using design tokens (zeroheight Design Systems Report 2025, up from 56% in 2024) and the spec finally stable, every adopting team needs a validator. When NOT to use: for scoring a whole live site (not just its token file), use designesy_score. Executable: fetches the URL or parses the raw JSON you provide, runs 10 checks server-side. No browser needed. Score: PASS=1, WARN=0.5, FAIL=0, SKIP is not scored; points / scored checks x 100. Returns JSON: { contract_id, contract_version, contract_status, url, total_tokens, score (0-100), grade (A-F), pass_count, fail_count, warn_count, skip_count, scoring, checks[{id (t01-t10), name, status (PASS, FAIL, WARN or SKIP), detail}], provenance, validator_note }. Pass url to fetch a remote token file, or dtcg_file to validate an inline JSON string. Provide exactly one.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to a DTCG token file (JSON). The tool fetches and validates it. | |
| dtcg_file | No | Raw DTCG token JSON string to validate (alternative to url). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description goes well beyond them: it discloses the execution model ('fetches the URL or parses raw JSON you provide, runs 10 checks server-side, no browser needed'), the exact scoring formula, and the SKIP-is-unscored rule. That is substantive behavioral context an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and NOT-to-use routing are front-loaded and the return-shape enumeration is valuable given no output schema. But the sentence about '84% of teams ... zeroheight Design Systems Report 2025' is marketing padding that does not help invocation, and the 'Candidate Recommendation and considered stable' clause is redundant with the already-stated 2025.10 Final report.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return contract itself, listing every field (score, grade, checks[{id,status,detail}], etc.) and the scoring math. Combined with the parameter exclusivity rule and the sibling routing note, an agent has everything needed to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the two parameters are already documented; the description nonetheless adds the mutually-exclusive constraint ('Pass url ... or dtcg_file ... Provide exactly one') that the schema does not encode. It stops short of adding format expectations beyond the schema, so a 4 rather than a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Validate a design token file against the W3C DTCG ... spec') and immediately scopes it as 10 conformance checks on a token file. It explicitly differentiates itself from the sibling designesy_score, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('verify a tokens.json or any DTCG token export is structurally correct') and an explicit when-not-to-use with the named alternative ('for scoring a whole live site, use designesy_score'). Nothing about selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v1.13.8- First observed
designesy_a11y_score - First observed
designesy_agent_json - First observed
designesy_catalog - First observed
designesy_compare - First observed
designesy_contract - First observed
designesy_design_review - First observed
designesy_drift_score - First observed
designesy_guardrails - First observed
designesy_llms_full_txt - First observed
designesy_llms_txt - First observed
designesy_monitor_score - First observed
designesy_motion_score - First observed
designesy_readiness_score - First observed
designesy_report - First observed
designesy_score - First observed
designesy_skill_md - First observed
designesy_tokens_score
TDQS
Scored across 17 tools
Each tool is scoped to a distinct artifact or verification engine, and the descriptions include explicit 'When NOT to use' cross-references that steer selection. There is mild residual overlap among the many _score tools (score, drift_score, readiness_score, monitor_score, report) and among the doc exports (llms_txt, llms_full_txt, agent_json), but the descriptions differentiate them well.
All names use a consistent designesy_ prefix with snake_case, and the seven scoring tools share a predictable _score suffix. The deviations are noun-only names (catalog, contract, report, guardrails, compare) mixed with suffix-bearing ones, which is a minor inconsistency but still readable and predictable.
17 tools is on the heavier side but each corresponds to a genuinely distinct design-intelligence capability (contract, tokens, motion, a11y, drift, readiness, monitor, compare, guardrails, exports). The scope is broad enough that the count is justified rather than padded.
The surface covers discovery, canonical contract, multiple export formats, many scoring dimensions, guardrail generation, monitoring, and comparison, with no write operations needed since it is read-only by design. The main gap is that designesy_catalog lists packages but there is no generic package-fetch tool for arbitrary ids beyond the main contract.
Maintenance
Related MCP Connectors
Give your agent a real design system: tokens, measured WCAG contrast, and rules to follow.
Run accessibility, contrast, and design token audits and file QA issues from your AI coding tool.
Live React design-system APIs, patterns, and code validation so AI agents build real UI, not slop.
The website checker for AI agents. One call: verdict, score out of 100, fix list.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI coding agents to inspect a project's design tokens and component catalog, audit React/Tailwind files against seven static UI quality rules, score overall UI health, and apply auto-fixes that are re-audited and reverted on regression. It works both locally over filesystem access and remotely on raw TSX/JSX or CSS snippets passed directly as strings.-
- AlicenseNot gradedqualityBmaintenanceProvides coding agents with local tools to inspect project UI inventories, propose and compare visual direction boards, compile versioned design contracts and DTCG tokens, retrieve section-specific blueprints, and audit running interfaces with browser evidence including screenshots, accessibility findings, and overflow measurements.MIT
- AlicenseNot gradedqualityBmaintenanceEnables coding agents and CI to verify rendered web UIs against design token usage, layout constraints, and accessibility rules, returning concise pass/fail verdicts with actionable findings.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to audit rendered web pages for design and UI defects by measuring geometry, styles, contrast and motion in a local browser and judging them against evidence-tiered rules. Findings come back as short, fixable items expressed in the project's own design tokens, while only sanitized numeric measurements leave the machine.Apache 2.0