Check web pages for responsive design problems and screenshot them on phone, tablet and desktop.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
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).
Run
npx -y @chandra14/facet-check
MCP client config
{
"mcpServers": {
"facet": {
"command": "npx",
"args": [
"-y",
"@chandra14/facet-check"
]
}
}
}Facet is a free, open-source tool for testing responsive web design. It shows a web page on many phones, tablets, laptops and desktop monitors at once. It mirrors what you do in one device to all the others, and it checks every screen size for layout problems while you work: sideways scrolling, tiny tap targets, unreadable text and more.
Facet is an independent, open-source alternative to Responsively App. It has the same core idea, plus real device emulation and built-in audits. It shares no code with Responsively.
It comes in three forms that share one catalogue of 292 device profiles:
npx @chandra14/facet-check localhost:3000.https://chndr-prksh.github.io/facet/
Paste any link and it opens side by side on the devices you pick. A shared link reopens the same page on the same devices, for example this one.
localhost, so you can point it at a project in development.The limit every website of this kind has. A site can tell browsers not to display it inside another page, and most large sites do (55 of 71 popular sites checked in October 2026). Facet Web detects this and says so instead of showing an unexplained blank pane. Because it uses frames, it also gets the viewport size exactly right but cannot change pixel density, touch input or the user agent; the desktop app does.
Facet Helper (in extension/) is a small Chrome and Edge extension that removes that limit. In tabs showing Facet Web, and only there, it strips the headers that forbid framing, so any site loads. It also mirrors scrolling, clicks, typing and navigation between devices and flags devices where the page overflows sideways. Install it from the Help panel on the site (download, unzip, Load unpacked). It is not on the Chrome Web Store.
npm run web:dev # the website on http://localhost:5180
npm run test:web # 21 checks, with and without the extension
Pushing to main deploys the site to GitHub Pages.
facet-check loads a page in headless Chromium on several emulated devices and reports the problems on each. It gives the element at fault and how to fix it.
npx @chandra14/facet-check example.com # the six most common screen sizes
npx @chandra14/facet-check localhost:3000 -d phones --screenshots shots
npx @chandra14/facet-check https://example.com --json --fail-on error # for CI
It also runs as an MCP server, so a coding agent can check its own CSS changes across screen sizes:
claude mcp add facet -- npx -y @chandra14/facet-check mcp
Tools: check_responsive, screenshot, compare_element, audit_accessibility, list_devices. See cli/README.md for every option.
npm install
npm run dev # development, with hot reload
npm run pack # builds dist/mac-arm64/Facet.app (unsigned)
npm test # 55 end-to-end checks against the built app
Requires Node 20.19+ or 22.12+. npm run dist produces installers (dmg, nsis, AppImage); they are unsigned until you add signing credentials.
Devices
Real emulation, not a resized window. Each pane is driven over the Chrome DevTools Protocol, so a phone pane has the phone's pixel ratio, user agent, touch capability and mobile viewport behaviour. A page with no viewport meta tag lays out at 980px and shrinks, as it would on a real phone.
Mirroring. Scrolling, clicks, typing, form submits and navigation are replayed in every pane. Scroll is matched by relative position, so pages of different heights stay in step. A click on an element that is hidden at another viewport is skipped there. Only the pane you are using drives navigation, which is what prevents redirect loops when a site sends phones and desktops to different URLs.
Audits across all devices
Tools
Cmd/Ctrl+K) with every action in the app.AI agents. A built-in Model Context Protocol server lets a coding agent open pages, screenshot every device, and run the audits. Turn it on in Settings, then:
claude mcp add --transport http facet http://127.0.0.1:12790/mcp
Sixteen tools: get_state, navigate, list_devices, set_devices, screenshot, audit_responsive, audit_accessibility, get_meta, get_console, get_breakpoints, compare_element, read_page, click, type_text, scroll, set_emulation. The server is off by default, listens on 127.0.0.1 only, and rejects cross-origin requests.
292 profiles, many covering several models that share a screen: 164 phones, 14 foldables, 34 tablets, 33 laptops, 23 desktop monitors, 11 watches, and TVs, consoles and smart displays. It runs from the iPhone 4 to 2026 models (iPhone 18 Pro, Galaxy S26, Pixel 11) and includes the most common real-world sizes, such as Android 360 × 800 and a Full HD Windows laptop at 125% scaling (1536 × 864).
Apple publishes logical resolutions, so those entries are exact. Android makers do not, and the value shifts with the user's display-size setting; entries derived from the panel resolution are marked ≈. Sources: Apple's specifications, the Chrome DevTools device list, yesviz.com, screensize.io and webmobilefirst.com. The catalogue lives in src/shared/devices.ts.
Cmd+K | Command palette |
Cmd+L | Address bar |
Cmd+T / Cmd+W | New tab / close tab |
Cmd+R / Cmd+Shift+R | Reload all / hard reload |
Cmd+I | Compare an element across devices |
Cmd+Shift+A | Run all audits |
Cmd+Shift+S / Cmd+Alt+S | Screenshot all devices / full page |
Cmd+Shift+P | Screenshot studio |
Cmd+Shift+D | Toggle light / dark |
Cmd+Shift+M | Manage devices |
Cmd+Alt+R | Rotate all |
Cmd+J | Side panel |
Cmd+0 / Cmd+= / Cmd+- | Fit / zoom in / zoom out |
Use Ctrl in place of Cmd on Windows and Linux. Shortcuts keep working while a device pane has focus.
ontouchstart) is always emulated per device; the hand button in the toolbar additionally turns mouse drags into touch events while the pointer is over a touch pane.src/
shared/ types, device catalogue, URL helpers
main/ Electron main process
panes.ts one CDP session per device pane; applies emulation
capture.ts screenshots (viewport, and scroll-and-stitch full page)
mcp.ts Model Context Protocol server
services.ts persistence, cookies, link checker, dev-server scan, file watching
preload/
host.ts narrow, allow-listed bridge for the app UI
guest.ts runs in every pane: mirroring, metrics, vitals, element picker
renderer/ React UI
lib/views.ts pane registry, navigation and mirroring rules
lib/scripts.ts audits that are serialised and run inside pages
lib/overlays.ts the debug overlays
panels/ the nine side panels
web/ Facet Web, the static site (shares src/shared and the UI kit)
extension/ Facet Helper, the browser extension for Facet Web
cli/ facet-check, the command-line tool and stdio MCP server (shares the device catalogue and audits)
e2e/ tests for the app, the website and the CLI, visual tour, fixture site
Pages run in sandboxed <webview> guests with context isolation and no Node access. The app UI has a strict content security policy and talks to the main process only through allow-listed channels.
npm test builds the desktop app, launches it, and loads a fixture site with deliberate defects. It checks emulated viewports, mirroring (including a real pointer click through a zoomed pane), every audit, overlays, rotation, the MCP server, and reads pixels back from screenshots of a colour-block page to confirm captures are correct on every device. npm run tour walks every screen and saves screenshots to e2e/artifacts/ for review. npm run test:packaged runs the same checks against the packaged app. npm run test:cli runs facet-check and its MCP server against the same fixture site (30 checks).
How do I test my website on different screen sizes?
Open Facet Web, paste the link, and pick devices or a preset such as Most common sizes. For a full check with real emulation, use the desktop app, or run npx @chandra14/facet-check <url> to get a list of problems per device.
How do I find what makes my page scroll sideways on mobile?
Run npx @chandra14/facet-check <url> -d phones. For each phone it reports how far the page overflows and names the outermost element that sticks out, with a CSS selector. The desktop app's Issues panel shows the same, live, while you edit.
Can an AI coding agent check responsive design?
Yes. Add the MCP server with claude mcp add facet -- npx -y @chandra14/facet-check mcp, or the same command in Cursor, VS Code or any MCP client. The agent can then load a page on many devices, read the problems, take screenshots and compare an element across breakpoints.
How is this different from Chrome DevTools device mode? DevTools shows one viewport at a time. Facet shows many side by side, keeps them in step as you scroll and click, and audits all of them at once.
Does it test Safari? No. Every device renders with Chromium. An iPhone profile has the iPhone's screen size, pixel ratio, touch and user agent, but not Safari's WebKit engine.
Is Facet a fork of Responsively App? No. It was written from scratch and shares no code with Responsively. Facet is MIT-licensed.