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. To install VirusTotal Server for Claude Desktop automatically via Smithery: 1. Install the server globally via npm: 2. Add to your Claude Desktop co
Add this skill
npx mdskills install BurtTheCoder/mcp-virustotalComprehensive VirusTotal API integration with well-documented tools, clear setup, and automatic relationship fetching
1# VirusTotal MCP Server23[](https://smithery.ai/server/@burtthecoder/mcp-virustotal)45A Model Context Protocol (MCP) server for querying the [VirusTotal API](https://www.virustotal.com/). This server provides comprehensive security analysis tools with automatic relationship data fetching. It integrates seamlessly with MCP-compatible applications like [Claude Desktop](https://claude.ai).67<a href="https://glama.ai/mcp/servers/rcbu34kp5c"><img width="380" height="200" src="https://glama.ai/mcp/servers/rcbu34kp5c/badge" /></a>89## Quick Start (Recommended)1011### Installing via Smithery1213To install VirusTotal Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@burtthecoder/mcp-virustotal):1415```bash16npx -y @smithery/cli install @burtthecoder/mcp-virustotal --client claude17```1819### Installing Manually20211. Install the server globally via npm:22```bash23npm install -g @burtthecoder/mcp-virustotal24```25262. Add to your Claude Desktop configuration file:27```json28{29 "mcpServers": {30 "virustotal": {31 "command": "mcp-virustotal",32 "env": {33 "VIRUSTOTAL_API_KEY": "your-virustotal-api-key"34 }35 }36 }37}38```3940Configuration file location:41- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`42- Windows: `%APPDATA%\Claude\claude_desktop_config.json`43443. Restart Claude Desktop4546### Using with VS Code4748To use this MCP server in VS Code with GitHub Copilot:49501. Install the server globally via npm:51```bash52npm install -g @burtthecoder/mcp-virustotal53```54552. Create or update your VS Code MCP configuration file at:56 - macOS/Linux: `~/.vscode/mcp.json`57 - Windows: `%USERPROFILE%\.vscode\mcp.json`58593. Add the following configuration:60```json61{62 "servers": {63 "virustotal": {64 "command": "mcp-virustotal",65 "env": {66 "VIRUSTOTAL_API_KEY": "your-virustotal-api-key"67 }68 }69 }70}71```72734. Reload VS Code to activate the MCP server7475You can then use the VirusTotal tools through GitHub Copilot in VS Code by referencing the available tools in your prompts.7677## Alternative Setup (From Source)7879If you prefer to run from source or need to modify the code:80811. Clone and build:82```bash83git clone <repository_url>84cd mcp-virustotal85npm install86npm run build87```88892. Add to your Claude Desktop configuration:90```json91{92 "mcpServers": {93 "virustotal": {94 "command": "node",95 "args": ["/absolute/path/to/mcp-virustotal/build/index.js"],96 "env": {97 "VIRUSTOTAL_API_KEY": "your-virustotal-api-key"98 }99 }100 }101}102```103104## HTTP Streaming Transport105106The 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.107108### Running in HTTP Streaming Mode109110Set the `MCP_TRANSPORT` environment variable to `httpStream`:111112```bash113MCP_TRANSPORT=httpStream MCP_PORT=3000 VIRUSTOTAL_API_KEY=your-key node build/index.js114```115116### Environment Variables117118| Variable | Default | Description |119|---|---|---|120| `VIRUSTOTAL_API_KEY` | *(required)* | Your VirusTotal API key |121| `MCP_TRANSPORT` | `stdio` | Transport mode: `stdio` or `httpStream` |122| `MCP_PORT` | `3000` | HTTP server port (only for `httpStream`) |123| `MCP_ENDPOINT` | `/mcp` | HTTP endpoint path (only for `httpStream`) |124125### Docker with HTTP Streaming126127```bash128docker build -t mcp-virustotal .129docker run -p 3000:3000 \130 -e VIRUSTOTAL_API_KEY=your-key \131 -e MCP_TRANSPORT=httpStream \132 mcp-virustotal133```134135The server exposes a health check endpoint at `/health` when running in HTTP streaming mode.136137## Features138139- **Comprehensive Analysis Reports**: Each analysis tool automatically fetches relevant relationship data along with the basic report, providing a complete security overview in a single request140- **URL Analysis**: Security reports with automatic fetching of contacted domains, downloaded files, and threat actors141- **File Analysis**: Detailed analysis of file hashes including behaviors, dropped files, and network connections142- **IP Analysis**: Security reports with historical data, resolutions, and related threats143- **Domain Analysis**: DNS information, WHOIS data, SSL certificates, and subdomains144- **Detailed Relationship Analysis**: Dedicated tools for querying specific types of relationships with pagination support145- **Rich Formatting**: Clear categorization and presentation of analysis results and relationship data146147## Tools148149### Report Tools (with Automatic Relationship Fetching)150151### 1. URL Report Tool152- Name: `get_url_report`153- Description: Get a comprehensive URL analysis report including security scan results and key relationships (communicating files, contacted domains/IPs, downloaded files, redirects, threat actors)154- Parameters:155 * `url` (required): The URL to analyze156157### 2. File Report Tool158- Name: `get_file_report`159- 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)160- Parameters:161 * `hash` (required): MD5, SHA-1 or SHA-256 hash of the file162163### 3. IP Report Tool164- Name: `get_ip_report`165- Description: Get a comprehensive IP address analysis report including geolocation, reputation data, and key relationships (communicating files, historical certificates/WHOIS, resolutions)166- Parameters:167 * `ip` (required): IP address to analyze168169### 4. Domain Report Tool170- Name: `get_domain_report`171- Description: Get a comprehensive domain analysis report including DNS records, WHOIS data, and key relationships (SSL certificates, subdomains, historical data)172- Parameters:173 * `domain` (required): Domain name to analyze174 * `relationships` (optional): Array of specific relationships to include in the report175176### Relationship Tools (for Detailed Analysis)177178### 1. URL Relationship Tool179- Name: `get_url_relationship`180- Description: Query a specific relationship type for a URL with pagination support. Choose from 17 relationship types including analyses, communicating files, contacted domains/IPs, downloaded files, graphs, referrers, redirects, and threat actors181- Parameters:182 * `url` (required): The URL to get relationships for183 * `relationship` (required): Type of relationship to query184 - Available relationships: analyses, comments, communicating_files, contacted_domains, contacted_ips, downloaded_files, graphs, last_serving_ip_address, network_location, referrer_files, referrer_urls, redirecting_urls, redirects_to, related_comments, related_references, related_threat_actors, submissions185 * `limit` (optional, default: 10): Maximum number of related objects to retrieve (1-40)186 * `cursor` (optional): Continuation cursor for pagination187188### 2. File Relationship Tool189- Name: `get_file_relationship`190- Description: Query a specific relationship type for a file with pagination support. Choose from 41 relationship types including behaviors, network connections, dropped files, embedded content, execution chains, and threat actors191- Parameters:192 * `hash` (required): MD5, SHA-1 or SHA-256 hash of the file193 * `relationship` (required): Type of relationship to query194 - Available relationships: analyses, behaviours, bundled_files, carbonblack_children, carbonblack_parents, ciphered_bundled_files, ciphered_parents, clues, collections, comments, compressed_parents, contacted_domains, contacted_ips, contacted_urls, dropped_files, email_attachments, email_parents, embedded_domains, embedded_ips, embedded_urls, execution_parents, graphs, itw_domains, itw_ips, itw_urls, memory_pattern_domains, memory_pattern_ips, memory_pattern_urls, overlay_children, overlay_parents, pcap_children, pcap_parents, pe_resource_children, pe_resource_parents, related_references, related_threat_actors, similar_files, submissions, screenshots, urls_for_embedded_js, votes195 * `limit` (optional, default: 10): Maximum number of related objects to retrieve (1-40)196 * `cursor` (optional): Continuation cursor for pagination197198### 3. IP Relationship Tool199- Name: `get_ip_relationship`200- Description: Query a specific relationship type for an IP address with pagination support. Choose from 12 relationship types including communicating files, historical SSL certificates, WHOIS records, resolutions, and threat actors201- Parameters:202 * `ip` (required): IP address to analyze203 * `relationship` (required): Type of relationship to query204 - Available relationships: comments, communicating_files, downloaded_files, graphs, historical_ssl_certificates, historical_whois, related_comments, related_references, related_threat_actors, referrer_files, resolutions, urls205 * `limit` (optional, default: 10): Maximum number of related objects to retrieve (1-40)206 * `cursor` (optional): Continuation cursor for pagination207208### 4. Domain Relationship Tool209- Name: `get_domain_relationship`210- Description: Query a specific relationship type for a domain with pagination support. Choose from 21 relationship types including SSL certificates, subdomains, historical data, and DNS records211- Parameters:212 * `domain` (required): Domain name to analyze213 * `relationship` (required): Type of relationship to query214 - Available relationships: caa_records, cname_records, comments, communicating_files, downloaded_files, historical_ssl_certificates, historical_whois, immediate_parent, mx_records, ns_records, parent, referrer_files, related_comments, related_references, related_threat_actors, resolutions, soa_records, siblings, subdomains, urls, user_votes215 * `limit` (optional, default: 10): Maximum number of related objects to retrieve (1-40)216 * `cursor` (optional): Continuation cursor for pagination217218## Requirements219220- Node.js (v20 or later)221- A valid [VirusTotal API Key](https://www.virustotal.com/gui/my-apikey)222223## Troubleshooting224225### API Key Issues226227If you see "Wrong API key" errors:2282291. Check the log file at `/tmp/mcp-virustotal-server.log` (on macOS) for API key status2302. Verify your API key:231 - Should be a valid VirusTotal API key (usually 64 characters)232 - No extra spaces or quotes around the key233 - Must be from the API Keys section in your VirusTotal account2343. After any configuration changes:235 - Save the config file236 - Restart Claude Desktop237 - Check logs for new API key status238239## Development240241To run in development mode with hot reloading:242```bash243npm run dev244```245246## Error Handling247248The server includes comprehensive error handling for:249- Invalid API keys250- Rate limiting251- Network errors252- Invalid input parameters253- Invalid hash formats254- Invalid IP formats255- Invalid URL formats256- Invalid relationship types257- Pagination errors258259## Version History260261- v1.0.0: Initial release with core functionality262- v1.1.0: Added relationship analysis tools for URLs, files, and IP addresses263- v1.2.0: Added improved error handling and logging264- v1.3.0: Added pagination support for relationship queries265- v1.4.0: Added automatic relationship fetching in report tools and domain analysis support266- v1.5.0: Migrated to FastMCP framework with HTTP streaming transport support267268## Contributing2692701. Fork the repository2712. Create a feature branch (`git checkout -b feature/amazing-feature`)2723. Commit your changes (`git commit -m 'Add amazing feature'`)2734. Push to the branch (`git push origin feature/amazing-feature`)2745. Open a Pull Request275276## License277278This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.279
Full transparency — inspect the skill content before installing.