ViewportWitness by Apex Labs
Server Details
Paid browser QA for AI agents across phone and desktop viewports, using x402.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Baffles78/viewport-witness
- GitHub Stars
- 0
TDQS
Scored across 4 tools
The four tools have largely distinct purposes: check_page runs general QA, verify_page runs assertion-based checks, compare_page diffs against a baseline, and get_report retrieves results. There is mild potential confusion between check_page and verify_page since both execute browser QA, but their descriptions clearly separate general QA from declarative assertions.
All tool names follow the same verb_noun underscore pattern: check_page, compare_page, get_report, verify_page. The naming is consistent and predictable, making it easy for an agent to infer tool behavior from the name alone.
Four tools is well-scoped for a viewport QA service: run QA, verify assertions, compare baselines, and retrieve reports. Each tool has a distinct role and none feel redundant or extraneous.
The core workflow is covered: submit checks, verify assertions, compare against baselines, and retrieve results. Minor gaps exist around explicit baseline management and job cancellation, but agents can complete the primary QA lifecycle without dead ends.
Available Tools
4 toolscheck_pageADestructiveInspect
Run browser QA across three viewports (phone portrait, phone landscape, desktop), including bounded performance evidence and plain-English diagnosis with safe structural locator hints. Costs $0.08 USDC via x402. Requires an x402-aware client to authorise payment; standard AI assistants cannot automatically sign x402.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false and destructiveHint=true, and the description adds valuable context beyond them: the exact cost, the payment mechanism, and the client requirement. It also describes output characteristics ('bounded performance evidence', 'plain-English diagnosis', 'safe structural locator hints'). No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first packs the core function and outputs, the second states cost, the third states the auth prerequisite. The most important information is front-loaded, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description does a good job of explaining what the agent will receive: performance evidence, diagnosis, and locator hints. It also covers cost and payment prerequisites. It could be more complete by explaining what happens if the x402 payment is not authorized, but overall it is sufficiently complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the url parameter at all. The schema itself defines url with format and maxLength, but the description adds no semantic guidance about what URLs are acceptable or how they are used. With low coverage, the description should compensate, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Run browser QA') and resource ('page') across three named viewports, with concrete outputs like performance evidence and diagnosis. It does not explicitly differentiate from sibling tools such as verify_page or compare_page, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on prerequisites: it costs $0.08 USDC via x402 and requires an x402-aware client, explicitly noting that standard AI assistants cannot automatically sign x402. This gives an agent important selection criteria, though it does not name alternatives or state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_pageADestructiveInspect
Compare a page against a completed ViewportWitness baseline job. Returns pixel-diff percentages, new/resolved accessibility issue IDs, error deltas, bounded performance evidence, and plain-English diagnosis. Costs $0.12 USDC via x402. Requires an x402-aware client; standard AI assistants cannot automatically sign x402.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| baselineJobId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, and destructiveHint=true, which is unusual for a comparison tool. The description adds critical behavioral context: it costs $0.12 USDC via x402 and requires an x402-aware client, which is a significant operational constraint. However, the destructiveHint=true annotation is not explained in the description—it's unclear what destructive side effect occurs. This is a minor gap given the description does disclose the payment and client requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no waste. The core function is front-loaded, outputs are listed compactly, and the cost/client constraint is saved for the end. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with no output schema, the description covers the main inputs, outputs, cost, and client requirement. It doesn't explain the destructiveHint=true annotation or what 'bounded performance evidence' means, but the core information an agent needs to decide whether to call this tool is present. The missing output schema is a structural gap, not a description gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'url' and 'baselineJobId' implicitly by saying 'Compare a page against a completed ViewportWitness baseline job'—the page maps to url and the baseline job maps to baselineJobId. However, it doesn't add detail about URL format, whether the URL must be publicly accessible, or how to obtain a baselineJobId. The description adds some meaning but doesn't fully compensate for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: comparing a page against a completed ViewportWitness baseline job. It lists specific outputs (pixel-diff percentages, accessibility issue IDs, error deltas, performance evidence, diagnosis) and distinguishes it from siblings by naming the baseline job requirement. The verb 'compare' plus the resource 'page against baseline job' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you have a completed baseline job and want to compare a page against it. It doesn't explicitly state when not to use it or name alternatives (check_page, get_report, verify_page), but the baseline job requirement provides clear context. The cost and x402 client requirement are important usage constraints that are disclosed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportARead-onlyInspect
Retrieve the status or completed QA report for a previously submitted job. Free and read-only. Poll until status is "complete", "failed", or "retryable". No payment required.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds significant behavioral context: it is 'free', requires 'no payment', and specifies the polling pattern with exact statuses (complete, failed, retryable). This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, purposeful sentences. The main purpose is front-loaded, and each sentence adds distinct value (purpose, cost, polling behavior, payment). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with no output schema, the description covers the essential usage: what it retrieves, how to poll, and the terminal statuses. It does not specify the exact response structure, but for a polling tool this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explicitly describe the jobId parameter. However, the phrase 'previously submitted job' implicitly indicates the jobId identifies that job. It adds minimal meaning but does not fully compensate for the lack of schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and the resource 'status or completed QA report' for a 'previously submitted job'. It is distinct from sibling tools like check_page, compare_page, verify_page which focus on pages, not reports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use: polling a previously submitted job. Includes explicit polling instructions with target statuses. Does not mention alternatives, but siblings are unrelated, so no exclusion is necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_pageADestructiveInspect
Check up to 20 declarative assertions across three viewports and return bounded performance evidence plus plain-English diagnosis. Assertion types: noHorizontalOverflow, noConsoleErrors, textVisible, titleIncludes, selectorExists, selectorVisible. Costs $0.10 USDC via x402. Requires an x402-aware client; standard AI assistants cannot automatically sign x402.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| assertions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is not read-only, open-world, and potentially destructive, and the description does not contradict them. It adds valuable behavioral context beyond annotations: the $0.10 USDC cost, the x402 client requirement, the three-viewport behavior, and the bounded performance evidence. It does not fully detail the nature of any destructive side effects, but the annotation covers that signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core behavior comes first, followed by the assertion-type enumeration, then cost and client requirements. Every sentence contributes essential information, and there is no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid, externally-facing verification tool with no output schema, the description covers the critical operational context: maximum assertions, assertion types, viewports, cost, and the x402 authentication requirement. The return value is only summarized as 'bounded performance evidence plus plain-English diagnosis,' leaving the exact response shape unstated. Still, this is adequate for an agent to judge whether and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it lists all six supported assertion type names and the 'up to 20' limit, which maps directly to the assertions array's maxItems. It does not explain the 'value' and 'selector' subfields, but the schema's self-describing property names and required fields make those reasonably inferable. The 'url' parameter is unambiguous from its name and format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: checking up to 20 declarative assertions across three viewports and returning performance evidence plus diagnosis. It also lists the exact assertion types. However, it does not explicitly distinguish verify_page from its siblings like check_page or compare_page, so it misses the sibling-differentiation component of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when declarative assertion checks are needed across viewports. It also gives a critical constraint: an x402-aware client is required and standard AI assistants cannot automatically sign x402. But it never mentions alternatives or when to choose check_page, compare_page, or get_report instead, so usage guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
check_page - First observed
compare_page - First observed
get_report - First observed
verify_page
Related MCP Connectors
Browser-based QA for AI-built software. Test pages with real browsers via agents.
Pay-per-call browser rendering and x402 marketplace ranking for AI agents, billed via USDC.
AI QA tester — real browsers scan sites for bugs, SEO, perf, and accessibility issues via chat.
Web intelligence for AI agents: fetch, render, extract, research. x402 micropayments, no API keys.
Related MCP Servers
- AlicenseAqualityCmaintenanceAI-native browser testing, directly from your coding agent.3MIT
- FlicenseNot gradedqualityDmaintenanceBrowser-based QA testing for AI-built software. Agents open real browsers (via Selenium), navigate pages, fill forms, click buttons, and report findings. Two modes: targeted tests (30-90s) and full-site discovery scans (3-15min).-
- AlicenseAqualityBmaintenanceEnables AI coding agents to see, measure, and verify web pages through a real Chrome browser, including screenshots, responsive layout and accessibility audits, pixel diffing against baselines, secure logins, and deployed-fix verification.271MIT
- AlicenseNot gradedqualityBmaintenanceEnables agent harnesses to run autonomous browser-based QA on staging apps, triage and fix found bugs, and re-verify them using the agent's existing model access.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.