VirusTotal intelligence for MCP clients, powered by VTAI
VirusTotal MCP has 11 tools with consistent naming (verb_noun pattern) and complete input schemas. All tools have descriptions and parameters are typed. However, descriptions are terse (avg ~40 chars, well below the 194-char baseline), lack context on WHEN to use each tool, and omit recovery guidance in error cases. Output schemas are not documented. Tool composition is sound (each does one thing), but parameter descriptions lack format/constraint details. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (5 WRITE, 6 READ_ONLY). Error handling returns structured JSON but lacks actionable recovery steps.
Get analysis results by analysis ID
Get a report for a domain
Get a report for a file by hash
Get a report for an IP address
Get submission status by SHA256 or request ID
Get a report for a URL
Request reanalysis of a domain
Tool descriptions are extremely terse (~40 chars avg). 'Submit a local file to VirusTotal' lacks context on WHEN to use it vs submit_file, what happens after submission, or prerequisites. LLMs cannot distinguish between similar tools without richer descriptions.
Parameter descriptions lack format/constraint details. 'path' param has no length limit stated in description (though validated as 1-4096 in code). 'content_base64' has no size guidance. 'hash' param accepts MD5/SHA1/SHA256 but description does not specify which formats are valid.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2025-06-18+ | v2 |
Request reanalysis of an IP address
Submit a file to VirusTotal with base64-encoded content
Submit a local file to VirusTotal
Submit a URL to VirusTotal for analysis
No output schemas documented. Tools return JSON but LLMs cannot plan downstream calls without knowing response structure. E.g., does get_submission return analysis_id? Does get_file_report return threat_level? Undocumented outputs force LLMs to guess.
Error handling returns structured errors but lacks recovery guidance. E.g., 'invalid_input' error does not tell LLM what to do next. Should include hints like 'Invalid SHA256 format. Expected 64 hex characters.' or 'File too large. Max 100MB. Try splitting the file.'
Tool annotations missing. 5 tools are WRITE operations (submit_*, reanalyze_*) but lack destructiveHint=true. 6 tools are READ_ONLY but lack readOnlyHint=true. Annotations help LLMs reason about side effects and retry safety.