Virustotal

io.github.BurtTheCoderPublished by GitHub account BurtTheCoderv1.0.17Updated Oct 24, 2026

MCP server for querying VirusTotal API with comprehensive security analysis tools.

Overview

AI-generated overview

MCP server that lets an assistant query the VirusTotal v3 API for file, URL, IP and domain threat reports and related indicators.

What you can do
  • Look up file, URL, IP and domain reports with key relationships fetched in one batched call
  • Page through 100+ relationship types for files, URLs, IPs and domains with cursor pagination
  • Search the VirusTotal corpus with VTI-style modifiers and pull sandbox behaviour summaries
  • Retrieve threat-actor and malware-family collections
When to use it
Useful when an assistant needs to triage indicators during security analysis: checking a hash, URL, IP or domain for detections, or pivoting to contacted hosts, dropped files, resolutions and threat actors.
Requirements
Runs locally as an npm package over stdio, needing Node.js 20 or newer and a VirusTotal API key supplied in the VIRUSTOTAL_API_KEY environment variable. Network access to the VirusTotal API is required. An optional HTTP streaming mode is configured with MCP_TRANSPORT, MCP_HOST, MCP_PORT and MCP_ENDPOINT.
Before you install
Lookups send your indicators to VirusTotal, and a URL scan on a cache miss submits that URL for analysis. The optional HTTP transport has no authentication, so anyone who can reach the port can spend your API quota; keep it on localhost or behind an authenticating proxy. The public API tier allows only 4 requests per minute, and the key is read from VIRUSTOTAL_API_KEY.

Installation

In SourceWeft

  1. Open Virustotal in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[mcp-virustotal: threat intelligence for AI agents]

[npm version] [CI] [License: MIT] [Node 20 or newer] [MCP Registry] [Smithery]

Quickstart · Tools · HTTP · Security · Troubleshooting · Docs

mcp-virustotal is an MCP server that gives AI agents access to the VirusTotal v3 API. Hand your agent a hash, URL, IP or domain and get back the detection report plus the relationships an analyst would pivot on: contacted hosts, dropped files, resolutions, threat actors.

[!NOTE] Independent project, not affiliated with VirusTotal or Google. You need your own VirusTotal API key.

Highlights

  • Reports with relationships. File, URL, IP and domain reports fetch key relationships in one batched ?relationships= call to save quota.
  • Cache first. get_url_report returns the cached VirusTotal report and only submits a scan on a cache miss.
  • Pivot tools. Corpus search with VTI-style modifiers (type:peexe positives:5+), merged sandbox behaviour summaries, and threat-actor and malware-family collections.
  • Full relationship paging. 100+ relationship types across files, URLs, IPs and domains, with cursor pagination.
  • Two transports. stdio for desktop clients, HTTP streaming for a shared service.
  • Tested. Unit tests for the formatters and API layer run in CI on Node 20, 22 and 24.

How it works

mermaid
flowchart LR    A["AI agent<br/>(Claude, Codex, Gemini, VS Code)"] -->|"MCP over stdio or HTTP"| S["mcp-virustotal"]    S -->|"validate input,<br/>HTTPS + API key"| V["VirusTotal v3 API"]    V -->|"JSON"| S    S -->|"formatted report text"| A

Quickstart

Requirements: Node.js 20 or newer and a VirusTotal API key.

sh
# Claude Codeclaude mcp add --transport stdio --env VIRUSTOTAL_API_KEY=your-key virustotal -- npx -y @burtthecoder/mcp-virustotal
# Codex CLIcodex mcp add virustotal --env VIRUSTOTAL_API_KEY=your-key -- npx -y @burtthecoder/mcp-virustotal
# Gemini CLIgemini mcp add -e VIRUSTOTAL_API_KEY=your-key virustotal npx -y @burtthecoder/mcp-virustotal

For Claude Desktop, VS Code, Smithery and running from source, see Connect a client.

Then ask your agent: "Look up the SHA-256 275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f (the EICAR test file) and show what it drops and contacts."

Tools

Eleven tools. Full parameters and relationship lists are in the tool reference.

GroupTools
Reports (with relationships)get_file_report, get_url_report, get_ip_report, get_domain_report
Relationship pagingget_file_relationship, get_url_relationship, get_ip_relationship, get_domain_relationship
Search and pivotsearch_vt, get_file_behaviour_summary, get_collection

HTTP streaming transport

stdio is the default. Set MCP_TRANSPORT=httpStream to run a standalone HTTP service:

sh
MCP_TRANSPORT=httpStream MCP_PORT=3000 VIRUSTOTAL_API_KEY=your-key node build/index.js
sh
docker build -t mcp-virustotal .docker run -p 127.0.0.1:3000:3000 -e VIRUSTOTAL_API_KEY=your-key -e MCP_TRANSPORT=httpStream mcp-virustotal

A health check is served at /health.

Environment variables

VariableDefaultDescription
VIRUSTOTAL_API_KEY(required)Your VirusTotal API key
MCP_TRANSPORTstdiostdio or httpStream
MCP_HOSTlocalhostBind address (httpStream only). The Docker image sets 0.0.0.0
MCP_PORT3000HTTP port (httpStream only)
MCP_ENDPOINT/mcpHTTP endpoint path (httpStream only)

Security

[!WARNING] The HTTP transport has no authentication. Keep the port on localhost or behind an authenticating reverse proxy, or anyone who can reach it can spend your API quota.

  • Tool arguments are validated with zod schemas before any request is built.
  • The API key is read from the environment and sent only to VirusTotal.
  • Lookups send your indicators to VirusTotal. A URL scan on a cache miss submits that URL for analysis.

Report vulnerabilities privately; see SECURITY.md.

Troubleshooting

  • Wrong API key: the key is usually 64 characters with no spaces or quotes. Restart the client after changing config.
  • 429 errors: the public tier allows 4 requests per minute.
  • Logs: logs/mcp-virustotal-server.log in the package directory.

More in the troubleshooting guide.

Development

sh
git clone https://github.com/w0h1v/mcp-virustotal && cd mcp-virustotalnpm cinpm test                                  # build + unit tests, no key or networkVIRUSTOTAL_API_KEY=your-key npm run smoke # all 11 tools against the real API

The smoke test paces calls at 20 s for the public-tier limit and isn't suited to free tiers reduced to a few lookups a day. See CONTRIBUTING.md and the changelog.

License

MIT. See LICENSE.

Source: README.md at commit 8bab26f

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.17LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts