Skip to main content
Glama
mertcanvural

overlayrisk-witness-mcp

by mertcanvural
README.md
# OverlayRiskWitness MCP server

A [Model Context Protocol](https://modelcontextprotocol.io) server that runs the
**free, independent before/after accessibility-overlay witness** from
[OverlayRiskWitness](https://overlayrisk.com) on any public URL.

Accessibility overlay widgets (accessiBe, UserWay, and similar) are sold as one-line
ADA/WCAG compliance fixes, but independent testing routinely shows the underlying page is
unchanged for real assistive-technology users. This server lets an AI agent run the
witness: it loads a page with the overlay **on**, then **off**, captures both states, and
returns one documented finding where the page's public accessibility/compliance claims
don't hold up — with a UTC timestamp.

> Findings are **evidence, not a legal compliance ruling.** This server is independent of
> accessiBe and UserWay; it tests their effect, it does not sell or defend an overlay.

## What this server is (and isn't)

This is a **thin client**. It contains no scanning logic and **no secrets**. Its single
tool POSTs to the hosted API at `https://overlayrisk.com/api/witness`, which does the real
work (overlay detection, headless before/after capture, claim extraction). The full
timestamped **Risk Packet** is a paid checkout on the website — see
[overlayrisk.com/pricing](https://overlayrisk.com/pricing). The MCP server is a free
funnel; it never handles payment.

## Tool

### `witness_page`

| | |
|---|---|
| Input | `{ "url": "https://example.com/checkout" }` — a public HTTP/HTTPS page URL |
| Success | The free-witness JSON: `runId`, `siteUrl`, `overlayVendor` (`accessibe`/`userway`), `pagesTested`, `claimsTested`, `didNotHoldUp`, `freeFinding`, `lockedFindingCount` — plus a note linking to the paid Risk Packet |
| Error | `{ status, code, error }` (e.g. `overlay_no_effect`, `page_fetch_failed`, `witness_timeout`) |

A single witness run can take up to ~3 minutes on cold/heavy sites. That exceeds many
MCP clients' default 60s request timeout. The server emits periodic progress
notifications, so clients that honor `resetTimeoutOnProgress` stay connected
automatically; clients that don't should raise their per-request timeout.

## Install

Run directly with `npx` (no global install):

```bash
npx overlayrisk-witness-mcp
```

The process speaks MCP over stdio.

### Claude Desktop / Cursor / other MCP clients

Add to your client's MCP config:

```json
{
  "mcpServers": {
    "overlayrisk-witness": {
      "command": "npx",
      "args": ["-y", "overlayrisk-witness-mcp"]
    }
  }
}
```

## Configuration

| Env var | Default | Purpose |
|---|---|---|
| `OVERLAYRISK_API_URL` | `https://overlayrisk.com/api/witness` | Override the witness endpoint (e.g. for local dev) |
| `OVERLAYRISK_TIMEOUT_MS` | `200000` | Request timeout in ms |

No API key is required — the free one-page witness is public.

## Develop

```bash
npm install
npm run smoke   # offline handshake test (lists tools, no network)
npm start       # run the server on stdio
```

## License

MIT © Mert Can Vural

TDQS

A3.7/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool exists, so there is no possibility of confusion between tools. The tool's purpose is clearly defined and distinct.

Naming Consistency4/5

With only one tool, naming consistency is not fully testable, but the tool name 'witness_page' follows a logical verb_noun pattern and is descriptive of its function.

Tool Count1/5

A single tool for a service that could reasonably include multiple related operations (e.g., different types of audits, history, or batch processing) feels extremely thin and insufficient for a cohesive server.

Completeness1/5

The tool performs one specific check and then directs to an external paid service for further results, leaving the agent with no ability to complete a full workflow or access additional features, making the surface severely incomplete.

Maintenance

ActivityStale
ResponsivenessNo issues