ViewportWitness by Apex Labs

Agent website testing: browser QA, visual regression, Markdown extraction, and security checks.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
90%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,385Tokens (tool definitions)
~1.7 KBTypical response size
Moderate attention impact (1.08% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "viewport-witness": {
      "url": "https://qa.honeygate.app/mcp"
    }
  }
}

Remote endpoints

https://qa.honeygate.app/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🔴check_page(url)

Choose this for broad website testing when the caller wants screenshots, responsive layout checks, accessibility findings, console/network errors, performance evidence, and a release diagnosis across phone portrait, phone landscape, and desktop. For explicit pass/fail assertions use verify_page instead. Costs $0.08 USDC via x402. Requires an x402-aware client to authorise payment; standard AI assistants cannot automatically sign x402.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Public HTTPS page URL. Private, loopback, credentialed, and non-HTTPS URLs are rejected."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴verify_page(url, assertions)

Choose this only when the caller supplies explicit website assertions that need pass/fail results across three viewports. For broad exploratory browser QA use check_page instead. 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.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Public HTTPS page URL. Private, loopback, credentialed, and non-HTTPS URLs are rejected."
    },
    "assertions": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "noHorizontalOverflow"
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "noConsoleErrors"
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "textVisible"
              },
              "value": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200,
                "description": "Visible text to find on the rendered page."
              }
            },
            "required": [
              "type",
              "value"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "titleIncludes"
              },
              "value": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200,
                "description": "Text that the document title must include."
              }
            },
            "required": [
              "type",
              "value"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "selectorExists"
              },
              "selector": {
                "type": "string",
                "minLength": 1,
                "maxLength": 300,
                "description": "CSS selector that must exist in the DOM."
              }
            },
            "required": [
              "type",
              "selector"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "selectorVisible"
              },
              "selector": {
                "type": "string",
                "minLength": 1,
                "maxLength": 300,
                "description": "CSS selector that must be visibly rendered."
              }
            },
            "required": [
              "type",
              "selector"
            ],
            "additionalProperties": false
          }
        ]
      },
      "minItems": 1,
      "maxItems": 20,
      "description": "One to twenty explicit pass/fail assertions to evaluate across all three viewports."
    }
  },
  "required": [
    "url",
    "assertions"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴compare_page(url, baselineJobId)

Choose this for visual regression testing after check_page has produced a completed, unexpired baseline. Compares screenshots and QA evidence, returning pixel-diff percentages, new or resolved accessibility issues, error deltas, performance evidence, and diagnosis. Costs $0.12 USDC via x402. Requires an x402-aware client; standard AI assistants cannot automatically sign x402.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Public HTTPS page URL. Private, loopback, credentialed, and non-HTTPS URLs are rejected."
    },
    "baselineJobId": {
      "type": "string",
      "format": "uuid",
      "description": "Completed, unexpired ViewportWitness check job to use as the visual baseline."
    }
  },
  "required": [
    "url",
    "baselineJobId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴extract_page(url, maxOutputTokens)

Choose this when an agent needs the readable content of a public webpage as deterministic clean Markdown, without screenshots or browser execution. Costs $0.005 USDC via x402.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Public HTTPS page URL. Private, loopback, credentialed, and non-HTTPS URLs are rejected."
    },
    "maxOutputTokens": {
      "type": "integer",
      "minimum": 500,
      "maximum": 12000,
      "description": "Optional approximate output budget from 500 to 12000 tokens."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴web_release_gate(url)

Choose this for a passive website release-security review of headers, cookie flags, mixed content, cross-origin script integrity, and server disclosure. It does not run browser QA, probe the site, execute code, or replace a security audit. Costs $0.05 USDC via x402.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Public HTTPS page URL. Private, loopback, credentialed, and non-HTTPS URLs are rejected."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_report(jobId)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "jobId": {
      "type": "string",
      "format": "uuid",
      "description": "ViewportWitness job UUID returned by a paid tool."
    }
  },
  "required": [
    "jobId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools