MCP server for querying VirusTotal API with comprehensive security analysis tools.
io.github.BurtTheCoder/virustotal — VirusTotal MCP Server
This Model Context Protocol (MCP) server queries the VirusTotal API to support security analysis. It is described as providing “comprehensive security analysis tools,” including automatic relationship data fetching, and it is intended to work with MCP-compatible applications such as Claude Desktop.
🛠️ Key Features
Queries the VirusTotal API
Comprehensive security analysis tools
Automatic relationship data fetching
🚀 Use Cases
Malware analysis and malware detection workflows
Threat intelligence and cybersecurity research using VirusTotal
⚡ Developer Benefits
MCP server integration with MCP-compatible tools (e.g., Claude Desktop)
Supports developer workflows involving IOCs and security analysis
⚠️ Limitations
Limited description available beyond VirusTotal API querying and relationship fetching
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.
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.
Running in HTTP Streaming Mode
Set the MCP_TRANSPORT environment variable to httpStream:
The server exposes a health check endpoint at /health when running in HTTP streaming mode.
Features
Comprehensive Analysis Reports: Each analysis tool automatically fetches relevant relationship data along with the basic report using VirusTotal's ?relationships= query, batched to minimize API calls
URL Analysis: Cached-report-first lookups with automatic fallback to scanning, plus contacted domains, downloaded files, and threat actors
File Analysis: Detailed analysis of file hashes including behaviors, dropped files, and network connections
IP Analysis: Security reports with historical data, resolutions, and related threats
Domain Analysis: DNS information, WHOIS data, SSL certificates, and subdomains
Detailed Relationship Analysis: Dedicated tools for querying specific types of relationships with pagination support
Corpus Search: Free-form search across files, URLs, domains, IPs, and comments, including VTI-style modifier syntax (type:peexe positives:5+)
Sandbox Behaviour Summary: Cross-sandbox merged view of processes, files, registry, network, MITRE ATT&CK, IDS alerts, and signature matches
Threat Collections: Read APT, malware-family, campaign, and intel-report objects referenced from any report's relationships
Rich Formatting: Clear categorization and presentation of analysis results and relationship data
Description: Get a comprehensive URL analysis report including security scan results and key relationships (communicating files, contacted domains/IPs, downloaded files, redirects, threat actors). Returns the cached VirusTotal report when available; only submits the URL for scanning and polls for completion on a cache miss
Parameters:
url (required): The URL to analyze
2. File Report Tool
Name: get_file_report
Description: Get a comprehensive file analysis report using its hash (MD5/SHA-1/SHA-256). Includes detection results, file properties, and key relationships (behaviors, dropped files, network connections, embedded content, threat actors)
Parameters:
hash (required): MD5, SHA-1 or SHA-256 hash of the file
3. IP Report Tool
Name: get_ip_report
Description: Get a comprehensive IP address analysis report including geolocation, reputation data, and key relationships (communicating files, historical certificates/WHOIS, resolutions)
Parameters:
ip (required): IP address to analyze
4. Domain Report Tool
Name: get_domain_report
Description: Get a comprehensive domain analysis report including DNS records, WHOIS data, and key relationships (SSL certificates, subdomains, historical data)
Parameters:
domain (required): Domain name to analyze
relationships (optional): Array of specific relationships to include in the report
Relationship Tools (for Detailed Analysis)
1. URL Relationship Tool
Name: get_url_relationship
Description: Query a specific relationship type for a URL with pagination support. Choose from 22 relationship types including analyses, communicating files, contacted domains/IPs, downloaded files, graphs, referrers, redirects, threat actors, collections, and votes
Parameters:
url (required): The URL to get relationships for
relationship (required): Type of relationship to query
limit (optional, default: 10): Maximum number of related objects to retrieve (1-40)
cursor (optional): Continuation cursor for pagination
2. File Relationship Tool
Name: get_file_relationship
Description: Query a specific relationship type for a file with pagination support. Choose from 40 relationship types including behaviors, network connections, dropped files, embedded content, execution chains, and threat actors
Parameters:
hash (required): MD5, SHA-1 or SHA-256 hash of the file
relationship (required): Type of relationship to query
limit (optional, default: 10): Maximum number of related objects to retrieve (1-40)
cursor (optional): Continuation cursor for pagination
3. IP Relationship Tool
Name: get_ip_relationship
Description: Query a specific relationship type for an IP address with pagination support. Choose from 15 relationship types including communicating files, historical SSL certificates, WHOIS records, resolutions, threat actors, and votes
Parameters:
ip (required): IP address to analyze
relationship (required): Type of relationship to query
limit (optional, default: 10): Maximum number of related objects to retrieve (1-40)
cursor (optional): Continuation cursor for pagination
4. Domain Relationship Tool
Name: get_domain_relationship
Description: Query a specific relationship type for a domain with pagination support. Choose from 24 relationship types including SSL certificates, subdomains, historical data, DNS records, and collections
Parameters:
domain (required): Domain name to analyze
relationship (required): Type of relationship to query
limit (optional, default: 10): Maximum number of related objects to retrieve (1-40)
cursor (optional): Continuation cursor for pagination
Search & Pivot Tools
1. Corpus Search
Name: search_vt
Description: Search the VirusTotal corpus for files, URLs, domains, IPs, or comments matching a query. Accepts plain IOCs (hash, URL, domain, IP), free text against comments, or VTI-style search modifiers
limit (optional, default: 20): Maximum number of results (1-300)
cursor (optional): Continuation cursor for pagination
2. File Behaviour Summary
Name: get_file_behaviour_summary
Description: Get a consolidated sandbox behaviour summary for a file, merged across every sandbox that analyzed it. Returns processes, files, registry, network activity, DNS lookups, MITRE ATT&CK techniques, IDS alerts, and signature matches in a single view — far more useful than iterating individual behaviour reports
Parameters:
hash (required): MD5, SHA-1 or SHA-256 hash of the file
3. Collection Lookup
Name: get_collection
Description: Retrieve a VirusTotal collection by ID. Collections represent threat actors, malware families, campaigns, intel reports, and curated IOC sets — often referenced from the related_threat_actors and collections relationships on other tools. Optionally include relationships to fetch member IOCs in the same call
Parameters:
id (required): Collection ID (e.g. threat-actor--<uuid>, malware-family--<id>)
relationships (optional): Array of relationship names to include
Check the log file at /tmp/mcp-virustotal-server.log (on macOS) for API key status
Verify your API key:
Should be a valid VirusTotal API key (usually 64 characters)
No extra spaces or quotes around the key
Must be from the API Keys section in your VirusTotal account
After any configuration changes:
Save the config file
Restart Claude Desktop
Check logs for new API key status
Development
To run in development mode with hot reloading:
bash
npm run dev
Testing
Unit tests
Run the formatter test suite (no API key, no network):
bash
npm test
Live smoke test
Exercise all 11 tools end-to-end against the real VirusTotal API:
bash
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.
Error Handling
The server includes comprehensive error handling for:
Invalid API keys
Rate limiting
Network errors
Invalid input parameters
Invalid hash formats
Invalid IP formats
Invalid URL formats
Invalid relationship types
Pagination errors
Version History
v1.0.0: Initial release with core functionality
v1.1.0: Added relationship analysis tools for URLs, files, and IP addresses
v1.2.0: Added improved error handling and logging
v1.3.0: Added pagination support for relationship queries
v1.4.0: Added automatic relationship fetching in report tools and domain analysis support
v1.5.0: Migrated to FastMCP framework with HTTP streaming transport support
v1.6.0: Added 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 calls
Contributing
Fork the repository
Create a feature branch (git checkout -b feature/amazing-feature)
Commit your changes (git commit -m 'Add amazing feature')
Push to the branch (git push origin feature/amazing-feature)
Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.