
ScanMalware.com URL Scanner
Wraps the ScanMalware.com public API to let Claude submit URLs for malware scanning, poll for results, and search past scans. You get tools for submitting new scans, fetching status and risk scores, pulling TLS certificate details, and querying by domain or keyword. Useful for phishing triage workflows where you want to submit a suspicious link, wait for the scan to finish, then summarize indicators and screenshots. Also handles brand monitoring searches to find lookalike domains flagged as high risk. Runs as a streamable HTTP server with optional bearer token auth, and the repo includes a ready-to-go DigitalOcean deploy setup with Nginx reverse proxy. Most endpoints work without auth, though some require a ScanMalware bearer token.
- tools
- 80
- transport
- HTTP
- last updated
- Nov 12, 2026
Install
From registry metadata$ npx add-mcp https://mcp.scanmalware.com/mcp --name scanmalware-mcpRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http scanmalware-mcp https://mcp.scanmalware.com/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 80 toolsVerified live against the running server on Nov 6, 2026.
get_recent_scansList the most recent public scans, newest first (paginated with page and limit). Each row has the scan ID, URL, status, visibility and submission time. Unlisted and private scans are never included.2 params
List the most recent public scans, newest first (paginated with page and limit). Each row has the scan ID, URL, status, visibility and submission time. Unlisted and private scans are never included.
limitintegerpageintegersubmit_scanSubmit a URL to ScanMalware to be rendered and analysed in a sandboxed browser; returns the new scan_id. scan_type is required and sets who can see the result: 'public' lists the URL and its results in the public feed, visible to anyone and to search engines; 'unlisted' keeps...4 params
Submit a URL to ScanMalware to be rendered and analysed in a sandboxed browser; returns the new scan_id. scan_type is required and sets who can see the result: 'public' lists the URL and its results in the public feed, visible to anyone and to search engines; 'unlisted' keeps...
optionsvaluescan_type*stringpublic · unlisted · privateurl*stringuser_agentvalueget_scan_summaryGet a compact summary of one scan: submitted URL, final URL after redirects, status, completion time and the security verdict (verdict text, risk level, confidence and risk factors). Useful as the first look at a scan; the verdict is empty for a few seconds after a scan comple...1 params
Get a compact summary of one scan: submitted URL, final URL after redirects, status, completion time and the security verdict (verdict text, risk level, confidence and risk factors). Useful as the first look at a scan; the verdict is empty for a few seconds after a scan comple...
scan_id*stringwait_for_scanWait for a submitted scan to finish by polling its status every poll_interval_s seconds, up to timeout_s seconds (default 180). Returns the final compact summary (URL, final URL, status, completion time and the security verdict), or the last known status with timeout set to tr...3 params
Wait for a submitted scan to finish by polling its status every poll_interval_s seconds, up to timeout_s seconds (default 180). Returns the final compact summary (URL, final URL, status, completion time and the security verdict), or the last known status with timeout set to tr...
poll_interval_snumberscan_id*stringtimeout_snumberget_scan_resultGet the full result document of one scan: URLs and redirects, page title, load times, links, network requests, IP addresses, JavaScript files, TLS, fuzzy hashes, screenshot hashes, favicon and the security verdict. The response is large; the compact summary is enough for a ver...1 params
Get the full result document of one scan: URLs and redirects, page title, load times, links, network requests, IP addresses, JavaScript files, TLS, fuzzy hashes, screenshot hashes, favicon and the security verdict. The response is large; the compact summary is enough for a ver...
scan_id*stringsearch_scansSearch the archive of public scans by text in the URL, domain or page title (paginated); q needs at least 3 characters and search_type narrows the match (default 'all'). Each result has the scan ID, URL, status, title, submission time and hosting ASN.4 params
Search the archive of public scans by text in the URL, domain or page title (paginated); q needs at least 3 characters and search_type narrows the match (default 'all'). Each result has the scan ID, URL, status, title, submission time and hosting ASN.
limitintegerpageintegerq*stringsearch_typestringget_ai_analysisGet the AI analysis of one scan: classification (LEGITIMATE to CONFIRMED_SCAM), scam type, risk score, confidence, impersonated brand and the key evidence behind it. The analysis is produced a few minutes after the scan completes and returns not found until then. It can disagr...1 params
Get the AI analysis of one scan: classification (LEGITIMATE to CONFIRMED_SCAM), scam type, risk score, confidence, impersonated brand and the key evidence behind it. The analysis is produced a few minutes after the scan completes and returns not found until then. It can disagr...
scan_id*stringget_scan_progressGet the progress of a running scan: current step, total steps, step name, percentage and status. Useful for checking whether a scan has finished before reading its results. scan_id is the UUID of a ScanMalware scan.1 params
Get the progress of a running scan: current step, total steps, step name, percentage and status. Useful for checking whether a scan has finished before reading its results. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_scan_iocCheck one scan against threat-intelligence indicator feeds: matching IP addresses and domains the page contacted, the threat types, and a summary of total and unique matches. scan_id is the UUID of a ScanMalware scan.1 params
Check one scan against threat-intelligence indicator feeds: matching IP addresses and domains the page contacted, the threat types, and a summary of total and unique matches. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_tls_detailsGet the TLS certificate the scanned site presented: subject, issuer, validity dates, whether it was valid or expired, and related details. scan_id is the UUID of a ScanMalware scan.1 params
Get the TLS certificate the scanned site presented: subject, issuer, validity dates, whether it was valid or expired, and related details. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_tls_asn1Get the raw ASN.1 structure of the TLS certificate from one scan, for detailed certificate inspection. scan_id is the UUID of a ScanMalware scan.1 params
Get the raw ASN.1 structure of the TLS certificate from one scan, for detailed certificate inspection. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_technologies_by_scanList the web technologies detected on a scanned page (frameworks, CMS, CDN, analytics and so on), with versions where known. scan_id is the UUID of a ScanMalware scan.1 params
List the web technologies detected on a scanned page (frameworks, CMS, CDN, analytics and so on), with versions where known. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_bot_protectionGet the bot-protection and CAPTCHA services detected on a scanned page (for example Cloudflare Turnstile), with a detected flag. Phishing kits often use these to hide from scanners. scan_id is the UUID of a ScanMalware scan.1 params
Get the bot-protection and CAPTCHA services detected on a scanned page (for example Cloudflare Turnstile), with a detected flag. Phishing kits often use these to hide from scanners. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_yara_matchesGet the YARA rule matches recorded for one scan, with the matching rules and a summary by severity and category. scan_id is the UUID of a ScanMalware scan.1 params
Get the YARA rule matches recorded for one scan, with the matching rules and a summary by severity and category. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_jarm_signaturesGet the JARM TLS server fingerprints measured for the hosts in one scan, with whether each matches a known signature. A shared JARM often points to the same server software or hosting platform, so it is a weak pivot on its own. scan_id is the UUID of a ScanMalware scan.1 params
Get the JARM TLS server fingerprints measured for the hosts in one scan, with whether each matches a known signature. A shared JARM often points to the same server software or hosting platform, so it is a weak pivot on its own. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_analyzer_resultsList which analysis modules ran for one scan (for example JavaScript fingerprinting and AI analysis), with each module's status, success flag and timing. Useful for checking why a result is missing. scan_id is the UUID of a ScanMalware scan.1 params
List which analysis modules ran for one scan (for example JavaScript fingerprinting and AI analysis), with each module's status, success flag and timing. Useful for checking why a result is missing. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_clipboard_eventsGet the clipboard writes the page attempted while it was scanned, with the event count and whether collection ran. Empty with an explanatory note when the page wrote nothing. scan_id is the UUID of a ScanMalware scan.1 params
Get the clipboard writes the page attempted while it was scanned, with the event count and whether collection ran. Empty with an explanatory note when the page wrote nothing. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_js_fingerprintsList the JavaScript files a scanned page loaded, each with its fingerprint: hashes (SHA-256, SHA-1, MD5, normalized and fuzzy), size metrics, detected library and bundler. The include_* options add function lists, HTTP headers or ML vector details. Useful for collecting script...4 params
List the JavaScript files a scanned page loaded, each with its fingerprint: hashes (SHA-256, SHA-1, MD5, normalized and fuzzy), size metrics, detected library and bundler. The include_* options add function lists, HTTP headers or ML vector details. Useful for collecting script...
include_functionsvalueinclude_http_headersvalueinclude_vectors_infovaluescan_id*stringget_scan_reportsList the user reports and votes filed about one scan (for example marked safe or malicious), with the total count; report_type filters by kind. Empty when nobody has reported the scan. scan_id is the UUID of a ScanMalware scan.2 params
List the user reports and votes filed about one scan (for example marked safe or malicious), with the total count; report_type filters by kind. Empty when nobody has reported the scan. scan_id is the UUID of a ScanMalware scan.
report_typevaluescan_id*stringget_domain_scansList the recent scans of a domain and its subdomains, newest first, up to limit; status filters by scan status. Each row has matched_on: 'url' when the scan was submitted for a host under this domain, and only 'final_url' when another site redirected there. A verdict on a fina...3 params
List the recent scans of a domain and its subdomains, newest first, up to limit; status filters by scan status. Each row has matched_on: 'url' when the scan was submitted for a host under this domain, and only 'final_url' when another site redirected there. A verdict on a fina...
domain*stringlimitintegerstatusvalueget_domain_historyGet the scan history of a domain with the total count and the scans, paginated with page and limit.3 params
Get the scan history of a domain with the total count and the scans, paginated with page and limit.
domain*stringlimitintegerpageintegerget_domain_statsGet scan counts for a domain: total, unique, completed and failed scans, first and latest scan, and scans in the last 24 hours, 7 days and 30 days.1 params
Get scan counts for a domain: total, unique, completed and failed scans, first and latest scan, and scans in the last 24 hours, 7 days and 30 days.
domain*stringsearch_by_ipList scans of pages served from an IP address (paginated), each with scan ID, URL and time. On shared hosting and CDNs an IP serves many unrelated sites, so a match is not evidence of a connection.3 params
List scans of pages served from an IP address (paginated), each with scan ID, URL and time. On shared hosting and CDNs an IP serves many unrelated sites, so a match is not evidence of a connection.
ip_address*stringlimitintegerpageintegerget_ip_statsGet statistics for an IP address across the archive: total scans, unique URLs, first and last seen, geolocation, ASN and organisation, BGP and DNS data; paginated.3 params
Get statistics for an IP address across the archive: total scans, unique URLs, first and last seen, geolocation, ASN and organisation, BGP and DNS data; paginated.
ip_address*stringlimitintegerpageintegersearch_by_asnGet what the archive knows about an autonomous system (ASN number, without 'AS'): organisation, total scans, unique URLs, first and last seen and BGP prefixes; paginated.3 params
Get what the archive knows about an autonomous system (ASN number, without 'AS'): organisation, total scans, unique URLs, first and last seen and BGP prefixes; paginated.
asn_number*integerlimitintegerpageintegersearch_similar_scansFind scans that look like this one by screenshot similarity, favicon or fuzzy page hash (methods, default screenshot), each with URL, final URL, title and what it matched by; paginated. Useful for finding copies of a phishing page on other hosts. scan_id is the UUID of a ScanM...4 params
Find scans that look like this one by screenshot similarity, favicon or fuzzy page hash (methods, default screenshot), each with URL, final URL, title and what it matched by; paginated. Useful for finding copies of a phishing page on other hosts. scan_id is the UUID of a ScanM...
limitintegermethodsvaluepageintegerscan_id*stringsearch_semanticSearch scans by meaning rather than exact words, comparing the query with scanned page content (for example 'bank login page asking for card details'). threshold (default 0.7) is the minimum similarity; an empty result means nothing was similar enough.4 params
Search scans by meaning rather than exact words, comparing the query with scanned page content (for example 'bank login page asking for card details'). threshold (default 0.7) is the minimum similarity; an empty result means nothing was similar enough.
limitintegerpageintegerquery*stringthresholdnumbersearch_by_faviconSearch scans by favicon hash (paginated): a mmh3 hash by default, or the favicon's MD5 with hash_type='md5'.4 params
Search scans by favicon hash (paginated): a mmh3 hash by default, or the favicon's MD5 with hash_type='md5'.
hash_typestringmmh3 · md5default: mmh3hash_value*stringlimitintegerpageintegersearch_ai_high_riskList scans that the AI analysis rated high risk, optionally above min_risk_score and min_confidence, each with URL, title and the analysis. min_risk_score is on the AI's 0-10 risk scale (default 7) and min_confidence is a 0-100 percentage (default 70).3 params
List scans that the AI analysis rated high risk, optionally above min_risk_score and min_confidence, each with URL, title and the analysis. min_risk_score is on the AI's 0-10 risk scale (default 7) and min_confidence is a 0-100 percentage (default 70).
limitintegermin_confidencevaluemin_risk_scorevaluesearch_ai_scam_typeList scans whose AI analysis named a given scam type, such as 'Phishing', each with URL, title, submission time and the analysis (verdict, classification, risk score). The match is on the scam type text the analysis produced.2 params
List scans whose AI analysis named a given scam type, such as 'Phishing', each with URL, title, submission time and the analysis (verdict, classification, risk score). The match is on the scam type text the analysis produced.
limitintegerscam_type*stringsearch_ai_classificationList scans whose AI analysis gave a specific classification: LEGITIMATE, LOW_RISK, MODERATE_RISK, HIGH_RISK or CONFIRMED_SCAM. Each result has the URL, title, submission time and the analysis.2 params
List scans whose AI analysis gave a specific classification: LEGITIMATE, LOW_RISK, MODERATE_RISK, HIGH_RISK or CONFIRMED_SCAM. Each result has the URL, title, submission time and the analysis.
classification*stringLEGITIMATE · LOW_RISK · MODERATE_RISK · HIGH_RISK · CONFIRMED_SCAMlimitintegerget_analyzer_statsGet platform-wide statistics for the scan analysis modules: the modules and their run counts. Describes the service, not a particular scan.
Get platform-wide statistics for the scan analysis modules: the modules and their run counts. Describes the service, not a particular scan.
No parameters. Call it with no arguments.
search_analyzer_high_riskList scans that the security analyzer scored as high risk, highest first (paginated), each with URL, risk score, verdict, confidence and analysis time. min_risk_score raises the threshold.3 params
List scans that the security analyzer scored as high risk, highest first (paginated), each with URL, risk score, verdict, confidence and analysis time. min_risk_score raises the threshold.
limitintegermin_risk_scorevaluepageintegerget_faviconGet the favicon recorded for a scan_id: its size, MD5 and SHA-256 hashes, and the image base64-encoded. found is false when no favicon is stored for the scan.1 params
Get the favicon recorded for a scan_id: its size, MD5 and SHA-256 hashes, and the image base64-encoded. found is false when no favicon is stored for the scan.
scan_id*stringget_favicon_statsGet favicon statistics across the archive: total favicons, those seen in the last 24 hours and the most common hashes with sample URLs. This aggregate query can take up to 90 seconds by default.
Get favicon statistics across the archive: total favicons, those seen in the last 24 hours and the most common hashes with sample URLs. This aggregate query can take up to 90 seconds by default.
No parameters. Call it with no arguments.
get_screenshot_statsGet screenshot statistics across the archive: total screenshots, hash coverage and the distribution of perceptual hash types.
Get screenshot statistics across the archive: total screenshots, hash coverage and the distribution of perceptual hash types.
No parameters. Call it with no arguments.
search_similar_screenshotsFind screenshots within max_distance (Hamming distance, default 3) of an integer perceptual hash (hash_type, default phash), each with scan, URL, title, distance and similarity score.4 params
Find screenshots within max_distance (Hamming distance, default 3) of an integer perceptual hash (hash_type, default phash), each with scan, URL, title, distance and similarity score.
hash_typestringhash_value*integerlimitintegermax_distanceintegersearch_ocrSearch OCR text (paginated). q must contain at least 3 characters after trimming. This query can take up to 90 seconds by default.3 params
Search OCR text (paginated). q must contain at least 3 characters after trimming. This query can take up to 90 seconds by default.
limitintegerpageintegerq*stringsearch_ocr_patternSearch the text read by OCR from scan screenshots for a pattern (paginated); case_sensitive controls matching. Useful for finding pages that show the same lure text as an image.4 params
Search the text read by OCR from scan screenshots for a pattern (paginated); case_sensitive controls matching. Useful for finding pages that show the same lure text as an image.
case_sensitivebooleanlimitintegerpageintegerpattern*stringsearch_by_jarmList scans whose server presented this JARM TLS fingerprint (paginated). Large hosting platforms share JARMs across many unrelated sites, so check what the matches have in common.3 params
List scans whose server presented this JARM TLS fingerprint (paginated). Large hosting platforms share JARMs across many unrelated sites, so check what the matches have in common.
jarm_signature*stringlimitintegerpageintegersearch_by_fuzzy_hashList scans whose page content has a similar fuzzy hash (hash_type tlsh, ssdeep or sdhash; the value comes from a scan result), each with URL, title and time; paginated. Useful for finding near-identical copies of a page.4 params
List scans whose page content has a similar fuzzy hash (hash_type tlsh, ssdeep or sdhash; the value comes from a scan result), each with URL, title and time; paginated. Useful for finding near-identical copies of a page.
hash_type*stringtlsh · ssdeep · sdhashhash_value*stringlimitintegerpageintegersearch_by_screenshot_hashList scans whose screenshot has this perceptual hash (hash_type ahash, phash, dhash, whash, color_hash or crop_resistant), optionally within similarity_threshold, each with URL, title and time; paginated. Useful for finding pages that look the same.5 params
List scans whose screenshot has this perceptual hash (hash_type ahash, phash, dhash, whash, color_hash or crop_resistant), optionally within similarity_threshold, each with URL, title and time; paginated. Useful for finding pages that look the same.
hash_type*stringahash · phash · dhash · whash · color_hash · crop_resistanthash_value*stringlimitintegerpageintegersimilarity_thresholdvaluesearch_suspicious_clipboardList scans where the page wrote suspicious content to the clipboard (for example PowerShell commands), each with URL, event count, reason and time; pattern filters the content; paginated.3 params
List scans where the page wrote suspicious content to the clipboard (for example PowerShell commands), each with URL, event count, reason and time; pattern filters the content; paginated.
limitintegerpageintegerpatternvalueget_recent_threatsList malware threats detected in scans during the last hours (default window set by the API), with totals and grouping by threat.2 params
List malware threats detected in scans during the last hours (default window set by the API), with totals and grouping by threat.
hoursvaluelimitintegerget_recent_yara_threatsList YARA rule matches from scans in the last hours, each with the scan, URL, rule, category, severity and confidence.2 params
List YARA rule matches from scans in the last hours, each with the scan, URL, rule, category, severity and confidence.
hoursvaluelimitintegerget_ct_certificatesGet the certificates issued for a domain according to Certificate Transparency logs, with a found flag.1 params
Get the certificates issued for a domain according to Certificate Transparency logs, with a found flag.
domain*stringget_ct_dns_recordsList subdomains of a domain found through Certificate Transparency, with their DNS records (type, IP addresses, TTL) and when they were seen. Useful for finding the other hosts of a domain.1 params
List subdomains of a domain found through Certificate Transparency, with their DNS records (type, IP addresses, TTL) and when they were seen. Useful for finding the other hosts of a domain.
domain*stringget_ct_domains_by_ipList domains that Certificate Transparency and DNS data associate with an IP address, with record counts and the total.1 params
List domains that Certificate Transparency and DNS data associate with an IP address, with record counts and the total.
ip_address*stringget_ct_similar_domainsFind domains with names similar to a domain in Certificate Transparency data (for example lookalikes and typosquats), each with a certificate count and the kind of similarity.1 params
Find domains with names similar to a domain in Certificate Transparency data (for example lookalikes and typosquats), each with a certificate count and the kind of similarity.
domain*stringget_ct_timelineGet the certificate history of a domain from Certificate Transparency: when certificates were issued and when the certificate changed.1 params
Get the certificate history of a domain from Certificate Transparency: when certificates were issued and when the certificate changed.
domain*stringget_api_rootGet the ScanMalware API's name, version, status, main endpoints and feature list.
Get the ScanMalware API's name, version, status, main endpoints and feature list.
No parameters. Call it with no arguments.
get_healthCheck whether the ScanMalware API is up. Returns the service status.
Check whether the ScanMalware API is up. Returns the service status.
No parameters. Call it with no arguments.
get_platform_statsGet the current scan queue length, running scans and scans completed in the last 24 hours by visibility.
Get the current scan queue length, running scans and scans completed in the last 24 hours by visibility.
No parameters. Call it with no arguments.
get_latest_capabilitiesGet the current size of ScanMalware's detection content: indicator count, malware detection rules and ClamAV signatures.
Get the current size of ScanMalware's detection content: indicator count, malware detection rules and ClamAV signatures.
No parameters. Call it with no arguments.
get_capabilities_by_dateGet the size of ScanMalware's detection content (indicators, detection rules, ClamAV signatures) on a given date (scan_date, YYYY-MM-DD).1 params
Get the size of ScanMalware's detection content (indicators, detection rules, ClamAV signatures) on a given date (scan_date, YYYY-MM-DD).
scan_date*stringget_clipboard_statsGet clipboard and pastejacking statistics across the archive: event totals, detections and daily activity.
Get clipboard and pastejacking statistics across the archive: event totals, detections and daily activity.
No parameters. Call it with no arguments.
get_cpe_statsGet CPE statistics across the archive: scans with CPEs, unique CPEs, total detections, top vendors and products.
Get CPE statistics across the archive: scans with CPEs, unique CPEs, total detections, top vendors and products.
No parameters. Call it with no arguments.
get_cpe_by_scanList the CPE identifiers (product and version names in the NVD format) derived from the technologies detected on a scanned page, with their source. Useful for matching against vulnerability data. scan_id is the UUID of a ScanMalware scan.1 params
List the CPE identifiers (product and version names in the NVD format) derived from the technologies detected on a scanned page, with their source. Useful for matching against vulnerability data. scan_id is the UUID of a ScanMalware scan.
scan_id*stringsearch_cpeFind scans with a CPE identifier matching a pattern such as 'cpe:2.3:a:facebook:react' (paginated). Useful for finding sites running a given product.3 params
Find scans with a CPE identifier matching a pattern such as 'cpe:2.3:a:facebook:react' (paginated). Useful for finding sites running a given product.
cpe_pattern*stringlimitintegerpageintegerget_ids_alertsGet intrusion detection (IDS) alerts raised on the network traffic recorded during one scan, with a severity breakdown and total count. Empty when no rule fired. scan_id is the UUID of a ScanMalware scan.1 params
Get intrusion detection (IDS) alerts raised on the network traffic recorded during one scan, with a severity breakdown and total count. Empty when no rule fired. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_jarm_statsGet JARM statistics across the archive, including the most common signatures. Common signatures usually belong to large hosting platforms.
Get JARM statistics across the archive, including the most common signatures. Common signatures usually belong to large hosting platforms.
No parameters. Call it with no arguments.
get_malware_statsGet malware detection statistics across the archive: overall and last-24-hour counts, top threats and hourly trend.
Get malware detection statistics across the archive: overall and last-24-hour counts, top threats and hourly trend.
No parameters. Call it with no arguments.
get_malware_by_scanGet the malware detections for files the scanned page delivered, with threat names, detection counts and the detection source. Empty when nothing was detected. scan_id is the UUID of a ScanMalware scan.1 params
Get the malware detections for files the scanned page delivered, with threat names, detection counts and the detection source. Empty when nothing was detected. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_yara_statsGet YARA statistics across the archive: overall and last-24-hour matches, severity and category distribution and top threats.
Get YARA statistics across the archive: overall and last-24-hour matches, severity and category distribution and top threats.
No parameters. Call it with no arguments.
get_yara_by_scanGet YARA rule matches for one scan, with a summary by severity (critical, high, medium, low) and category. Empty when no rule matched. scan_id is the UUID of a ScanMalware scan.1 params
Get YARA rule matches for one scan, with a summary by severity (critical, high, medium, low) and category. Empty when no rule matched. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_safe_browsing_statsGet Google Safe Browsing statistics across the archive: total threats, threats in the last 7 days, scans with threats and threat types.
Get Google Safe Browsing statistics across the archive: total threats, threats in the last 7 days, scans with threats and threat types.
No parameters. Call it with no arguments.
get_safe_browsingGet Google Safe Browsing threats found for the URLs in one scan, with a has_threats flag. scan_id is the UUID of a ScanMalware scan.1 params
Get Google Safe Browsing threats found for the URLs in one scan, with a has_threats flag. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_top_tracking_keysList the tracking and site keys seen on the most sites (analytics IDs, CAPTCHA keys and so on), with the tracker name, category and site count; tracker_type filters by kind.2 params
List the tracking and site keys seen on the most sites (analytics IDs, CAPTCHA keys and so on), with the tracker name, category and site count; tracker_type filters by kind.
limitintegertracker_typevaluesearch_tracking_keyFind scans that embed a given tracking or site key, such as an analytics ID or a CAPTCHA site key (tracker_type and key), sorted latest or oldest; paginated. A shared key often ties sites to one operator.5 params
Find scans that embed a given tracking or site key, such as an analytics ID or a CAPTCHA site key (tracker_type and key), sorted latest or oldest; paginated. A shared key often ties sites to one operator.
key*stringlimitintegerpageintegersortvaluetracker_type*stringsearch_technologiesSearch the web technologies detected across the archive by name (q) or category, each with how many scans used it and when it was last seen; paginated.4 params
Search the web technologies detected across the archive by name (q) or category, each with how many scans used it and when it was last seen; paginated.
categoryvaluelimitintegerpageintegerqvalueget_technology_combinationsList the technologies most often detected together with a given technology, with counts; min_occurrences drops rare pairs; paginated.4 params
List the technologies most often detected together with a given technology, with counts; min_occurrences drops rare pairs; paginated.
limitintegermin_occurrencesvaluepageintegertech_name*stringget_popular_technologiesList the most frequently detected web technologies over the last days (paginated).3 params
List the most frequently detected web technologies over the last days (paginated).
daysvaluelimitintegerpageintegerget_technology_statsGet technology detection statistics across the archive: unique technologies, total detections and counts per category. This aggregate query can take up to 90 seconds by default.
Get technology detection statistics across the archive: unique technologies, total detections and counts per category. This aggregate query can take up to 90 seconds by default.
No parameters. Call it with no arguments.
search_by_nameserverList the scanned domains that use a given nameserver, with totals and counts per top-level domain. Useful for finding domains registered together.1 params
List the scanned domains that use a given nameserver, with totals and counts per top-level domain. Useful for finding domains registered together.
nameserver*stringget_rdapGet registration data (RDAP) for the scanned domain and its IP addresses: registrar, registration and expiry dates, domain age, nameservers and status. A very young domain is a common phishing signal. scan_id is the UUID of a ScanMalware scan.1 params
Get registration data (RDAP) for the scanned domain and its IP addresses: registrar, registration and expiry dates, domain age, nameservers and status. A very young domain is a common phishing signal. scan_id is the UUID of a ScanMalware scan.
scan_id*stringsearch_by_registrarList scans of domains registered through a given registrar (paginated), with the total. Common registrars match very many domains.3 params
List scans of domains registered through a given registrar (paginated), with the total. Common registrars match very many domains.
limitintegerpageintegerregistrar_name*stringsubmit_scan_reportVote on a scan, as the Mark as Safe and Mark as Malicious buttons on its result page do: report_type 'positive_feedback' marks the scanned page as safe and 'malware' marks it as malicious. report_details is an optional note of up to 1000 characters. Votes are recorded as crowd...3 params
Vote on a scan, as the Mark as Safe and Mark as Malicious buttons on its result page do: report_type 'positive_feedback' marks the scanned page as safe and 'malware' marks it as malicious. report_details is an optional note of up to 1000 characters. Votes are recorded as crowd...
report_detailsvaluereport_type*stringpositive_feedback · malwarescan_id*stringget_ocr_statsGet OCR statistics across the archive: scans with OCR text, average confidence and length, language distribution and daily counts.
Get OCR statistics across the archive: scans with OCR text, average confidence and length, language distribution and daily counts.
No parameters. Call it with no arguments.
get_ocr_by_scanGet the text read by OCR from the scan's screenshot, with language, confidence, word and character counts and any regions flagged as suspicious. Useful when page text is drawn as images. scan_id is the UUID of a ScanMalware scan.1 params
Get the text read by OCR from the scan's screenshot, with language, confidence, word and character counts and any regions flagged as suspicious. Useful when page text is drawn as images. scan_id is the UUID of a ScanMalware scan.
scan_id*stringget_open_graphGet the Open Graph and Twitter card metadata the scanned page declared (title, description, image, site name). Phishing pages often copy a brand's metadata. scan_id is the UUID of a ScanMalware scan.1 params
Get the Open Graph and Twitter card metadata the scanned page declared (title, description, image, site name). Phishing pages often copy a brand's metadata. scan_id is the UUID of a ScanMalware scan.
scan_id*stringSponsors
Readme
scanmalware-mcp
Minimal Python MCP server that wraps the public ScanMalware.com API.
Operations
See the operations runbook for deployment, TLS, logging, security maintenance, and how to connect to the DigitalOcean droplet.
Run locally (Streamable HTTP)
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install .
export MCP_TRANSPORT=streamable-http
export MCP_HOST=127.0.0.1
export MCP_PORT=8000
scanmalware-mcp
Run with Docker
docker build -t scanmalware-mcp .
docker run --rm -p 127.0.0.1:8000:8000 \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HOST=0.0.0.0 \
-e MCP_PORT=8000 \
scanmalware-mcp
Optional: set MCP_AUTH_TOKEN to require Authorization: Bearer <MCP_AUTH_TOKEN> for HTTP transports.
Optional auth env vars (only needed for auth-gated endpoints):
SCANMALWARE_BEARER_TOKEN
Other env vars:
Details
- Repository
- github.com/scanmalware/mcp-server
- Website
- mcp.scanmalware.com
- Category
- Security & Pentesting
- Transport
- HTTP
- Registry
- MCP registry, active
- Tools verified
- Nov 6, 2026