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:
hljs language-bash
npm run dev
Testing
Unit tests
Run the formatter test suite (no API key, no network):
hljs language-bash
npm test
Live smoke test
Exercise all 11 tools end-to-end against the real VirusTotal API:
hljs language-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.