Skip to main content
Glama

webability

Verify an accessibility fix

verify_fix
Read-onlyIdempotent

Re-scan a specific element after applying an accessibility fix and confirm the violation is gone — closes the loop that find-only tools leave open. After you edit the code and serve it (deployed, staging, or http://localhost:3000), call this with the URL and the selector you fixed to get a machine-checked verified: true|false (DOM engines only — visual_audit findings and needs-review items are out of scope). Pass the WCAG criterion (e.g. "1.1.1") or axe rule id (e.g. "color-contrast") to check just that criterion; omit it to require the element be clean of ALL violations. A blocked page (bot-challenge / HTTP error) is reported as unverified, never a pass — verification fails closed. IMPORTANT: if your fix changed the element's class or id, the original selector may no longer match anything, which reads as verified — re-run scan_page or pass the updated selector to be sure. Pair with scan_page → generate_ai_fix → verify_fix for a full find-fix-verify cycle. NOTE: on this HOSTED server, localhost and private addresses are refused — it runs in our cloud and cannot reach your machine. Two ways to scan a local dev server: run the MCP locally (npx -y @webability/mcp, simplest — nothing leaves the machine), or open a tunnel (webability-tunnel --port 3000) and pass its URL as url together with the printed secret as tunnel_secret.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesURL now serving the fix (deployed, staging, or http://localhost:3000). Also accepted as `page` or `pageUrl`.
wcagNoOptional: WCAG criterion (e.g. "1.1.1", "1.4.3") or axe rule id (e.g. "color-contrast") to verify specifically. Omit to require the element be free of ALL violations.
contextYesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
selectorYesCSS selector of the element you fixed — use the `selector` from the original scan_page issue
viewportNoViewport size (default: desktop). Use the same viewport the issue was found at.
llm_modelYesThe exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
tunnel_secretNoSecret printed by `webability-tunnel`. Required when `url` is a tunnel URL; the URL alone will be refused by the relay. Ignored otherwise.
conversation_idNoEcho the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / url / description
      Previous value: -"URL now serving the fix (deployed, staging, or http://localhost:3000)"New value: +"URL now serving the fix (deployed, staging, or http://localhost:3000). Also accepted as `page` or `pageUrl`."
  2. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), but the description adds high-value behavior the annotations cannot express: verification fails closed (blocked pages report unverified, never a pass), and a class/id change can make a stale selector read as a false 'verified'. It also discloses a key environment constraint (hosted server refuses localhost/private addresses) and the tunnel_secret requirement. Slightly verbose but genuinely additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action and fail-closed guarantee are front-loaded, and most sentences (selector caveat, scope limits, wcag semantics) earn their place. The trailing NOTE about hosted-mode localhost refusal and the tunnel workaround is long and somewhat tangential to invoking the tool, diluting focus even though it is operationally useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry return semantics, and it does ('machine-checked verified: true|false'). It covers edge cases (blocked page, stale selector), environment limits, auth/secret handling, and scope boundaries — enough for an agent to call and interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents url, wcag, selector, viewport, and tunnel_secret; baseline would be 3. The description rises above baseline by explaining the cross-parameter semantics of wcag (scope to one criterion vs. all) and the selector/time interaction (a changed class or id yields a misleading verified), which is meaning the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Re-scan a specific element after applying an accessibility fix and confirm the violation is gone') and frames its role against siblings by calling out 'the loop that find-only tools leave open'. It explicitly names the closed-loop workflow (scan_page → generate_ai_fix → verify_fix), so an agent can place it among check_*, scan_*, and visual_audit without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete precondition ('After you edit the code and serve it'), names the inputs to pass, and states exclusions ('visual_audit findings and needs-review items are out of scope'). It also distinguishes when to pass wcag (single criterion) versus omit it (require clean of ALL violations), and names the alternative path (re-run scan_page) when the selector no longer matches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.