fovea-web
Supports installing the Fovea Web extension in Brave to perform mobile-first responsive audits, capture screenshot matrices, and automate the active tab through CDP-based actions such as navigation, clicking, typing, scrolling, and JavaScript evaluation.
Supports loading the Fovea Web extension in Firefox via the Firefox-specific manifest to provide responsive layout auditing, viewport and media query introspection, touch swipes, and browser automation on the active tab.
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., "@fovea-webrun a responsive audit on this page"
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.
Fovea Web
Cross-browser MCP server + Manifest V3 extension for mobile-first layout auditing and browser automation. The only MCP that thinks like a responsive QA, not just a click-bot.
Architecture
AI Harness <--(Stdio/MCP)--> MCP Server <--(WebSocket :8080)--> Extension Background Worker <--(CDP/DOM)--> Web Page
keeps login (extension) vs disposable profile (Playwright)Related MCP server: Playwright Pool
Why Fovea Web vs Playwright / chrome-devtools-mcp / BrowserTools
Feature | Fovea Web | Playwright MCP (52 tools) | chrome-devtools-mcp (57) | BrowserTools (16) |
Mobile audit (overflow, viewport, tap targets) | ✅ | ❌ only | ❌ only | ❌ |
Touch | ✅ | ❌ mouse only | ❌ | ❌ |
VisualViewport + safe-area | ✅ | ❌ | ❌ | ❌ |
Media query introspection | ✅ | ❌ | ❌ | ❌ |
Keeps logged-in session | ✅ extension | ❌ isolated profile | ❌ | ✅ read-only |
🚀 Quick Start
1. Build
npm install
npm run build2. Load Extension
Chrome / Brave / Edge:
chrome://extensions→ Developer Mode → Load unpacked →dist/extensionFirefox:
about:debugging#/runtime/this-firefox→ Load Temporary Add-on →dist/extension/manifest.firefox.json
Popup shows ● Connected / ○ Disconnected, active tabs, and a one-click Audit This Page checker.
3. Connect to AI Harness
Add to mcp.json:
{
"mcpServers": {
"fovea-web": {
"command": "node",
"args": ["/path/to/fovea-web/dist/server/index.js"],
"env": { "WS_PORT": "8080" }
}
}
}Or use the included .mcp.json.
Tools (16)
Tool | Description |
| Emulate 8 presets (SE/14/Pro Max/Pixel/iPad/Desktop/HD/Custom) + DPR/touch/UA, full-page screenshot or |
| Chrome a11y tree via CDP |
| CSS/XPath click |
| up/down/top/bottom |
| Navigate active tab, wait for load |
| Real keystrokes into inputs (clear/submit/delay) |
|
|
| Hover to open menus |
| Run JS in page, return JSON |
| Buffered console (log/warn/error) |
| inner/outer/visualViewport/DPR/scrollWidth/safeArea/meta viewport |
| List media queries + |
| ⭐ Cycle 5 viewports, detect |
| ⭐ One-call screenshots across |
| Touch swipe (up/down/left/right) |
| list/create/close tabs |
Example — responsive audit
Ask your LLM: "audit responsive layout for this page, include screenshots" → calls audit_responsive{devices:[iPhone_SE, Pixel_7, Desktop], includeScreenshots:true} → returns:
# Responsive Audit — https://example.com
_2025-08-20_ — ❌ FAIL — 2 errors, 1 warnings
| Viewport | Overflow | Issues |
| iPhone_SE (375px) | ⚠️ YES | 2 |
## iPhone_SE — 2 issue(s)
- 🔴 HORIZONTAL_OVERFLOW document — scrollWidth 412px > viewport 375px
- 🔴 FIXED_WIDTH_OVERFLOW div.hero — width 400px > viewport 375pxProject Structure
fovea-web/
├── src/
│ ├── protocol.ts # WS wire + 8 device presets + ViewportMetrics/AuditResult
│ ├── tools.ts # Zod schemas for 16 tools
│ ├── ws-bridge.ts # WS server :8080 with req_id timeout map
│ ├── layout-analyzer.ts # analyzeLayout + auditBreakpoint + formatAuditAsMarkdown
│ └── mcp-server.ts # 16 MCP tools via stdio
├── extension/
│ ├── manifest.json # MV3 + alarms keep-alive (Fovea Web)
│ ├── background.ts # CDP + scripting + audit orchestration + badge
│ ├── content.ts # console hook + viewport/media/audit snapshot
│ ├── popup.html/ts # status + tabs + quick audit
│ └── manifest.firefox.json
└── tests/
├── mcp-server.test.ts
└── layout-analyzer.test.tsTesting
npm test # vitest
npm run lint # tsc --noEmit
npm run build # esbuild -> dist/Env
See .env.example. WS_PORT defaults to 8080. Extension uses chrome.alarms keep-alive to survive MV3 idle.
Roadmap
Device matrix + touch + viewport + media introspection
Audit + matrix (differentiators)
Network throttling (
slow4g/cpu4x), Lighthouse-mobileVisual regression store + diff threshold
This server cannot be deployed
Maintenance
Related MCP Connectors
Validate HTML/CSS, audit SEO and JSON-LD, check links, and capture responsive screenshots.
Browserless MCP — wraps the Browserless headless-Chromium REST API (browserless.io)
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
MCP server for visual regression testing: triage a PR's UI diffs from your coding agent.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables web browser automation through Playwright, providing tools for navigation, element interaction, screenshot capture, and accessibility snapshots. Uses streamableHttp transport for seamless integration with MCP clients.61,199 npmMIT
- AlicenseNot gradedqualityCmaintenanceMCP server for browser automation with shared authentication and built-in UI auditing.MIT
- FlicenseAqualityCmaintenanceProvides browser automation using Selenium WebDriver, enabling web navigation, element interaction, screenshots, and JavaScript execution via MCP.10-
- AlicenseNot gradedqualityCmaintenanceVisual frontend accessibility inspector MCP server. WCAG contrast checking, touch target validation, heading hierarchy audits, responsive screenshots, and S+ grading across mobile and desktop viewports.MIT