Your client. VirusTotal evidence.
Connect Claude Code to VirusTotal
Connect with browser sign-in. No VirusTotal API key or Agent Token needed.
Claude Code 2.1.283 or later and Node.js 22 or later. Install the plugin on the machine that holds the file.
Fresh plugin OAuth sign-in, reports, one file upload, network analysis and recovery were verified with Claude Code 2.1.284 on Linux on 1 October 2026 (plugin 0.1.3). Authenticated Windows/macOS uploads and hosted Claude workflows remain unverified.
1. Add VirusTotal
claude plugin marketplace add VirusTotal/virustotal-mcp
claude plugin install virustotal@virustotalStart a new Claude Code session or run /reload-plugins. Run /mcp and authenticate VirusTotal from the plugin, then continue with Google and approve permissions.
Already configured VirusTotal manually? Read the migration steps before removing anything.
2. Make your first query
Use VirusTotal to get the domain report for virustotal.com. Show the source, analysis date, coverage and report link.Check the tool activity and returned source, analysis date, coverage and report link. This uses one query. A missing report or zero detections does not establish safety.
Local files with the Claude Code plugin
Only with the plugin installed and active, call submit_file with the file's SHA256 and content_base64 set to file:<absolute path>. The local hook reads the file, checks its SHA256 and size (up to 24,000,000 bytes), and supplies the bytes to the existing OAuth tool. The model does not need to write the base64.
The plugin allows a matching upload after its local checks without adding a confirmation for each file. Submit only when the user explicitly requests the upload; server permissions and quotas remain unchanged. Every report query, including a repeated query, counts toward quota.
The plugin blocks credential-like filenames before reading them. Stop for human review; do not bypass this guard by renaming the file, sending inline bytes or uploading it through the website.
Without the plugin, the remote server cannot read a local path and rejects file: input. Use inline bytes only if the client can transmit them programmatically, or use the existing VirusTotal upload page and then get_file_report with the hash. An upload through the website has no VTAI submission receipt.
Migrating an existing manual connection
If a manually configured VirusTotal entry already exists, inspect its actual name and scope with claude mcp list and claude mcp get virustotal. Recover any uncertain submission through its original connection before removing anything. Remove only that existing duplicate from its reported scope, for example claude mcp remove --scope local virustotal; use --scope user or --scope project only when that is its scope. Removal also deletes that entry's local OAuth credentials and registration; signing in again may be needed. Preserve other servers and your personal claude.ai connection. If no duplicate exists, do not run a removal command.
Manual HTTP alternative (no Node.js required)
https://ai.virustotal.com/mcpclaude mcp add --transport http virustotal https://ai.virustotal.com/mcpOpen Claude Code, run /mcp, select VirusTotal and Authenticate. Continue with Google and approve permissions. This manual connection cannot expand file: paths by itself. Submit inline bytes only if the client can transmit them programmatically (up to 24,000,000 decoded bytes); otherwise use https://www.virustotal.com/gui/home/upload and then get_file_report with the hash. Website uploads have no VTAI receipt.
Compatibility and documentation
Choose another client · Instructions for agents
Your connections: review and revoke access
Free access, shared protection
Free quota: 60 queries per 60 seconds and 1,000 per UTC day per Agent Token or OAuth account; repeats, cached reports and unknown hashes count. Uploading a new file uses no query quota and is limited to 20 per minute and 500 per day. Creating extra identities to avoid limits is not permitted.
Submissions are shared with the VirusTotal community and partners. Upload files, submit URLs or request network reanalysis only when the user explicitly requests that action.
Full access limits and sharing policy
Query limits: 60 admitted queries per fixed 60-second window and 1000 per UTC day. Agent Tokens share the agent's allowance across REST and MCP; OAuth connections share the account's allowance. Unknown reports and upstream failures after admission count. Every repeated lookup counts again, including cached reports and hashes with no report. On 429, honor Retry-After and reuse your credential. File submissions first check whether the hash exists in VirusTotal. Only confirmed unknown files are uploaded, without using query quota, even when the query allowance is exhausted. A separate file contribution limit permits 20 admitted upload attempts per fixed 60-second window and 500 per UTC day, per Agent Token identity or OAuth account across connections. Failed or uncertain admitted attempts still count; known files and receipt recovery do not. Creating multiple identities or accounts to evade limits is not permitted. If the file is known, returning its existing report costs one query and no file is uploaded. Explicit hash lookups and analysis-result reads still count. The access check costs no query quota and does not report remaining quota.
Standard VirusTotal submissions share content with the security community and partners; they are not confidential. Upload files or attachments, submit URLs, or request domain/IP reanalysis only when the user explicitly requests that action. A missing report, an unfamiliar file or a suspicious indicator is not permission to submit it. Explain the sharing and ask before submitting the user's own documents, internal code, credentials or personal data. Submission tools add no per-call confirmation; client permissions still apply.
Need a result in this session?
Use the REST quickstart with an existing Agent Token. No MCP installation is required.