The threat scan and the intent check are separate mechanisms, and the second one catches what the first cannot: a legitimate site that is simply not the one your task called for. The distinction to hold onto is that a `DENY` on intent grounds is a policy gate, not a high risk score, so a clean-looking result and a refusal are not a contradiction. Low-information or instruction-shaped intent strings are treated as if you gave none.
A hosted URL preflight scanner built for agents that browse. Beyond threat detection it does something a blocklist cannot: you tell it what you were trying to do, and it judges whether the destination matches. A page that is technically clean but has nothing to do with booking a hotel is still a reason to stop.
- `url_scanner_scan` — analyze a URL for phishing, malware and other threats, returning a risk score and a directive
- `url_scanner_scan_with_intent` — the same scan plus an `intent` of up to 248 characters, returning `intent_alignment` as `misaligned`, `no_mismatch_detected`, `inconclusive` or `not_provided`
- A policy gate separate from the score: a confirmed `misaligned` result returns `DENY` with the reason `intent_inconsistent_destination`, and thin identity evidence on a high-impact claim returns `DENY` with `insufficient_service_verification` — the risk score is unchanged in both cases
- Both tools run either synchronously or as a task: include the `task` parameter and you get a `taskId` and a `pollInterval` back, then poll with `tasks/get` and `tasks/result`
- Compatibility tools for clients that cannot call native Tasks methods — `url_scanner_async_scan`, `url_scanner_async_scan_with_intent`, `url_scanner_async_task_status`, `url_scanner_async_task_result`
- Client libraries that skip the protocol entirely: `preclick` for Python 3.10+ and `@cybrlab/preclick-mcp-client` for Node.js 20+, both exposing `scan(url)` and `scanWithIntent(url, intent)` with polling and retries handled
Nothing to install. Add `https://preclick.ai/mcp` as a streamable HTTP server. The hosted trial allows up to 100 requests a day with no API key; past that you send one as an `X-API-Key` header, provisioned by contacting CybrLab. The hosted deployment is stateless, so a client probing `GET /mcp` for an SSE stream gets HTTP 405 — treat that as "no stream here" and keep using POST. Synchronous calls have a bounded 90-second server wait, and `tasks/result` blocks for 30, after which you get a `taskId` and a poll interval to continue with. The service is for URLs you are authorized to assess.
One command — npx -y mcp-remote https://preclick.ai/mcp
