Provides access to Google's Threat Intelligence suite, enabling searches for threat actors, campaigns, malware families, and vulnerability reports, as well as retrieval of threat profiles and hunting rulesets.
Leverages the VirusTotal API to provide comprehensive file analysis, sandbox behavior reports, and reputation checking for domains, IP addresses, and URLs.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Threat Intelligence MCP ServerSearch for recent threat intelligence on the actor group APT28"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Threat Intelligence MCP Server (Standalone)
This is a standalone MCP (Model Context Protocol) server for interacting with Google's Threat Intelligence suite. It provides AI assistants like Claude with access to comprehensive threat intelligence capabilities through both local development and production cloud deployment modes.
Key Capabilities:
π Threat intelligence search (campaigns, threat actors, malware families)
π File analysis and behavior reports
π Domain, IP, and URL reputation checking
π― IOC (Indicator of Compromise) search
π Threat profiles and hunting rulesets
Architecture
Understanding how GTI MCP Server works in different deployment modes:
Component Overview
Local Deployment Flow
For individual developers running the MCP server locally:
API Key Management: Server reads VT_APIKEY from environment variables at startup.
Cloud Deployment Flow
For teams deploying a centralized service:
API Key Management: Clients pass api_key parameter with each tool call. Server authenticates connection via MCP_AUTH_TOKEN but uses client-provided API keys for VirusTotal requests.
Security Note: This architecture allows teams to deploy a shared MCP server while maintaining individual user API quotas and access controls.
Features
Collections (Threats)
get_collection_report(id): Retrieves a specific collection report by its ID (e.g.,report--<hash>,threat-actor--<hash>).get_entities_related_to_a_collection(id, relationship_name, limit=10): Gets related entities (domains, files, IPs, URLs, other collections) for a given collection ID.search_threats(query, limit=5, order_by="relevance-"): Performs a general search for threats (collections) using GTI query syntax.search_campaigns(query, limit=10, order_by="relevance-"): Searches specifically for collections of typecampaign.search_threat_actors(query, limit=10, order_by="relevance-"): Searches specifically for collections of typethreat-actor.search_malware_families(query, limit=10, order_by="relevance-"): Searches specifically for collections of typemalware-family.search_software_toolkits(query, limit=10, order_by="relevance-"): Searches specifically for collections of typesoftware-toolkit.search_threat_reports(query, limit=10, order_by="relevance-"): Searches specifically for collections of typereport.search_vulnerabilities(query, limit=10, order_by="relevance-"): Searches specifically for collections of typevulnerability.get_collection_timeline_events(id): Retrieves curated timeline events for a collection.
Files
get_file_report(hash): Retrieves a comprehensive analysis report for a file based on its MD5, SHA1, or SHA256 hash.get_entities_related_to_a_file(hash, relationship_name, limit=10): Gets related entities (domains, IPs, URLs, behaviours, etc.) for a given file hash.get_file_behavior_report(file_behaviour_id): Retrieves a specific sandbox behavior report for a file.get_file_behavior_summary(hash): Retrieves a summary of all sandbox behavior reports for a file hash.
Intelligence Search
search_iocs(query, limit=10, order_by="last_submission_date-"): Searches for Indicators of Compromise (files, URLs, domains, IPs) using advanced GTI query syntax.
Network Locations (Domains & IPs)
get_domain_report(domain): Retrieves a comprehensive analysis report for a domain.get_entities_related_to_a_domain(domain, relationship_name, limit=10): Gets related entities for a given domain.get_ip_address_report(ip_address): Retrieves a comprehensive analysis report for an IPv4 or IPv6 address.get_entities_related_to_an_ip_address(ip_address, relationship_name, limit=10): Gets related entities for a given IP address.
URLs
get_url_report(url): Retrieves a comprehensive analysis report for a URL.get_entities_related_to_an_url(url, relationship_name, limit=10): Gets related entities for a given URL.
Hunting
get_hunting_ruleset: Get a Hunting Ruleset object from Google Threat Intelligence.get_entities_related_to_a_hunting_ruleset: Retrieve entities related to the given Hunting Ruleset.
Threat Profiles
list_threat_profiles: List your Threat Profiles at Google Threat Intelligence.get_threat_profile(profile_id): Get Threat Profile object.get_threat_profile_recommendations(profile_id, limit=10): Returns the list of objects associated to the given Threat Profile.get_threat_profile_associations_timeline(profile_id): Retrieves the associations timeline for the given Threat Profile.
Quick Start (Local Development)
For developers who want to use GTI MCP Server with Claude Desktop, Cline, Cursor, or other MCP clients.
Prerequisites
Python 3.11 or higher
uv package manager
VirusTotal API key (get one free)
Installation
API Key Setup
Set up the VT_APIKEY environment variable:
macOS/Linux:
Windows PowerShell:
Permanent setup (recommended):
Add the export command to your shell profile (~/.bashrc, ~/.zshrc, or ~/.bash_profile):
MCP Client Configuration
Claude Desktop
Edit ~/.claude/claude_desktop_config.json:
Note for macOS users: If you installed uv using the standalone installer, use the full path to the uv binary (e.g., /Users/yourusername/.local/bin/uv) instead of just uv.
Cline
Edit .cline/mcp.json or use the settings UI:
Cursor
Edit .cursor/mcp.json:
Verification
Restart your MCP client (Claude Desktop, Cline, or Cursor)
Check that the GTI server appears in the MCP tools list
Try a simple query: "Check the reputation of google.com using GTI"
If everything is working, you should see results from Google Threat Intelligence!
Production Deployment (Cloud Run)
For teams who want to deploy a centralized GTI MCP service that multiple users or frontend applications can access via SSE (Server-Sent Events).
Why Cloud Deployment?
Centralized service: One deployment serves multiple users/applications
No local setup: Users connect via HTTP/SSE without installing Python or dependencies
Team sharing: Security teams can provide threat intelligence to multiple frontend apps
Scalability: Cloud Run automatically scales based on demand
Prerequisites
Google Cloud Platform account with billing enabled
gcloud CLI installed and configured
Project with Cloud Run API enabled
Deployment Steps
1. Clone the Repository
2. Configure Deployment Script
Edit gti-remotemcp-deploy.sh and update the configuration section:
3. Run Deployment
The script will:
Build the container using Google Cloud Buildpacks
Deploy to Cloud Run
Output the service URL and authentication token
4. Save Deployment Information
The script outputs:
Service URL:
https://gti-remotemcp-server-xyz.a.run.appSSE Endpoint:
https://gti-remotemcp-server-xyz.a.run.app/sseAuth Token: A randomly generated token for authentication
Important: Save the auth token securely! You'll need it to connect clients.
Architecture Details
Transport: SSE (Server-Sent Events) over HTTP
Authentication:
Server access:
X-Mcp-Authorizationheader withMCP_AUTH_TOKENAPI calls:
api_keyparameter passed with each tool invocation
API Key Strategy:
Server does NOT store VirusTotal API keys
Each tool call must include
api_keyparameterAllows per-user API quotas and access control
Client applications manage API key distribution
Security Considerations
Protect the auth token: Store
MCP_AUTH_TOKENsecurely (environment variables, secrets manager)HTTPS only: Cloud Run enforces HTTPS by default
API key handling: Client applications should never expose VT API keys in frontend code
Access control: Consider adding additional authentication layers for production use
Rate limiting: VirusTotal enforces rate limits per API key
Frontend Integration
For developers building custom frontend applications that connect to the deployed Cloud Run service.
Connection Overview
Protocol: SSE (Server-Sent Events) for events, HTTP POST for JSON-RPC messages
Transport:
@modelcontextprotocol/sdk/client/sseAuthentication: Bearer-style token in
X-Mcp-AuthorizationheaderAPI Keys: Pass
api_keyparameter with each tool call
Configuration Parameters
Service URL: Your Cloud Run service URL +
/sseExample:
https://gti-remotemcp-server-xyz.a.run.app/sse
Auth Token: The
MCP_AUTH_TOKENfrom deployment outputVT API Key: VirusTotal API key (managed client-side, passed per tool call)
React/TypeScript Example
Complete implementation using the MCP SDK:
Important: API Key Handling
Every tool call MUST include the
Why? The Cloud Run deployment does not store API keys. This allows:
Per-user API quotas
Individual access control
Secure key management on client side
Security Best Practices:
Never hardcode API keys in frontend code
Use environment variables or secure configuration
Consider backend proxy for additional security
Implement proper key rotation policies
CORS Considerations
The server allows cross-origin requests by passing OPTIONS requests through authentication middleware. If you encounter CORS issues:
Verify your request includes the
X-Mcp-AuthorizationheaderCheck browser console for specific CORS errors
Ensure you're using HTTPS for the Cloud Run URL
Consider adding Starlette's
CORSMiddlewareif strict CORS enforcement is needed
Troubleshooting
Connection fails:
Verify service URL is correct (must end with
/sse)Check
MCP_AUTH_TOKENmatches deployment outputEnsure Cloud Run service is running (
gcloud run services list)
Tool calls fail:
Verify
api_keyparameter is included in argumentsCheck VirusTotal API key is valid
Review rate limits on your VirusTotal account
Authentication errors:
Confirm
X-Mcp-Authorizationheader is set correctlyCheck token hasn't been regenerated during redeployment
Development
Project Structure
Running Tests
Contributing
To modify or extend this server:
Fork and clone the repository
Create a feature branch:
git checkout -b feature/your-featureMake changes in
gti_mcp/tools/following existing patternsAdd tests in
tests/for new functionalityRun tests to verify:
pytestUpdate README if adding new features or changing APIs
Commit changes: Use clear, descriptive commit messages
Push and create PR to the original repository
Adding New Tools
Example pattern for adding a new tool:
License & Attribution
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Original Source
This is a standalone extraction of the Google Threat Intelligence MCP server from the official mcp-security repository.
Original Authors: Google SecOps Team Original Repository: https://github.com/google/mcp-security Original License: Apache 2.0
This standalone version is maintained independently but retains all original licensing and attribution.
Third-Party Libraries
mcp - Model Context Protocol SDK (MIT License)
vt-py - VirusTotal Python SDK (Apache 2.0)
Starlette - ASGI framework (BSD License)
uvicorn - ASGI server (BSD License)
Support
Getting Help
Documentation: This README and MCP Protocol Docs
Issues: Report issues at the original mcp-security repository
VirusTotal API: Official API documentation
Frequently Asked Questions
Q: Do I need a paid VirusTotal account? A: No, a free VirusTotal account works. Note that free accounts have lower rate limits.
Q: Can I use this with OpenAI or other LLM providers? A: Yes! This is an MCP server. Any MCP-compatible client can use it, not just Claude.
Q: Is my API key secure in cloud deployment? A: The server never stores API keys. Clients pass them per-call, allowing you to implement your own key management strategy.
Q: Can I deploy to platforms other than Cloud Run? A: Yes! The included Dockerfile works with any container platform (AWS ECS, Azure Container Instances, etc.). Cloud Run is just the default.
Q: What's the difference between this and the original mcp-security repo? A: This is a standalone extraction of just the GTI component, making it easier to deploy independently. The original repo contains multiple security tools.
Built with β€οΈ using