Quick setup
The MCP server is always available when the dev server is running — no extra flags needed:Connect your AI tool
- Claude Code (MCP)
- HTTP Bridge
Add to your project’s Claude Code auto-discovers the tools on connection.
.mcp.json:Available tools
The dev server provides 21 MCP tools that agents can call — 9 observability tools and 12 browser interaction tools (11 connected-tab + 1 headless screenshot):vertz_get_errors
Returns current compilation and runtime errors with file paths, line numbers, code snippets, and fix suggestions.
vertz_render_page
Server-side renders a URL and returns an HTML “text screenshot” with render timing and metadata.
vertz_get_audit_log
Returns a unified timeline of all server events — API requests, SSR renders, compilations, file changes, and errors — with nanosecond-precision timestamps.
type filters by event kind (comma-separated): api_request, ssr_render, compilation, file_change, error. since filters events after an ISO 8601 timestamp.
When to use: To understand what happened in the server after a change — did the API return errors? Did SSR fail? Were there compilation issues?
vertz_get_diagnostics
Returns a health snapshot: uptime, compilation cache stats, module graph size, connected HMR clients, SSR pool metrics, and current errors.
vertz_get_api_spec
Returns an OpenAPI 3.1 specification with all entity CRUD routes, service endpoints, request/response schemas, and access rules.
filter is optional — comma-separated entity/service names to include. Without it, returns the full spec.
When to use: To understand the API surface when writing frontend code or integration tests.
vertz_render_component
Renders a single component in isolation with optional props.
vertz_navigate
Triggers client-side navigation in the browser via the HMR WebSocket — no full page reload.
vertz_get_events_url
Returns the WebSocket URL for real-time event push, so agents can subscribe to live updates instead of polling.
vertz_get_console (deprecated)
Use vertz_get_audit_log instead — it provides the same information in a more structured, filterable format.
Browser interaction tools
These tools let agents interact with the live browser page — clicking buttons, filling forms, reading page state — without needing a separate browser automation tool like Playwright.vertz_browser_list_tabs
Lists all connected browser tabs with their current URL, title, and control status.
vertz_browser_connect
Connects to a browser tab for interactive control. Returns a session ID and an initial page snapshot showing all interactive elements.
vertz_browser_disconnect
Releases a browser control session.
vertz_browser_snapshot
Returns a structured snapshot of the page: interactive elements with refs, form structure, focused element, and current values.
- Elements: inputs, buttons, selects, links, checkboxes — each with a stable
reffor targeting - Forms: form elements with their field refs, action, and method
- Focused element: which element currently has focus
- URL and title: current page state
vertz_browser_click
Clicks an element. Target can be an element ref from a snapshot, a CSS selector, or a text/name/label matcher.
vertz_browser_type
Types text into an input or textarea.
vertz_browser_select
Selects an option in a <select> element.
vertz_browser_fill_form
Fills multiple form fields at once. Handles text inputs, textareas, selects, checkboxes, and radio buttons.
vertz_browser_submit
Submits a form. Waits for navigation if it occurs (up to 2s).
vertz_browser_press_key
Presses a keyboard key on the currently focused element.
vertz_browser_wait
Waits for a condition to be met in the browser, polling every 100ms.
vertz_browser_screenshot
Headless pixel-perfect PNG of any route served by the dev server. Returns the image inline (the
agent sees it) plus a local file path and URL that a human can click to open the PNG.
Response
Two MCP content blocks: an
image block with the base64-encoded PNG and a text block with
stringified metadata:
url field is a local dev-server link —
share it with humans in chat messages; they can click it to open the PNG directly.
Error codes (MCP isError: true with stringified JSON in the text block):
Scope limits (v1)
- Same-origin only. Paths and
localhost/127.0.0.1/::1URLs pass; everything else returnsURL_INVALID. - Public routes only. If the route redirects to an auth gate, the tool returns
AUTH_REQUIREDrather than screenshotting the login screen. Authenticated-route capture ships in a later phase. - No session sharing. Each call launches an isolated Chromium page — cookies and local storage don’t carry over from the
vertz_browser_*connected-tab tools.
.vertz/artifacts/screenshots/ (gitignored). Filenames are
<UTC-iso>-<slug>-<viewport>.png, lexicographically sortable so the newest is last:
- Before reporting a UI change as done, call
vertz_browser_screenshot({ url: '<the-affected-route>' })and compare against what the task asked for. - Check layout at mobile AND desktop with two calls that differ only in
viewport. - Narrow noisy full-page captures with
crop— either a CSS selector or{ text: "..." }. waitFor: "networkidle"is the safest default; use"domcontentloaded"only when you explicitly want to see a loading state.
Element targeting
All interaction tools accept flexible targeting:Browser interaction workflow
Real-time events
Instead of polling, agents can subscribe to a WebSocket stream for live updates:Event types
Filtering
Subscribe to specific events via query parameter:HTTP bridge
The HTTP bridge (--bridge-port) exposes the same capabilities as plain REST endpoints for tools that don’t support MCP or WebSocket:
Example: calling a tool via the bridge
Recommended agent workflow
The dev server tools are most effective when agents follow this pattern:- Make a code change (edit a file)
- Check for errors — call
vertz_get_errorsto catch compilation/type issues immediately - Check the audit log — call
vertz_get_audit_logwithtype: "error"to see if runtime errors occurred - Verify the UI — call
vertz_render_pageto see the rendered output - Interact with the page — call
vertz_browser_connect, then use click/type/fill_form/submit to test interactive behavior - Only then report success — don’t tell the user “it works” until you’ve verified via the tools
Diagnostic endpoints
These HTTP endpoints are always available (no MCP or bridge needed):
These are the same underlying handlers as the MCP tools, exposed as direct HTTP endpoints for simpler integrations.