Deterministically diagnose and verify live-page CSS, layout, interaction, pixel, and contrast issues through Chrome DevTools Protocol.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Visionaire Engine.
connectALWAYS the first call: start (or restart) the browser session โ launch a local Chrome by default, or attach to the user's real, logged-in browser via browserUrl (e.g. http://127.0.0.1:9222, for pages behind auth like wp-admin or a dashboard). Pass url to load a page immediately. Every other tool needs a live session; if a tool reports no session or a wedged browser, call connect again to reset.
navigateNavigate the connected tab to a URL โ or, with no url, hard-reload the current page. Pass bypassCache: true when a stale cached stylesheet/script keeps being served (disables the browser cache for the rest of the session). All element uids from earlier snapshots become stale โ take a fresh page_snapshot afterwards.
set_viewportEmulate a viewport size (and optional deviceScaleFactor) on the connected tab, then re-inspect. Use for responsive bugs โ 'it breaks on mobile', 'the menu is wrong at tablet width', anything behind a media query โ since resizing can change which @media rule wins. Follow with a fresh page_snapshot / explain_styles at the new size.
page_snapshotToken-budgeted census of the rendered page โ a nested, uid-keyed element tree with geometry and visibility flags. Call this FIRST after connect to orient yourself and to obtain the stable uids every other tool targets. Reach for it whenever you do not yet know the page structure or an element uid. To find one specific element by description use find_elements; to see the page visually use annotated_screenshot.
page_originsInventory of every stylesheet (URL, byte size, origin, source-map presence) plus platform detection โ WordPress version, theme/child theme, page builder (Elementor/Divi), and CSS optimizer. Use before proposing edits to learn where the CSS actually lives, when a file:line points at a generated/minified bundle and you need the true source, or to answer 'is this WordPress/Elementor?' and 'which stylesheet owns this?'.
inspect_elementThe 'WHAT' for one element: box model (margins/padding/border), key computed styles as authored โ used values, a visibility verdict, and layout context. Use when you need an element's current rendered state โ its real size, spacing, or whether it is actually visible/where it sits. These are the values the page ACTUALLY renders, so it catches the common case where the source rule you'd edit is overridden or never applied. For 'WHY it looks like this / which rule wins' use explain_styles; for 'which ancestor constrains its size or position' use inspect_ancestors.
Which rule, which file, which line โ and why it wins.

The problem: Something looks off. You screenshot it, explain it, the LLM guesses wrong, you re-explain.
The solution: Visionaire reads the live page and hands the LLM the exact rule, file, and line. Right fix, first try.

You shouldn't have to write a paragraph to explain a 2px margin bug โ and now you don't. Less explaining, more fixing: built for developers, vibe coders, and anyone shipping site design changes with an LLM in the loop.
Status: v0.7 โ 28 tools, 435 tests (252 unit + 183 end-to-end on real Chrome), a 24-case seeded-bug benchmark (npm run bench), verified live against wordpress.org.
assert_visual (a 17-type assertion grammar โ PASS/FAIL verdicts with measured pixels, offending uids, and re-runnable named suites), visual_diff (pixel diff vs a mockup or recorded baseline, divergent regions mapped to element uids), impact_preview (blast radius + sandboxed dry-run before editing a shared selector), diagnose (ranked "why is this broken" culprits with measured evidence), responsive_sweep (one call โ per-viewport verdict matrix), capture_proof (before/after evidence bundles with a verdict delta); the verify-after-edit harness for Claude Code and Cursor (npx visionaire-engine init-harness); style_diff { capture_pixels } baselines; check_alignment deprecated in favor of assert_visualcheck_alignment (group alignment / gap-rhythm / grid / pixel-snap audit) and pick_color (actual painted-pixel sampling + WCAG contrast verdicts)inject_css โ the live fix loop (trial a fix on the page, see what changed, converge, write source once); navigate { bypassCache } for stale-stylesheet hard reloads; blast-radius + scoped-fix reporting on explain_styles (change the button, not all buttons)interact to drive the UI into a state and inspect it; measure_element for sub-pixel glyph/text-ink centering; an evaluate escape hatch; element-scoped crops/zoom on annotated_screenshot; match:"any" / visibleOnly:false on find_elements; zero-config cold-start Chrome discoveryAI coding agents are structurally blind to what they render. They emit CSS as text and never see the pixels that come back โ so they guess, insist the guess worked, and loop. The community has a name for it now: "CSS gaslighting." Visionaire gives the agent deterministic eyes on the real render โ measured geometry, the actual cascade winner, PASS/FAIL verdicts โ so the loop ends. If you want the problem in other people's words first, start here:
Why AI Sucks At Front End โ Adam Argyle on why models can't reason about layout they can't perceive.
"It's an LLM, not a rendering engine! It's notoriously bad at math, and throwing screenshots at it means very little. It's stabbing in the dark."
Is AI Causing a Repeat of Frontend's Lost Decade? โ Mauro Bieg on the wider cost of AI-generated frontend.
"AI is enabling lots of AI slop โ but this doesn't mean we don't still need people who know what they're doing."
Ask an LLM to fix a visual bug today and it gets one of two incomplete pictures: pixels, with no link back to code, or code, with no rendering truth about what's actually winning on screen. Existing browser MCPs make this worse for design work specifically โ they ship accessibility snapshots that deliberately strip out all styling. What's missing is explanation and attribution:
Visionaire answers those questions with zero AI inside โ everything is computed deterministically from the Chrome DevTools Protocol plus closed rulesets. The fuzzy part (matching "the button under the hero looks off" to an actual element) stays with the calling LLM, which gets uid-keyed snapshots, search tools, and annotated screenshots to do that cheaply.
Live against wordpress.org:
Winner, losers with the decisive loss reason, and an honest edit pointer for each โ including WordPress-aware answers like "Site Editor โ Styles" instead of a useless path to a generated file.
Requires Node โฅ 20 and Chrome/Chromium installed.
Fastest path โ register straight from npm with Claude Code (no clone, no build):
Or run from a clone (for development or a pinned local build):
Using GitHub Copilot, Cursor, Claude Desktop, Google Antigravity, or another client? See docs/clients.md for a copy-paste config for each, plus browser-install help for Linux/WSL/Docker.
Run it from your project's root directory โ Visionaire is at its best when the agent has both the running site and its source on disk, so it can cross-reference the two. Ground before you search: take a page_snapshot (or read the source) to get real element names instead of guessing selectors. If a selector matches nothing, the error suggests the closest real ids/classes on the page.
Then, in a session:
connect { url: "https://your-site.com" } โ launches Chrome (or { browserUrl: "http://127.0.0.1:9222" } to attach to your real, logged-in browser)page_snapshot {} โ a uid-keyed census of what's visible; target elements by their uid, not invented selectorsexplain_styles { uid: "e17", property: "margin-bottom" } โ cascade verdict with file:lineTry it without an MCP client:
Session & grounding โ get connected and find the right element without guessing.
| Tool | Purpose |
|---|---|
connect / navigate / set_viewport | Launch or attach to Chrome, go to a URL (bypassCache for hard reloads), emulate viewports |
page_snapshot | Pruned, uid-keyed tree of what's visible โ geometry, layout hints, invisibility reasons |
page_origins | Stylesheet inventory + platform detection (WordPress version, theme, builders, optimizers) |
find_elements | Deterministic search by text, selector, role, or screen region โ AND-combined by default, match:"any" for a union, visibleOnly:false to include hidden elements |
node_at_point | x,y โ element uid + ancestor chain |
pick_element | Human-in-the-loop grounding: DevTools-style hover highlight, the user clicks the element that looks wrong |
Explanation โ the "why," with a receipt.
| Tool | Purpose |
|---|---|
inspect_element | The "what": box model, computed values, visibility verdict |
explain_styles | The wedge. Cascade winner/loser per property with file:line + origin attribution, each winner's blast radius (how many other elements it styles), and a scoped-fix selector for just this element |
inspect_ancestors | Constraint-chain walk: which ancestor constrains width/overflow/stacking |
get_listeners | Event listeners on an element + its ancestors, with handler file:line and capture/passive/once flags |
explain_animations | Animations/transitions touching an element: live census, declared rules with file:line, and a closed "why is it not smooth" ruleset |
Pixel-level checks โ new in v0.6.
Factual signals from GitHub, npm, and our automated checks โ not a rating.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mi60dev-visionaire-engine)<a href="https://allmcps.com/mcp/mi60dev-visionaire-engine"><img src="https://allmcps.com/api/badge/mi60dev-visionaire-engine?style=directory" alt="Visionaire Engine on AllMCPs" /></a>