Google Threat Intelligence MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VT_APIKEY | No | VirusTotal API key. Required for local deployment (stdio mode) to authenticate with Google Threat Intelligence/VirusTotal API. | |
| MCP_AUTH_TOKEN | No | Authentication token for remote/cloud deployment. Used to validate the X-Mcp-Authorization header for SSE connections. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| get_collection_reportC | At Google Threat Intelligence, threats are modeled as "collections". This tool retrieves them from the platform. They have different collections types like:
You can find the collection type in the "collection_type" field. Args: id (required): Google Threat Intelligence identifier. Returns: A collection object. Put attention to the collection type to correctly understand what it represents. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_entities_related_to_a_collectionA | Retrieve entities related to the the given collection ID. The following table shows a summary of available relationships for collection objects.
Note on descriptors_only: When True, returns basic descriptors. When False, returns
detailed attributes.
IMPORTANT: Args: id (required): Collection identifier. relationship_name (required): Relationship name. limit (optional): Limit the number of collections to retrieve. 10 by default. descriptors_only (optional)): Bool. Default True. Must be False when the target object type is 'attack_techniques'. Returns: List of objects related to the collection. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_threatsA | Search threats in the Google Threat Intelligence platform. Threats are modeled as collections. Once you get collections from this tool, you can use IMPORTANT CONTEXT CLUE: Pay close attention to the user's request. If their request mentions specific kinds of threats such as "threat actor", "malware family", "campaign", "report", or "vulnerability", treat this as a strong signal that you must use the Filtering by Type:
To filter your search results to a specific type of threat, include the
You can use order_by to sort the results by: "relevance", "creation_date". You can use the sign "+" to make it order ascending, or "-" to make it descending. By default is "relevance-" When asked for latest threats, prioritize campaigns or vulnerabilities over reports. Args: query (required): Search query to find threats. collection_type: Filter your search results to a specific type of threat limit: Limit the number of threats to retrieve. 5 by default. order_by: Order results by the given order key. "relevance-" by default. Returns:
List of collections, aka threats. They are full collection objects, you do not need to retrieve them | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_campaignsB | Search threat campaigns in the Google Threat Intelligence platform. Campaigns are modeled as collections. Once you get collections from this tool, you can use You can use order_by to sort the results by: "relevance", "creation_date". You can use the sign "+" to make it order ascending, or "-" to make it descending. By default is "relevance-" Args: query (required): Search query to find threats. limit: Limit the number of threats to retrieve. 10 by default. order_by: Order results by the given order key. "relevance-" by default. Returns: List of collections, aka threats. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_threat_actorsA | Search threat actors in the Google Threat Intelligence platform. Threat actors are modeled as collections. Once you get collections from this tool, you can use You can use order_by to sort the results by: "relevance", "creation_date". You can use the sign "+" to make it order ascending, or "-" to make it descending. By default is "relevance-" Args: query (required): Search query to find threats. limit: Limit the number of threats to retrieve. 10 by default. order_by: Order results by the given order key. "relevance-" by default. Returns: List of collections, aka threats. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_malware_familiesA | Search malware families in the Google Threat Intelligence platform. Malware families are modeled as collections. Once you get collections from this tool, you can use You can use order_by to sort the results by: "relevance", "creation_date". You can use the sign "+" to make it order ascending, or "-" to make it descending. By default is "relevance-" Args: query (required): Search query to find threats. limit: Limit the number of threats to retrieve. 10 by default. order_by: Order results by the given order key. "relevance-" by default. Returns: List of collections, aka threats. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_software_toolkitsA | Search software toolkits (or just tools) in the Google Threat Intelligence platform. Software toolkits are modeled as collections. Once you get collections from this tool, you can use You can use order_by to sort the results by: "relevance", "creation_date". You can use the sign "+" to make it order ascending, or "-" to make it descending. By default is "relevance-" Args: query (required): Search query to find threats. limit: Limit the number of threats to retrieve. 10 by default. order_by: Order results by the given order key. "relevance-" by default. Returns: List of collections, aka threats. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_threat_reportsA | Search threat reports in the Google Threat Intelligence platform. Google Threat Intelligence provides continuously updated reports and analysis of threat actors, campaigns, vulnerabilities, malware, and tools Threat reports are modeled as collections. Once you get collections from this tool, you can use You can use order_by to sort the results by: "relevance", "creation_date". You can use the sign "+" to make it order ascending, or "-" to make it descending. By default is "relevance-" Args: query (required): Search query to find threats. limit: Limit the number of threats to retrieve. 10 by default. order_by: Order results by the given order key. "relevance-" by default. Returns: List of collections, aka threats. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_vulnerabilitiesA | Search vulnerabilities (CVEs) in the Google Threat Intelligence platform. Vulnerabilities are modeled as collections. Once you get collections from this tool, you can use You can use order_by to sort the results by: "relevance", "creation_date". You can use the sign "+" to make it order ascending, or "-" to make it descending. By default is "relevance-" Args: query (required): Search query to find threats. limit: Limit the number of threats to retrieve. 10 by default. order_by: Order results by the given order key. "relevance-" by default. Returns: List of collections, aka threats. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_collection_timeline_eventsB | Retrieves timeline events from the given collection, when available. This is super valuable curated information produced by security analysits at Google Threat Intelligence. We should fetch this information for campaigns and threat actors always. It's common to display the events grouped by the "event_category" field. Args: id (required): Collection identifier Return: List of events related to the given collection. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_collection_mitre_treeC | Retrieves the Mitre tactics and techniques associated with a threat. Args: id (required): Collection identifiers. Return: A dictionary including the tactics and techniques associated to the given threat. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| create_collectionA | Creates a new collection in Google Threat Intelligence. Ask for the collection's privacy (public or private) if the user doesn't specify. Args: name (required): The name of the collection. description (required): A description of the collection. iocs (required): Indicators of Compromise (IOCs) to include in the collection. The items in the list can be domains, files, ip_addresses, or urls. At least one IOC must be provided. private: Indicates whether the collection should be private. Returns: A dictionary representing the newly created collection. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| update_collection_attributesB | Allows updating a collection's attributes (such as name or description) Args: id (required): The ID of the collection to update. attributes: Available attributes in a collection: * name: string * description: string * private: boolean * tags: array of strings * alt_names: array of strings Returns: A dictionary representing the updated collection. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| update_iocs_in_collectionA | Updates (add or remove) Indicators of Compromise (IOCs) to a collection. Args: id (required): The ID of the collection to update. relationship (required): The type of relationship to add. Can be "domains", "files", "ip_addresses", or "urls". iocs (required): List of IOCs to add to the collection. For "urls", these are the full URLs. For other types, they are the identifiers (hashes for files, domain names for domains, etc.). operation (required): The operation to perform. Can be "add" or "remove". Returns: A string indicating the success or failure of the operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_collection_feature_matchesB | Retrieves Indicators of Compromise (IOCs) from a collection that match a specific feature. This tool allows pivoting from a commonality to the specific IOCs within a collection that exhibit that feature. Commonalities are shared characteristics and hidden relationships between various Indicators of Compromise (e.g., files, URLs, domains, IPs). Available feature types by entity type: Files:
Domains:
IP Addresses:
URLs:
Args: collection_id (required): The ID of the collection to search within. feature_type (required): The type of feature to search for (e.g., 'attack_techniques'). feature_id (required): The specific value of the feature (e.g., 'T1497.001'). entity_type (required): search_space (required): The scope of the search. Use 'collection' to search only within the specified collection, or 'corpus' to search across the entire VirusTotal dataset. entity_type_plural (required): The plural of 'entity_type'. descriptors_only (optional): Returns only the descriptors. Returns: A dictionary containing the list of matching IOCs. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_collections_commonalitiesB | Retrieve the common characteristics or features (attributes / relationships) of the indicators of compromise (IoC) within a collection, identified by its ID. Args: collection_id (required): Collection identifier. Returns: Markdown-formatted string with the commonalities of the collection. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_collection_rulesA | Retrieve top N community rules and all curated hunting rules for a specific collection. Note:
The
Example:
Args: collection_id (required): The ID of the collection. top_n (optional): The number of top community rules to return from each category. Defaults to 4. rule_types (optional): List of rule types to fetch. Returns: A list of dictionaries, where each dictionary contains a rule and its metadata, or an error dictionary. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_file_reportB | Get a comprehensive file analysis report using its hash (MD5/SHA-1/SHA-256). Returns a concise summary of key threat details including detection stats, threat classification, and important indicators. Parameters: hash (required): The MD5, SHA-1, or SHA-256 hash of the file to analyze. Example: '8ab2cf...', 'e4d909c290d0...', etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_entities_related_to_a_fileA | Retrieve entities related to the the given file hash. The following table shows a summary of available relationships for file objects.
Args: hash (required): MD5/SHA1/SHA256) hash that identifies the file. relationship_name (required): Relationship name. descriptors_only (required): Bool. Must be True when the target object type is one of file, domain, url, ip_address or collection. limit: Limit the number of files to retrieve. 10 by default. Returns: List of objects related to the given file. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_file_behavior_reportA | Retrieve the file behaviour report of the given file behaviour identifier. You can get all the file behaviour of a given a file by calling The file behaviour ID is composed using the following pattern: "{file hash}_{sandbox name}". Args: file_behaviour_id (required): File behaviour ID. Returns: The file behaviour report. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_file_behavior_summaryB | Retrieve a summary of all the file behavior reports from all the sandboxes. Args: hash (required): MD5/SHA1/SHA256) hash that identifies the file. Returns: The file behavior summary. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| analyse_fileA | Upload and analyse the file in VirusTotal. The file will be uploaded to VirusTotal and shared with the community. Args: file_path (required): Path to the file for analysis. Use absolute path. Returns: The analysis report. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_digital_threat_monitoringA | Search for historical data in Digital Threat Monitoring (DTM) using Lucene syntax. Digital theat monitoring is a collection of documents from surface, deep, and dark web sources. To filter by document type or threat type, include the conditions within the Examples of filtering in the query:
Important Considerations for Effective Querying:
Tokenization:
Special Characters:
Case Sensitivity:
Domain Search Nuances:
Performance Limit:
Noise Reduction:
The following fields and their meanings can be used to compose a query using Lucene syntax (including combining them with AND, OR, and NOT operators along with parentheses):
__type: one of the following
label_threat: one of the following
Args: query (required): The Lucene-like query string for your document search. size (optional): The number of results to return in each page (0 to 25). Defaults to 10. since (optional): The timestamp to search for documents since (RFC3339 format). until (optional): The timestamp to search for documents from (RFC3339 format). page (optional): The page ID to fetch the page for. This is only used when paginating through pages greater than the first page of results. truncate (optional): The number of characters (as a string) to truncate all documents fields in the response (e.g., '500'). sanitize (optional): If true (default), any HTML content in the document fields are sanitized to remove links, scripts, etc. Returns: A dictionary containing the list of documents found and search metadata. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| search_iocsA | Search Indicators of Compromise (IOC) in the Google Threat Intelligence platform. You can search by for different IOC types using the
Note: The You can find all available modifers at:
With integer modifers, use the
Args query (required): Search query to find IOCs. limit: Limit the number of IoCs to retrieve. 10 by default. order_by: Order the results. "last_submission_date-" by default. Returns: List of Indicators of Compromise (IoCs). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_hunting_rulesetB | Get a Hunting Ruleset object from Google Threat Intelligence. A Hunting Ruleset object describes a user's hunting ruleset. It may contain multiple Yara rules. The content of the Yara rules is in the Some important object attributes:
Args: ruleset_id (required): Hunting ruleset identifier. Returns: Hunting Ruleset object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_entities_related_to_a_hunting_rulesetC | Retrieve entities related to the the given Hunting Ruleset. The following table shows a summary of available relationships for Hunting ruleset objects.
Args: ruleset_id (required): Hunting ruleset identifier. relationship_name (required): Relationship name. limit: Limit the number of entities to retrieve. 10 by default. Returns: List of objects related to the Hunting ruleset. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_domain_reportC | Get a comprehensive domain analysis report from Google Threat Intelligence. Args: domain (required): Domain to analyse. Returns: Report with insights about the domain. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_entities_related_to_a_domainA | Retrieve entities related to the the given domain. The following table shows a summary of available relationships for domain objects.
Args: domain (required): Domain to analyse. relationship_name (required): Relationship name. descriptors_only (required): Bool. Must be True when the target object type is one of file, domain, url, ip_address or collection. limit: Limit the number of entities to retrieve. 10 by default. Returns: List of entities related to the domain. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_ip_address_reportB | Get a comprehensive IP Address analysis report from Google Threat Intelligence. Args: ip_address (required): IP Address to analyze. It can be IPv4 or IPv6. Returns: Report with insights about the IP address. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_entities_related_to_an_ip_addressA | Retrieve entities related to the the given IP Address. The following table shows a summary of available relationships for IP Address objects.
Args: ip_address (required): IP Addres to analyse. relationship_name (required): Relationship name. descriptors_only (required): Bool. Must be True when the target object type is one of file, domain, url, ip_address or collection. limit: Limit the number of entities to retrieve. 10 by default. Returns: List of entities related to the IP Address. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| list_threat_profilesB | List your Threat Profiles at Google Threat Intelligence. Threat Profiles filter all of Google TI's threat intelligence so you can focus only on the threats that matter most to your organization. Threat Profiles let you apply top-level filters for Target Industries and Target Regions to immediately provide a more focused view of relevant threats. When searching for threats, we must use this tool first to check
if there is any Threat Profile that matches the user query
before peforming a general search using the Recommendations from Threat Profiles are more relevants to users than generic search threats. Use them as long as they match user's query. Returns: List of Threat Profiles. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_threat_profileC | Get Threat Profile object. A threat profile object contains the following attributes:
Args: profile_id (str): Threat Profile identifier at Google Threat Intelligence. Returns: Threat Profile object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_threat_profile_recommendationsA | Returns the list of objects associated to a given Threat Profile. Each of these objects has one of the following types:
We can distinguish between two other types of objects based on how they were associated with the Threat Profile:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_threat_profile_associations_timelineC | Retrieves the associations timeline for the given Threat Profile. Some important response attributes:
Returns: List of dictionaries containing timeline associations. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_url_reportB | Get a comprehensive URL analysis report from Google Threat Intelligence. Args: url (required): URL to analyse. Returns: Report with insights about the URL. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| get_entities_related_to_an_urlA | Retrieve entities related to the the given URL. The following table shows a summary of available relationships for URL objects.
Args: url (required): URL to analyse. relationship_name (required): Relationship name. descriptors_only (required): Bool. Must be True when the target object type is one of file, domain, url, ip_address or collection. limit: Limit the number of objects to retrieve. 10 by default. Returns: List of entities related to the URL. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 36 tools
Tools like search_threats, search_campaigns, search_threat_actors, search_malware_families, search_software_toolkits, search_threat_reports, and search_vulnerabilities overlap heavily; the latter six are essentially wrappers around the first with a collection_type filter. While descriptions clarify the differences, the generic search_threats can also do the same, which may lead to confusion about which to use for a specific request.
The naming pattern is mostly consistent: 'get_*_report', 'get_entities_related_to_*', 'search_*'. However, there are slight deviations like 'analyse_file' (British spelling) versus 'analyze' elsewhere, and 'create_collection' vs 'update_collection_attributes' but these are minor and the overall convention is clear.
With 36 tools, the server is on the heavier side, reflecting a broad threat intelligence API. The many search_* wrapper tools (7 variants) contribute bloat; they could be consolidated into a single search with a type parameter. The get_entities_related_* tools also repeat the same pattern for each entity type, adding to the count. While the scope is large, the number feels excessive and could be trimmed.
The tool surface covers major threat intelligence capabilities: searching and retrieving collections, entities, reports, timelines, MITRE attribution, collection management (CRUD), and IOC pivoting. However, there are gaps like no direct creation/update for IOCs beyond collections, and no functions for managing threat profiles (only retrieval). Overall, the domain is well covered, but some advanced operational features are missing.