PreClick — An MCP-native URL preflight scanning service for autonomous agents (formerly URLCheck).
Server Details
PreClick scans links for threats and confirms intent match with high accuracy before agents click.
- Status
- Healthy
- Uptime
- 99.7% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- cybrlab-ai/preclick-mcp
- GitHub Stars
- 6
- Server Listing
- PreClick MCP Server
TDQS
Scored across 6 tools
Each tool has a distinct purpose: synchronous vs. asynchronous scanning, with or without intent, plus distinct task status and result retrieval. However, the 2x2 grid of scan tools (sync/async × intent/no-intent) creates some overlap where an agent must choose among four similar scanning tools, though descriptions clearly guide the choice.
All tool names follow a consistent snake_case pattern with the prefix 'url_scanner_' followed by a clear action or entity descriptor. Modifiers like 'async' and 'with_intent' are used systematically, making the naming highly predictable.
Six tools are well-scoped for a URL preflight scanning service. The set includes synchronous scans, asynchronous submission, task status, and task result retrieval—each earning its place without redundancy.
The tool surface covers the full URL scanning lifecycle: synchronous and asynchronous scans with optional intent, plus polling mechanisms for async tasks. No obvious gaps exist for the stated purpose of preflight URL security analysis.
Available Tools
6 toolsurl_scanner_async_scanARead-onlyInspect
Submit a URL for asynchronous security analysis. Returns immediately with a task_id. Poll with url_scanner_async_task_status to check progress, then url_scanner_async_task_result to get the scan result. Async counterpart of url_scanner_scan for clients without native MCP Tasks support.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to analyze. Must be HTTP or HTTPS. If no scheme provided, https:// is assumed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses key behavioral traits: it returns immediately with a task_id and requires polling via two specific sibling tools. This adds valuable context about the async nature, which annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the main verb and resource, and each sentence adds necessary information (action, immediate return, polling steps, sync alternative). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter async tool with rich annotations and no output schema, the description fully covers the invocation and follow-up workflow. It explains what returns, how to poll, and when to use it, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of the only parameter (url) with a clear description including scheme handling. The description does not add additional parameter details, so the baseline score of 3 is appropriate since the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Submit a URL'), the resource ('URL'), and the purpose ('asynchronous security analysis'). It also distinguishes this tool from its sync counterpart by specifying it returns immediately with a task_id and is designed for clients without native MCP Tasks support.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool instead of url_scanner_scan ('for clients without native MCP Tasks support') and provides the full workflow: submit, poll with url_scanner_async_task_status, then get results with url_scanner_async_task_result. This is clear usage guidance with an alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_scanner_async_scan_with_intentARead-onlyInspect
Submit a URL with optional user intent for asynchronous security analysis. Returns immediately with a task_id. Poll with url_scanner_async_task_status to check progress, then url_scanner_async_task_result to get the scan result. Async counterpart of url_scanner_scan_with_intent for clients without native MCP Tasks support.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to analyze. Must be HTTP or HTTPS. If no scheme provided, https:// is assumed. | |
| intent | No | Optional user intent for visiting the URL. Recommended for additional context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond annotations: it returns immediately with a task_id and requires polling. It also clarifies it is an async counterpart. Annotations already declare read-only and non-destructive, so this is well-covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each providing essential information: the action, the async return, and the polling workflow. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description fully explains the async behavior, how to retrieve results, and the relationship to the sync version. This is sufficient for an agent to correctly invoke and use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for both parameters, with descriptions for url and intent. The tool description adds no additional parameter semantics beyond what the schema already states, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as submitting a URL for asynchronous security analysis, returning a task_id immediately. It distinguishes itself from the sync version and from other async siblings by mentioning the polling workflow and the 'with_intent' variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool (for clients without MCP Tasks support) and provides the complete workflow: submit, poll with url_scanner_async_task_status, then get result with url_scanner_async_task_result. This effectively guides against using the sync counterpart unless MCP Tasks is supported.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_scanner_async_task_resultARead-onlyInspect
Retrieve the result of an asynchronous scan task. If completed, returns the full scan result (risk_score, confidence, agent_access_directive, etc.). If still running, returns status with retry_after_ms — call again after that interval. Non-blocking.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to retrieve the result for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the readOnlyHint and destructiveHint annotations: non-blocking, retry-after interval, and partial status when incomplete. It also lists example result fields, providing a clear picture of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three well-structured sentences, front-loaded with purpose, and every sentence adds value. No redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description sufficiently explains both possible outcomes (completed vs. running), the retry mechanism, and example return fields. It is as complete as needed for an async result retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single parameter, task_id, with a clear description. The tool description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves the result of an asynchronous scan task, with specifics on completed vs. running states. It distinguishes from the sibling 'url_scanner_async_task_status' by focusing on result retrieval, though it doesn't explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives implied usage guidance: call again after retry_after_ms, and it is non-blocking. However, it does not explicitly contrast with sibling tools like url_scanner_async_task_status or state when to use one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_scanner_async_task_statusARead-onlyInspect
Check the status of an asynchronous scan task. Returns the current task status using native MCP task semantics (working, completed, failed, cancelled) without blocking. Use url_scanner_async_task_result to retrieve the result once completed.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to check status for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context by specifying the native MCP task semantics (working, completed, failed, cancelled) and the non-blocking behavior. This goes beyond the annotation baseline, though it does not cover error handling or polling details, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, followed by a concise pointer to the sibling tool. Every word earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the description covers purpose, semantics, and alternative tool usage. The absence of an output schema is mitigated by listing the possible status values. Minor omissions include how the task_id is obtained (implied by sibling async scan tools) and any error conditions, but these are not critical for this straightforward status-check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter (task_id) already described as 'The task ID to check status for.' The description does not add additional semantics beyond what the schema provides, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Check the status of an asynchronous scan task.' It uses a specific verb ('check') and resource ('status'), and explicitly differentiates from the sibling result-retrieval tool by mentioning 'Use url_scanner_async_task_result to retrieve the result once completed.' This is unambiguous and distinguishes it from the other async tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: to check status without blocking. It also names the alternative (url_scanner_async_task_result) for retrieving results after completion, making the usage context and decision boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_scanner_scanARead-onlyInspect
Analyze a URL for security threats (synchronous, blocks until complete or timeout). Returns risk score, confidence, agent access guidance, and intent_alignment (always not_provided for this tool; use url_scanner_scan_with_intent for intent context). For long-running scans, prefer url_scanner_async_scan which returns immediately with a task_id for polling via url_scanner_async_task_result.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to analyze. Must be HTTP or HTTPS. If no scheme provided, https:// is assumed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true), the description discloses synchronous blocking behavior, timeout, and return fields (risk score, confidence, agent access guidance, intent_alignment). It also states that intent_alignment is always not_provided, which is a key behavioral trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two sentences, front-loaded with purpose and key behavior, then immediately provides guidance on alternatives. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explicitly lists return fields. It covers synchronous behavior, safety profile (via annotations), and alternative tools, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides 100% coverage with a clear description of the url parameter, including scheme assumptions and encoded/unencoded handling. The description adds no new parameter semantics, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource: "Analyze a URL for security threats." It clearly distinguishes from siblings by noting synchronous behavior and absence of intent context ("intent_alignment (always not_provided for this tool)").
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: "For long-running scans, prefer url_scanner_async_scan" and "use url_scanner_scan_with_intent for intent context." This tells the agent when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_scanner_scan_with_intentARead-onlyInspect
Analyze a URL for security threats with optional user intent context (synchronous, blocks until complete or timeout). Returns risk score, confidence, agent access guidance, and intent_alignment. For long-running scans, prefer url_scanner_async_scan_with_intent which returns immediately with a task_id for polling via url_scanner_async_task_result.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to analyze. Must be HTTP or HTTPS. If no scheme provided, https:// is assumed. | |
| intent | No | Optional user intent for visiting the URL. Recommended for additional context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds valuable context: synchronous blocking behavior with timeout, and the return fields (risk score, confidence, agent access guidance, intent_alignment). This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose and behavior, and the second sentence provides the alternative. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description lists the key return fields. It also explains the synchronous behavior and points to the async alternative. Minor gaps include unspecified timeout duration and error handling, but overall it is complete for the tool's complexity and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for both url and intent parameters. The description only re-iterates 'optional user intent context' without adding new meaning, so it does not elevate above the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Analyze a URL for security threats' with optional user intent context, providing a specific verb and resource. It also distinguishes from the async sibling by explicitly mentioning synchronous blocking behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the async alternative: 'For long-running scans, prefer url_scanner_async_scan_with_intent which returns immediately with a task_id for polling via url_scanner_async_task_result.' This provides clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Added
url_scanner_async_scan - Added
url_scanner_async_scan_with_intent - Added
url_scanner_async_task_result - Added
url_scanner_async_task_status
1 tool update
- Changed
url_scanner_scan_with_intent2 fields changed- removed
Input schema / properties / intent / nullableRemoved value: -true - changed
Input schema / properties / intent / typePrevious value: -"string"New value: +[ + "string", + "null" +]
2 tool updates
- First observed
url_scanner_scan - First observed
url_scanner_scan_with_intent
Related MCP Connectors
PreClick scans links for threats and confirms intent match with high accuracy before agents click.
Verify URLs, payees, and messages before acting: red/yellow/green trust verdicts for agents.
Choose HTTP, browser, machine endpoint, or avoid before an agent visits an unfamiliar URL.
AI-powered scam and threat verification for phone numbers, URLs, texts, and emails.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables checking suspicious URLs for risk without opening them, providing full checkups and lookalike detection.MIT

EVIDIQ Envelopeofficial
FlicenseNot gradedqualityBmaintenanceEnables agents to verify the authenticity of inbound email messages via SPF, DKIM, DMARC, and ARC checks, detect sender spoofing and malicious links/attachments, and obtain signed, verifiable attestations of the verdict.1-
flagrixofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to scan GitHub repositories and user profiles for malware signals before cloning, providing risk verdicts pinned to specific commits.57 npm2MIT- AlicenseAqualityBmaintenanceProtects AI agents from threats like prompt injection, jailbreaks, and SQL injection through a multi-layer scanning pipeline. It also enables PII redaction and rehydration to ensure data privacy during LLM interactions.12108 npm2Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.