VirusTotal
liveSecurityFile, URL, domain, and IP reputation across 70+ AV engines. BYO key (free tier 4 req/min, 500/day).
BYO key only — free tier is tight (4 req/min, 500/day). Pass _apiKey on the gateway URL.
{
"mcpServers": {
"pipeworx-virustotal": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://gateway.pipeworx.io/virustotal/mcp?_apiKey=your_vt_key"
]
}
}
}Tools
lookup_filerequired: hashLook up a file by hash (sha256, sha1, or md5). Returns last-analysis stats (malicious / suspicious / harmless / undetected detector counts), type description, size, names seen, and tags. Useful for tr
hashreqstringSHA-256 / SHA-1 / MD5Try it
lookup_urlrequired: urlLook up a URL's reputation. Returns last-analysis stats across all engines, categories (per vendor), and whether the URL has been redirected. The URL is canonicalized before lookup; no submission step
urlreqstringFull URL including schemeTry it
lookup_domainrequired: domainLook up a domain's reputation via VirusTotal (no scheme, e.g. "example.com"). Returns engine analysis stats (malicious/suspicious/harmless/undetected counts and percent), reputation score, community v
domainreqstringFQDN, no schemeTry it
lookup_iprequired: ipLook up an IPv4 address. Returns last-analysis stats, ASN/owner, country, network range, and reputation score.
ipreqstringIPv4 addressTry it
Test with curl
The gateway speaks JSON-RPC 2.0 over HTTP POST. You can test any pack directly from the terminal.
curl -X POST https://gateway.pipeworx.io/virustotal/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'curl -X POST https://gateway.pipeworx.io/virustotal/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"lookup_file","arguments":{"hash": "example"}}}'Use with the SDK
Install @pipeworx/sdk to call tools from any TypeScript/Node project.
import { Pipeworx } from '@pipeworx/sdk';
const px = new Pipeworx();
const result = await px.call("lookup_file", {"hash":"example"});// Or ask in plain English:
const answer = await px.ask("file, url, domain, and ip reputation across 70+ av engines");