Summary
Threat intelligence from the VirusTotal API v3: file reports by hash, URL, domain and IP reports from about 70 engines, search, relationships between indicators, sandbox behaviour and MITRE ATT&CK, community comments and votes, rescans and, once an admin enables it, URL scanning.
Guided setup
Connect VirusTotal to ChatGPT in 2 minutes
Start a free trial on AnythingMCP Cloud, connect VirusTotal in the guided setup, then add your MCP URL to ChatGPT. No code and no server to run.
No credit card · 7-day trial · Self-host alternative available
AnythingMCP's plugin in ChatGPT's directory answers questions from your company databases on AnythingMCP Cloud (PostgreSQL, MySQL, SQL Server, Oracle, SAP HANA, SQLite, MongoDB, read-only): open the listing (opens in a new tab) and click Install plugin. Every other connector is added to ChatGPT as a custom MCP server with your AnythingMCP MCP URL.
Try asking
Example prompts for VirusTotal
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → VirusTotal, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
VirusTotal + ChatGPT
Threat intelligence from the VirusTotal API v3: file reports by hash, URL, domain and IP reports from about 70 engines, search, relationships between indicators, sandbox behaviour and MITRE ATT&CK, community comments and votes, rescans and, once an admin enables it, URL scanning.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
VIRUSTOTAL_API_KEY
Step 1 — Get credentials
Setting up takes about 2 minutes. You need a VirusTotal account; the community API key is free.
- Sign up for the free VirusTotal Community at https://www.virustotal.com/gui/join-us and confirm the e-mail.
- Open your API key at https://www.virustotal.com/gui/my-apikey and paste it into
VIRUSTOTAL_API_KEY. It is 64 lowercase hexadecimal characters and is sent in thex-apikeyheader. - Install the connector and run
virustotal_list_popular_threat_categories: a cheap call that confirms the key.
Public or Premium key: a free key allows 4 requests a minute and 500 a day, and the VirusTotal terms forbid using the public API in commercial products or business workflows. Premium keys have no such limits and unlock virustotal_intelligence_search, more relationships and more context. Daily quotas reset at 00:00 UTC. virustotal_get_api_usage with your VirusTotal user name shows the daily usage per endpoint for up to 30 days.
Privacy: every indicator you look up or submit becomes part of the VirusTotal dataset and is visible to the community. Never send URLs, domains or hashes that are confidential or contain personal data, such as a URL with a token, a password reset link or an internal host name.
What it reads:
- Verdicts:
virustotal_get_file_report(by SHA-256, SHA-1 or MD5, no upload),virustotal_get_url_report,virustotal_get_domain_reportandvirustotal_get_ip_report, with the detection stats of about 70 engines and URL blocklists, each engine's verdict, reputation, votes, tags and, depending on the object, file type and names, final URL and redirects, DNS records, WHOIS, registrar, ASN and country. virustotal_searchtakes a hash, a full URL, a domain, an IP or a comment tag such as#phishing. With a URL it returns the URL report, the easy way when you do not have the URL id.- Relationships:
virustotal_list_related_objectsfollows one, for example a file'scontacted_domains, a domain'sresolutionsorsubdomains, an IP'scommunicating_files.virustotal_list_related_idsreturns only the ids, which is much smaller.virustotal_get_resolutionreads one DNS resolution (id = the IP followed by the domain, for example8.8.8.8dns.google). - Sandboxes:
virustotal_get_file_behaviour_summary(processes, files, registry keys, mutexes, DNS, IP and HTTP traffic) andvirustotal_get_file_mitre_attack(MITRE ATT&CK tactics and techniques per sandbox). - Community:
virustotal_list_commentsandvirustotal_list_voteson one object,virustotal_list_latest_commentsacross VirusTotal (filter such astag:malware),virustotal_get_commentfor one. - Premium only:
virustotal_intelligence_searchwith search modifiers such astype:peexe positives:10+.
What it writes: virustotal_rescan asks for a fresh analysis of a file, URL, domain or IP VirusTotal already knows, and virustotal_get_analysis reads the result (poll every 15 to 60 seconds until status is completed). virustotal_add_comment posts a public comment under your account (words starting with # become tags) and virustotal_add_vote casts a public harmless or malicious vote.
Switched off at install: virustotal_scan_url and virustotal_delete_comment. Neither can be undone: a submitted URL, with anything in it, is shared with the VirusTotal community for good, and a deleted comment is gone. A workspace admin turns them on when the team needs them. With virustotal_scan_url enabled, a URL VirusTotal has not seen (404) can be submitted and its result read with virustotal_get_analysis.
URL identifiers: URL tools take the URL id, which is the URL in unpadded base64url (https://example.com/ becomes aHR0cHM6Ly9leGFtcGxlLmNvbS8) or the SHA-256 of the canonical URL. The data.id of a URL report is that SHA-256; an analysis id looks like u-<sha256>-<timestamp>. When in doubt, the AI uses virustotal_search with the URL.
Data formats: answers follow JSON:API with data.id, data.type and data.attributes. last_analysis_stats counts the engines per verdict (malicious, suspicious, harmless, undetected, timeout), last_analysis_results lists each engine's category and result. reputation is a community score, negative is bad; total_votes counts harmless and malicious votes. Dates are Unix timestamps in seconds (UTC). A low detection count is no proof that something is safe: the AI also checks the analysis date and the relationships. URL, domain and IP reports leave out bulky fields such as HTTP headers, cookies, HTML meta and the full HTTPS certificate; certificates are available through the historical_ssl_certificates relationship.
Paging: list tools return meta.cursor and links.next while more items exist; the AI passes meta.cursor as cursor with the same limit and stops when it is missing.
Common errors: 401 WrongCredentialsError or AuthenticationRequiredError means a wrong or missing key (or an unconfirmed account e-mail), 403 ForbiddenError a Premium-only endpoint or relationship, 404 NotFoundError an object VirusTotal has not seen, 409 AlreadyExistsError a duplicate vote, 429 QuotaExceededError the minute or daily quota (wait, or upgrade), 400 InvalidArgumentError a malformed id.
The connector does not upload files or download samples: look files up by hash.
Step 2 — Install the adapter
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Step 3 — Add the connector in ChatGPT
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
ChatGPT adds MCP servers as plugins on its Plugins page, on the web and on paid plans. Developer mode is no longer needed. In a Business workspace only admins and owners can add one; in Enterprise and Edu an admin can grant the Create plugins with MCPs permission.
- Go to chatgpt.com/plugins, click Add, then Add custom MCP server.
- Enter a name, e.g. Name:
VirusTotal. - Under Connection, enter the Server URL
https://cloud.anythingmcp.com/mcp/YOUR_SERVER_IDand keep Authentication on OAuth. - Select I understand and want to continue, then Create as a plugin. When ChatGPT asks, sign in to AnythingMCP and allow access.
- Install the new plugin from your personal plugins, then type @ in a chat and pick it.
Available tools
| Tool | What it does |
|---|---|
virustotal_get_file_report | Report on a file already known to VirusTotal, by hash: detection stats (malicious, suspicious, harmless, undetected), each engine's… |
virustotal_get_url_report | Report on a URL already analysed by VirusTotal: detection stats and each engine's verdict, categories, final URL after redirects, HTTP… |
virustotal_get_domain_report | Report on a domain: detection stats and each engine's verdict, categories from several vendors, reputation, votes, last DNS records… |
virustotal_get_ip_report | Report on an IPv4 or IPv6 address: detection stats and each engine's verdict, reputation, votes, ASN and owner, country and continent… |
virustotal_get_analysis | Status and result of one analysis started by virustotal_scan_url, virustotal_rescan or a file submission: status (queued, in-progress… |
virustotal_search | Look up a file hash, a URL, a domain, an IP address or a comment tag in one call |
virustotal_intelligence_search | VirusTotal Intelligence corpus search with search modifiers (e.g. type:peexe positives:10+ fs:2026-01-01+, entity:domain domain_regex:...… |
virustotal_list_comments | Community comments on a file, URL, domain or IP address, newest first: text, tags, date and the comment's own votes |
virustotal_list_votes | Community votes on a file, URL, domain or IP address: each vote's verdict (harmless or malicious), value and date |
virustotal_list_related_objects | Objects related to a file, URL, domain or IP address, as full objects: e.g. the domains and IPs a file contacted, files it dropped, a… |
virustotal_list_related_ids | Ids (descriptors) of the objects related to a file, URL, domain or IP address, without their attributes: much smaller than… |
virustotal_get_file_behaviour_summary | Summary of all sandbox runs of a file: processes created, files written and deleted, registry keys, mutexes, DNS lookups, IP traffic, HTTP… |
virustotal_get_file_mitre_attack | MITRE ATT&CK tactics and techniques observed for a file in each sandbox, with the signatures that triggered them and their severity |
virustotal_list_latest_comments | Latest comments posted anywhere on VirusTotal, optionally only those with a tag (filter tag:malware) |
virustotal_get_comment | One comment by id: text, tags, date, votes and, with relationships=author,item, who wrote it and what it is about |
virustotal_get_resolution | One DNS resolution object: which IP a domain resolved to, when, and from which source |
virustotal_list_popular_threat_categories | List of the threat categories antivirus verdicts commonly use (trojan, ransomware, dropper, miner, phishing, ...) |
virustotal_get_api_usage | Daily API usage of a VirusTotal user, per endpoint, between two dates (at most 30 days, default the last 30) |
virustotal_scan_url | Submit a URL for scanning by about 70 security engines |
virustotal_rescan | Ask VirusTotal to analyse again an object it already knows: a file by hash, a URL by identifier, a domain or an IP address |
virustotal_add_comment | Post a public comment on a file, URL, domain or IP address under your VirusTotal account |
virustotal_add_vote | Cast your public vote on a file, URL, domain or IP address: harmless or malicious |
virustotal_delete_comment | Delete one of your own public comments by id |
Example prompts
- "Is the file with SHA-256 275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f flagged as malicious? Show the detection stats and the threat label."
- "Check the domain example-login-secure.com: what do the engines say, when was it created and which IPs did it resolve to?"
- "What is the reputation of the IP 185.220.101.1, who owns it and which files have communicated with it?"
- "Show the sandbox behaviour and the MITRE ATT&CK techniques of this hash: 44d88612fea8a8f36de82e1278abb02f."
- "List the latest community comments tagged phishing and summarise which brands they target."
FAQ
Does the free ChatGPT plan work with custom MCP servers? OpenAI documents custom MCP servers for paid plans only; the Free plan is not on its list.
Next steps
- Connector landing page
- Connect to Claude
- Connect to Cursor
- Connect to Gemini
- Connect to Meta Muse
- Connect to Microsoft Copilot
Was this guide helpful?