MCP server for querying the VirusTotal API. This server provides tools for scanning URLs, analyzing file hashes, and retrieving IP address reports.
Add to Claude Desktop config.json
{
"mcpServers": {
"burtthecoder-mcp-virustotal": {
"command": "node",
"args": [
"~/.mcp/mcp-virustotal/index.js"
]
}
}
} Get the source and run locally
git clone https://github.com/BurtTheCoder/mcp-virustotal.git ~/.mcp/mcp-virustotal
cd ~/.mcp/mcp-virustotal 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 query
limit (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 query
limit (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 query
limit (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 query
limit (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 include
If 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.
A Model Context Protocol server for Ghidra that enables LLMs to autonomously reverse engineer applications. Provides tools for decompiling binaries, renaming methods and data, and listing methods, classes, imports, and exports.
MCP server for IDA Pro, allowing you to perform binary analysis with AI assistants. This plugin implement decompilation, disassembly and allows you to generate malware analysis reports automatically.
JADX-AI-MCP is a plugin and MCP Server for the JADX decompiler that integrates directly with Model Context Protocol (MCP) to provide live reverse engineering support with LLMs like Claude.
Beelzebub is a honeypot framework that lets you build honeypot tools using MCP. Its purpose is to detect prompt injection or malicious agent behavior. The underlying idea is to provide the agent with tools it would never use in its normal work.
vet-mcp checks open source packages—like those suggested by AI coding tools—for vulnerabilities and malicious code. It supports npm and PyPI, and runs locally via Docker or as a standalone binary for fast, automated vetting.
Allow AI agents to scan code for security vulnerabilites using Semgrep.