loading…
Search for a command to run...
loading…
MCP server for querying the VirusTotal API. This server provides tools for scanning URLs, analyzing file hashes, and retrieving IP address reports.
MCP server for querying the VirusTotal API. This server provides tools for scanning URLs, analyzing file hashes, and retrieving IP address reports.
A Model Context Protocol (MCP) server for querying the VirusTotal API. This server provides comprehensive security analysis tools with automatic relationship data fetching. It integrates seamlessly with MCP-compatible applications like Claude Desktop.
claude mcp add --transport stdio --env VIRUSTOTAL_API_KEY=your-key virustotal -- npx -y @burtthecoder/mcp-virustotal
codex mcp add virustotal --env VIRUSTOTAL_API_KEY=your-key -- npx -y @burtthecoder/mcp-virustotal
gemini mcp add -e VIRUSTOTAL_API_KEY=your-key virustotal npx -y @burtthecoder/mcp-virustotal
To install VirusTotal Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @burtthecoder/mcp-virustotal --client claude
npm install -g @burtthecoder/mcp-virustotal
{
"mcpServers": {
"virustotal": {
"command": "mcp-virustotal",
"env": {
"VIRUSTOTAL_API_KEY": "your-virustotal-api-key"
}
}
}
}
Configuration file location:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonTo use this MCP server in VS Code with GitHub Copilot:
npm install -g @burtthecoder/mcp-virustotal
Create or update your VS Code MCP configuration file at:
~/.vscode/mcp.json%USERPROFILE%\.vscode\mcp.jsonAdd the following configuration:
{
"servers": {
"virustotal": {
"command": "mcp-virustotal",
"env": {
"VIRUSTOTAL_API_KEY": "your-virustotal-api-key"
}
}
}
}
You can then use the VirusTotal tools through GitHub Copilot in VS Code by referencing the available tools in your prompts.
If you prefer to run from source or need to modify the code:
git clone <repository_url>
cd mcp-virustotal
npm install
npm run build
{
"mcpServers": {
"virustotal": {
"command": "node",
"args": ["/absolute/path/to/mcp-virustotal/build/index.js"],
"env": {
"VIRUSTOTAL_API_KEY": "your-virustotal-api-key"
}
}
}
}
The server supports HTTP streaming transport in addition to the default stdio transport. This is useful for running the server as a standalone HTTP service that multiple clients can connect to.
Set the MCP_TRANSPORT environment variable to httpStream:
MCP_TRANSPORT=httpStream MCP_PORT=3000 VIRUSTOTAL_API_KEY=your-key node build/index.js
| Variable | Default | Description |
|---|---|---|
VIRUSTOTAL_API_KEY |
(required) | Your VirusTotal API key |
MCP_TRANSPORT |
stdio |
Transport mode: stdio or httpStream |
MCP_PORT |
3000 |
HTTP server port (only for httpStream) |
MCP_ENDPOINT |
/mcp |
HTTP endpoint path (only for httpStream) |
docker build -t mcp-virustotal .
docker run -p 3000:3000 \
-e VIRUSTOTAL_API_KEY=your-key \
-e MCP_TRANSPORT=httpStream \
mcp-virustotal
The server exposes a health check endpoint at /health when running in HTTP streaming mode.
?relationships= query, batched to minimize API callstype:peexe positives:5+)get_url_reporturl (required): The URL to analyzeget_file_reporthash (required): MD5, SHA-1 or SHA-256 hash of the fileget_ip_reportip (required): IP address to analyzeget_domain_reportdomain (required): Domain name to analyzerelationships (optional): Array of specific relationships to include in the reportget_url_relationshipurl (required): The URL to get relationships forrelationship (required): Type of relationship to querylimit (optional, default: 10): Maximum number of related objects to retrieve (1-40)cursor (optional): Continuation cursor for paginationget_file_relationshiphash (required): MD5, SHA-1 or SHA-256 hash of the filerelationship (required): Type of relationship to querylimit (optional, default: 10): Maximum number of related objects to retrieve (1-40)cursor (optional): Continuation cursor for paginationget_ip_relationshipip (required): IP address to analyzerelationship (required): Type of relationship to querylimit (optional, default: 10): Maximum number of related objects to retrieve (1-40)cursor (optional): Continuation cursor for paginationget_domain_relationshipdomain (required): Domain name to analyzerelationship (required): Type of relationship to querylimit (optional, default: 10): Maximum number of related objects to retrieve (1-40)cursor (optional): Continuation cursor for paginationsearch_vtquery (required): Search query. Examples: a SHA-256 hash, evil.com, 8.8.8.8, type:peexe size:90kb+ tag:signed positives:5+limit (optional, default: 20): Maximum number of results (1-300)cursor (optional): Continuation cursor for paginationget_file_behaviour_summaryhash (required): MD5, SHA-1 or SHA-256 hash of the fileget_collectionrelated_threat_actors and collections relationships on other tools. Optionally include relationships to fetch member IOCs in the same callid (required): Collection ID (e.g. threat-actor--<uuid>, malware-family--<id>)relationships (optional): Array of relationship names to includeIf you see "Wrong API key" errors:
/tmp/mcp-virustotal-server.log (on macOS) for API key statusTo run in development mode with hot reloading:
npm run dev
Run the formatter test suite (no API key, no network):
npm test
Exercise all 11 tools end-to-end against the real VirusTotal API:
VIRUSTOTAL_API_KEY=your-key npm run smoke
The smoke test paces calls at 20 s to stay under the 4-requests-per-minute public-tier rate limit. It is not compatible with heavily reduced free tiers (e.g. 1 lookup/day) — for those, run a single tool by editing scripts/smoke-test.mjs and pick the one you want to verify.
The server includes comprehensive error handling for:
search_vt, get_file_behaviour_summary, get_collection, and get_domain_relationship tools; synced relationship lists with current VirusTotal v3 docs (drops removed clues, adds collections/votes/user_votes/embedded_js_files/urls_related_by_tracker_id where applicable); get_url_report now returns the cached report when available instead of re-scanning on every call; report tools use batched ?relationships= queries for dramatically fewer API callsgit checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Run in your terminal:
claude mcp add burtthecoder-mcp-virustotal -- npx pro tip
Just installed BurtTheCoder/mcp-virustotal? Say to Claude: "remember why I installed BurtTheCoder/mcp-virustotaland what I want to try" — it'll save into your Vault.
how this works →CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Security
Low riskAutomated heuristic from public metadata — not a security guarantee.