url_scanner_scanLABSCO SUMMARY
State your intent — it is a different signal from the risk score.
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.
What it is
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.
What you get
url_scanner_scan— analyze a URL for phishing, malware and other threats, returning a risk score and a directiveurl_scanner_scan_with_intent— the same scan plus anintentof up to 248 characters, returningintent_alignmentasmisaligned,no_mismatch_detected,inconclusiveornot_provided- A policy gate separate from the score: a confirmed
misalignedresult returnsDENYwith the reasonintent_inconsistent_destination, and thin identity evidence on a high-impact claim returnsDENYwithinsufficient_service_verification— the risk score is unchanged in both cases - Both tools run either synchronously or as a task: include the
taskparameter and you get ataskIdand apollIntervalback, then poll withtasks/getandtasks/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:
preclickfor Python 3.10+ and@cybrlab/preclick-mcp-clientfor Node.js 20+, both exposingscan(url)andscanWithIntent(url, intent)with polling and retries handled
Requirements
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.
Setup effort
Paste a URL — add the endpoint to your client
USE CASES
Checking a link before an agent clicks it
Scan the URL and read the directive, rather than finding out what the page was after loading it.
Catching a page that is not what the task was about
Say what you were doing — logging in, paying, downloading — and let a mismatch stop the step.
Screening links out of an inbox
Submit each as a task and collect the results, rather than blocking on one at a time.
Adding scanning to something that is not an MCP client
Use the Python or Node client library, which returns a result in one call with polling handled for you.
6 tools
Listed in project docs. Your client may show a different list.
url_scanner_scan_with_intenturl_scanner_async_scanurl_scanner_async_scan_with_intenturl_scanner_async_task_statusurl_scanner_async_task_resultBEFORE YOU INSTALL
What to know first
Tools you get
6 tools named in the project's documentation.
Requires
A client that can reach a remote MCP server over HTTP
INSTALLATION
Connect your client
Add the endpoint to your client.
Server setup
https://preclick.ai/mcp