mcpField
F
Facet

Facet

Local
chndr-prksh.github.ioDeveloper Tools2Updated 1w ago

About Facet

Facet is a CLI and MCP server for developers and coding agents checking responsive web pages. It tests device-specific layouts in headless Chromium and reports issues with selectors and suggested fixes.

Key features

  1. 01Checks responsive issues across devices
  2. 02Emulates real device viewport settings
  3. 03Finds overflow, text and target issues
  4. 04Reports console and network errors
  5. 05Saves screenshots and JSON reports

Use cases

  1. 01Check CSS changes across phone sizes
  2. 02Gate pull requests on responsive errors
  3. 03Inspect a page with device screenshots

MCP support

Facet runs as a stdio MCP server. Clients can use tools to check responsive behavior, capture screenshots, inspect elements, audit accessibility, and list devices.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"chndr-prksh-facet": {
"command": "npx",
"args": [
"-y",
"@chandra14/facet-check"
]
}
}
}
Run commandnpx -y @chandra14/facet-check

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@chandra14/facet-check0.1.0

Tools

5

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
urlstringYesPage to load: a full URL, a bare host such as example.com, localhost:3000 for a local dev server, or a path to an HTML file
devicesarrayNoDevice ids or names from list_devices ("iphone-17", "Galaxy S26"), free-form sizes ("1024x768"), or a preset: default, popular, phones, latest, tablets, desktops, apple, foldables, extremes.

Details

From the project README

facet-check

Check a web page for responsive design problems on real phone, tablet and desktop viewports. It runs from the command line, in CI, or as an MCP server that AI coding agents (Claude Code, Cursor, Codex, VS Code) can call.

npx @chandra14/facet-check localhost:3000

Or install it once with npm install -g @chandra14/facet-check, then run facet-check localhost:3000.

Output for a test page with a price table that is too wide for phones (shortened):

Facet check http://localhost:3000
6 devices · 14 errors · 14 warnings

✗ iPhone 16 393×852 @3x
  error Page scrolls sideways by 267px — The document is 660px wide in a 393px viewport.
  error Extends 267px past the viewport — <table.prices> “SizeWhole beanGroundSubscriptionWholesal”
        html > body > main > table
        fix: Constrain it with max-width: 100%, min-width: 0 on a flex child, overflow-wrap: anywhere, or let it scroll inside its own container.
  error Tap target is 13 × 13px — <input#weekly>
        #weekly
        fix: Targets must be at least 24 × 24px (WCAG 2.5.8); 44 × 44px is comfortable.
  warn  Field text is 14px, so iOS zooms in on focus — <input#email>
        #email
        fix: Give form controls font-size: 16px or larger.
  console Carousel failed to initialise at 393px

! Full HD laptop at 125% (most common) 1536×864 @1.25x
  warn  Text is only 10px — <p#terms> “Prices include tax. Orders placed after ”

Each device is a real emulation in headless Chromium, not a resized window. It uses the device's viewport, pixel ratio, touch support, mobile viewport behaviour and user agent. A page with no viewport meta tag lays out at 980px on a phone, as it would on the real device.

It is the command-line and agent side of Facet, an open-source browser for responsive web development. Facet's device catalogue has 290+ profiles, from the iPhone SE to 2026 flagships, foldables, tablets, laptops and 4K monitors.

What it finds

On every device:

  • Horizontal scrolling, and the element that causes it (the table, not each of its cells)
  • Tap targets smaller than 24 × 24px on touch devices (WCAG 2.5.8)
  • Text smaller than 12px, and text that is cut off without an ellipsis
  • Form fields under 16px, which make iOS zoom in when focused
  • Viewport meta problems: missing, not device-width, or zoom disabled
  • Images that are far larger than needed, blurry on high-density screens, or missing dimensions
  • Fixed headers and banners that cover too much of a small screen
  • Console errors, uncaught exceptions and failed requests, per device. An error that only one device logs is a viewport-specific bug.

Command line

npx @chandra14/facet-check <url> [options]
Option
-d, --devices <list>Device ids, names, sizes like 1024x768, or a preset (default: popular)
-s, --screenshots <dir>Save a PNG of each device
--full-pageCapture the whole page, not only the first screen
--jsonPrint the full report as JSON
--allAlso list info-level notes
--fail-on <level>Exit 1 when a finding is at least error (default), warn or info; never always exits 0
--timeout <ms>Page load timeout (default 30000)
--list-devices [query]Show presets and the device catalogue

The URL can be a full URL, a bare host (example.com), a local dev server (localhost:3000, :5173) or a path to an HTML file.

Presets: popular (the six most common real-world sizes), default (phone, tablet, laptop), phones, latest, tablets, desktops, apple, foldables, extremes.

npx @chandra14/facet-check localhost:3000 -d phones --screenshots shots
npx @chandra14/facet-check https://example.com -d iphone-17,"Galaxy S26",ipad,1440x900 --json
In CI

The exit code is 1 when errors are found, so it can gate a pull request:

- run: npx @chandra14/facet-check http://localhost:4173 --fail-on error

MCP server for AI agents

facet-check mcp runs a Model Context Protocol server over stdio. An agent can then check its own CSS changes on many screen sizes and look at the result.

Claude Code

claude mcp add facet -- npx -y @chandra14/facet-check mcp

Cursor, VS Code, Claude Desktop and other clients

{
  "mcpServers": {
    "facet": { "command": "npx", "args": ["-y", "@chandra14/facet-check", "mcp"] }
  }
}
ToolWhat it does
check_responsiveLoads a URL on several devices and returns the problems on each, with selectors and fixes
screenshotReturns one labelled image per device (viewport or full page)
compare_elementMeasures one element on every device: size, visibility, font size, display, flex and grid
audit_accessibilityRuns axe-core on one device and returns WCAG violations with fixes
list_devicesLists the device catalogue and presets

Then ask, for example: "Check localhost:3000 on phones and fix anything that scrolls sideways."

Requirements

Node 20 or later and a Chromium-based browser. facet-check uses, in order: the browser at FACET_CHROME, Playwright's Chromium (npx playwright install chromium), Google Chrome, then Microsoft Edge. Most machines already have one of these.

Limits

  • Chromium only. An iPhone profile emulates the iPhone's screen, not Safari's WebKit engine. Safari-specific bugs still need Safari.
  • It checks the page as it is after load. Content behind a login or a click is out of reach from the command line.

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.