MCP server: One MCP server.

Applied Form engine

@applied-formRun by its publisher: served from their own domain, namespace checked by the registry.MCP server · External

Lint rendered pages against a design system in a real browser, across six widths, with the fix.

Software testingv3.2.1Apache-2.0JavaScript
Freeno charge per call

Runs on your machine from its package; the steps are below.

What it does

  1. Reads
  2. Writes
  3. High impact

At most: moves money, runs code or commands, deletes data, or sends messages for you.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

npm@appliedform/enginev3.2.1

Run

npx -y @appliedform/engine

MCP client config

{
  "mcpServers": {
    "applied-form-engine": {
      "command": "npx",
      "args": [
        "-y",
        "@appliedform/engine"
      ]
    }
  }
}
README3 min read

A design-system conformance gate measured in a real browser. Give it a DTCG token file and a page; it renders the page in Chromium at four fixed widths and two sampled ones, under reduced motion and in print, and checks every computed value against the system's rules. It reports what the browser drew, not what the stylesheet says.

The engine is open so the evidence about it can be checked. Every comparison it is quoted in can be rerun from this repository: the gate beside axe-core and stylelint, the drift survey of public design systems, and the model study and its judging rounds, with every record they were scored from.

Start

sh
npm install @appliedform/engine && npx playwright install chromium
npx af init --pack instrument     # load a system: the free Standards pack, or your pack's tokens.json
npx af lint page.html             # your page, judged by that system's rules, at every width

With no system loaded, af lint judges a page by the rules that hold for any page (contrast, focus, target size, overflow, alt text, heading order, motion) and says how to load one. For an agent, npx af mcp-config prints the server block for Claude Code or Cursor.

Use

sh
npx af lint page.html https://example.com/page     # every rule, every width
npx af lint https://example.com/ --register ii     # a page that has not declared a register
npx af baseline https://example.com/a --out af-baseline.json
npx af lint https://example.com/a --baseline af-baseline.json
npx af drift https://example.com/ --out drift.json # what system a site actually renders
npx af rules                                        # every rule, its severity and what it checks
npx af-mcp                                          # the same tools for a model, over MCP

Exit status is 1 on any error-severity violation not held in the baseline. af.config.json sets a rule to error, warn or off; af.config.example.json is a starting point.

The token file

tokens/applied-form.tokens.json is the Reference system: the engine's structure (registers, voices, spacing, floors and every rule's parameters) with a neutral palette derived by af brand. It exists so the engine can be tested and published. It is not a design to ship. Point the engine at your own system by replacing the file, or by importing a Standards pack with af system import.

Evidence

WhatWhereRerun
The gate beside axe-core and stylelint on planted defectseval/compare.mjs, test/compare.test.mjsnpm run eval:compare
Drift across public design systemseval/drift/npm run drift:batch -- all
Models generating pages with and without the ruleseval/, docs/evaluation-protocol.mdnpm run eval -- --models stub offline, then with keys
A judging round with anchors and attention checkseval/judge-run.mjsnpm run eval:judge

The protocol was written before the runs it governs, and it says what result would count against the engine. These run from a clone of this repository: the npm package carries the engine and nothing that needs a model SDK, axe-core or stylelint.

Develop

sh
npm install
npm run check    # build, unit tests, and the clean fixture linted in a real browser

Tests use node:test. Set AF_CHROMIUM to a Chromium executable if Playwright has not downloaded one.

Licence

Apache-2.0. See LICENSE and NOTICE. The name Applied Form and its marks are not licensed.

Similar modules

Browse Software testing