ThreatWatch MCP
# ๐ก๏ธ ThreatWatch MCP
**AI-Powered Threat Intelligence with Real-Time Alert Monitoring**
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that brings multi-source
threat intelligence directly into Claude Desktop and any MCP-compatible AI assistant.
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/Apache-2.0)
[](https://modelcontextprotocol.io)
---
## โจ What Makes ThreatWatch Different
| Feature | ThreatWatch | fastmcp-threatintel |
|---------|-------------|----------------------|
| Real-time watch-list & alerts | โ
| โ |
| Persistent alert history | โ
| โ |
| Shodan InternetDB (free, no key needed) | โ
| โ |
| Status-change detection | โ
| โ |
| IOC extraction from freeform text | โ
| โ |
| Works with zero API keys | โ
| โ |
---
## ๐ Available MCP Tools
| Tool | Description |
|------|-------------|
| `analyze_ioc` | Analyse a single IP / domain / URL / hash |
| `bulk_analyze` | Analyse up to 50 IOCs concurrently |
| `detect_iocs_in_text` | Extract IOCs from log files, reports, pastes |
| `add_watch` | Add an IOC to the real-time watch-list |
| `remove_watch` | Remove an IOC from the watch-list |
| `list_watches` | Show all monitored IOCs and their status |
| `get_alerts` | Retrieve alerts from monitored IOCs |
| `run_monitor_cycle` | Manually trigger a re-scan of all watches |
| `server_status` | Show configured sources and monitor state |
---
## ๐ Installation
### Prerequisites
- Python 3.11 or higher
- [Claude Desktop](https://claude.ai/download)
- API keys (see below โ all free tier)
### Step 1 โ Clone the repo
```bash
git clone https://github.com/YOUR_USERNAME/threatwatch-mcp.git
cd threatwatch-mcp
```
### Step 2 โ Install
```bash
pip3 install fastmcp httpx python-dotenv
pip3 install -e .
```
### Step 3 โ Verify installation
```bash
which threatwatch
```
You should see a path like `/usr/local/bin/threatwatch` or
`/Library/Frameworks/Python.framework/Versions/3.x/bin/threatwatch`.
Copy this path โ you'll need it in Step 5.
---
## ๐ API Keys (All Free)
| Source | Required | Free Limit | Sign Up |
|--------|----------|------------|---------|
| VirusTotal | Recommended | 1,000 req/day | [virustotal.com](https://www.virustotal.com/gui/join-us) |
| AlienVault OTX | Recommended | Unlimited | [otx.alienvault.com](https://otx.alienvault.com) |
| AbuseIPDB | Optional | 1,000 req/day | [abuseipdb.com](https://www.abuseipdb.com/register) |
| IPinfo | Optional | 50,000 req/month | [ipinfo.io](https://ipinfo.io/signup) |
| **Shodan InternetDB** | **None needed** | **Always free** | Built-in |
> ThreatWatch works with **zero API keys** โ Shodan InternetDB is always available
> and returns open ports, CVEs, and hostnames for any IP for free.
---
## โ๏ธ Connect to Claude Desktop
### Step 4 โ Open the Claude Desktop config
**macOS:**
```bash
open -e ~/Library/Application\ Support/Claude/claude_desktop_config.json
```
**Windows:**
```
%APPDATA%\Claude\claude_desktop_config.json
```
### Step 5 โ Add ThreatWatch
Add the `threatwatch` entry to your `mcpServers` block.
Replace the command path with the output of `which threatwatch` from Step 3,
and fill in your API keys:
```json
{
"mcpServers": {
"threatwatch": {
"command": "/Library/Frameworks/Python.framework/Versions/3.13/bin/threatwatch",
"env": {
"VIRUSTOTAL_API_KEY": "your_virustotal_key_here",
"OTX_API_KEY": "your_otx_key_here",
"ABUSEIPDB_API_KEY": "your_abuseipdb_key_here",
"IPINFO_API_KEY": "your_ipinfo_key_here"
}
}
}
}
```
> If you already have other MCP servers configured, just add the `threatwatch`
> block inside your existing `mcpServers` object โ don't replace the whole file.
### Step 6 โ Restart Claude Desktop
Fully quit Claude Desktop (`Cmd + Q` on Mac, system tray โ Exit on Windows)
and reopen it.
### Step 7 โ Verify
Click the **"+"** button at the bottom of the Claude chat โ **Connectors**.
You should see ThreatWatch listed with all 9 tools.
Then test it:
```
Run server_status
```
---
## ๐ฌ Example Prompts
```
Analyse IP 185.220.101.1 for threats
Check if domain update-adobe-flash.ru is malicious
Is this hash dangerous: d41d8cd98f00b204e9800998ecf8427e
Extract all IOCs from this log and analyse them:
[paste your firewall log, SIEM alert, or email header]
Add a watch on 185.220.101.1 and alert me if it becomes malicious
Get all alerts from the last hour
Run a full monitor cycle now
```
---
## ๐ How Real-Time Monitoring Works
```
add_watch("185.220.101.1", alert_on=["malicious", "suspicious"])
โ
โผ
Watch-list saved to ~/.threatwatch/watchlist.json
โ
โผ
run_monitor_cycle() โ trigger manually or on a schedule
โ
โผ
Re-queries all sources for each watched IOC
โ
โผ
Status changed or threshold crossed?
โ
Yes โ No
โผ โผ
Alert (no-op)
โ
โผ
get_alerts(since_minutes=60)
```
---
## ๐๏ธ Project Structure
```
threatwatch-mcp/
โโโ src/
โ โโโ threatwatch/
โ โโโ __init__.py โ package definition
โ โโโ server.py โ FastMCP server + all 9 MCP tools
โ โโโ config.py โ settings from environment variables
โ โโโ ioc_detector.py โ IOC type detection (IP/domain/URL/hash)
โ โโโ intel_sources.py โ API adapters (VT, OTX, AbuseIPDB, IPinfo, Shodan)
โ โโโ alert_monitor.py โ real-time watch-list + alert engine
โ โโโ reporter.py โ Markdown report builder
โโโ tests/
โ โโโ test_core.py โ unit tests
โโโ pyproject.toml โ package config + dependencies
โโโ .env.example โ environment variable template
โโโ README.md
```
---
## ๐ Security Notes
- **Never commit your `.env` file** โ it is in `.gitignore` by default
- **Restrict config file permissions** on your machine:
```bash
chmod 600 ~/Library/Application\ Support/Claude/claude_desktop_config.json
```
- All API keys used are **read-only** โ they can query data but cannot modify anything
- If a key is ever leaked, regenerate it instantly from each service's dashboard
---
## ๐งช Running Tests
```bash
pip3 install pytest pytest-asyncio
pytest tests/ -v
```
---
## ๐ License
Apache 2.0 โ see [LICENSE](LICENSE) for details.
---
## ๐ Acknowledgments
- [FastMCP](https://github.com/jlowin/fastmcp) โ the MCP framework that powers ThreatWatch
- [fastmcp-threatintel](https://github.com/4R9UN/fastmcp-threatintel) โ original inspiration
- [VirusTotal](https://www.virustotal.com), [AlienVault OTX](https://otx.alienvault.com),
[AbuseIPDB](https://www.abuseipdb.com), [IPinfo](https://ipinfo.io),
[Shodan](https://www.shodan.io) โ threat intelligence sources
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose: status, single analysis, bulk analysis, watch management, alert retrieval, manual monitor, and text extraction. No overlap between tools; an agent can easily select the right one based on the action and resource.
All tool names follow a consistent verb_noun pattern (e.g., analyze_ioc, add_watch, get_alerts) or noun_status pattern (server_status), with clear and predictable naming throughout.
With 9 tools, the set is well-scoped for a threat intelligence watch server, covering analysis, watch-list management, monitoring, and alerting without redundancy.
The tool surface provides complete lifecycle coverage: analyze IOCs (single/bulk), manage watch-list (add/remove/list), monitor (manual/automatic), retrieve alerts, and extract IOCs. No obvious gaps for the stated purpose.