AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

Threat Research Mcp

mcp-harshthakur6293-threat-research-mcp · by harshthakur6293

Open-source MCP server for defensive security: intel ingestion → research → hunting → detection drafts

No reviews yet
0 installs
19 views
0.0% view→install

Install

$ agentstack add mcp-harshthakur6293-threat-research-mcp

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-harshthakur6293-threat-research-mcp)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
4mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Threat Research Mcp? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

🔍 Threat Research MCP

Paste a threat report. Get a triage package in seconds.

IOC extraction · ATT&CK mapping · Hunt queries · Sigma rules · MITRE STIX enrichment Works with Claude Desktop · Cline · Cursor · Copilot · any MCP-compatible client

[](https://github.com/harshthakur6293/threat-research-mcp/actions/workflows/ci.yml) [](https://github.com/harshthakur6293/threat-research-mcp/actions/workflows/codeql.yml) [](https://github.com/harshthakur6293/threat-research-mcp/actions/workflows/security.yml) [](https://www.python.org/downloads/) [](LICENSE) [](https://modelcontextprotocol.io) [-ef4444)](#-at-a-glance)

[At a glance](#-at-a-glance) · [Quick Start](#-quick-start) · [Live Example](#-live-example) · [Coverage Matrix](#-coverage-matrix) · [How It Works](#-how-it-works) · [Tool Catalog](#-tool-catalog) · [Limitations](#-limitations) · [Contributing](#-contributing)


🎯 At a glance

What it does What it doesn't do

  • A workflow orchestrator that takes free-form threat report text and emits a structured triage package: IOCs, ATT&CK technique guesses, hunt queries, and a navigator layer.
  • A deterministic, offline-first MCP server — no LLM calls inside the toolbox, no hallucinated technique IDs, runs air-gapped.
  • A 284-keyword ATT&CK index loaded from one YAML file ([keywords.yaml](src/threatresearchmcp/playbook/keywords.yaml)) that contributors can edit without touching Python.
  • A hunt playbook with 37 techniques of hand-written SPL / KQL / Elastic / SQL queries embedded per log source.
  • A self-contained HTML report with a D3 force graph, IOC table, and hunt cards — the strongest deliverable in the box.
  • An honest scaffold for SOC teams to fork, extend with their own curated rules, and pipe into Claude Desktop / Cursor / Cline.
  • Not a replacement for SigmaHQ or Elastic detection-rules. Only 3 full hand-written Sigma rules ship in the box. Everything else returns no_curated_rule + community search links.
  • Not "production-ready" out of the box. Outputs are analyst drafts. Review, tune, and test against your environment before deploying.
  • Not authoritative ATT&CK. Mapping is keyword-based; semantic gaps exist. Pair with mitre-attack-mcp or use the optional STIX enrichment for authoritative technique data.
  • Not a TIP. Campaign tracking is JSON files on disk — fine for one analyst, not for a shared SOC platform.
  • Not a SIEM connector. It produces queries; you copy/paste or deploy them via your own pipeline. No deploy_to_siem tool exists yet.
  • Not a threat-intel feed. It analyzes intel that you paste or ingest — it doesn't subscribe to feeds for you.

📊 Component status

| Component | Status | Notes | |---|:---:|---| | Project hygiene | 🟢 Strong | 129 tests, 65% coverage gate, ruff/bandit/pip-audit clean, pinned deps | | MCP wiring | 🟢 Strong | 49 tools registered via FastMCP, stdio transport idiomatic | | HTML report | 🟢 Strong | Self-contained, D3 force graph + heatmap + IOC table — the marquee output | | IOC extraction | 🟡 Decent | Context-aware confidence + FP filtering; known edge cases on multi-dot TLDs | | ATT&CK keyword mapping | 🟡 Decent | 284 keywords, 119 techniques covered; semantic gaps remain | | Hunt query coverage | 🟡 Decent | 37 techniques × multi-SIEM in the hunt playbook | | Curated Sigma rules | 🟠 Thin | Only 3 hand-written rules. Everything else returns no_curated_rule + community links | | Confidence calibration | 🟠 Thin | Heuristic; tends to label LOW on noisy reports. Tunable in confidence_weights.yaml | | SOC operational integration | 🔴 Absent | No environment profile, no deploy_to_siem, no deployment registry | | Eval harness | 🔴 Absent | evals/run_test.py exists but no curated public-report eval set | | PyPI distribution | 🟠 In progress | Publish workflow merged; first pip install threat-research-mcp pending PyPI account setup |


⚡ Quick Start

# 1. Clone and install
git clone https://github.com/harshthakur6293/threat-research-mcp
cd threat-research-mcp
pip install -e ".[dev]"

# 2. Verify — 129 tests should pass (5 skipped: optional deps)
python -m pytest -q

# 3. Start the MCP server (your client connects via stdio)
python -m threat_research_mcp

> PyPI / uvx distribution coming. Publish workflow is merged; first release pending PyPI Trusted Publisher setup. Local install is the supported path today.

Claude Desktop — claudedesktopconfig.json

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "threat-research-mcp": {
      "command": "python",
      "args": ["-m", "threat_research_mcp"],
      "cwd": "/path/to/threat-research-mcp"
    }
  }
}

VS Code / Cline / Roo Code — .vscode/settings.json

{
  "cline.mcpServers": {
    "threat-research-mcp": {
      "command": "python",
      "args": ["-m", "threat_research_mcp"],
      "cwd": "${workspaceFolder}/../threat-research-mcp"
    }
  }
}

Cursor — ~/.cursor/mcp.json

{
  "mcpServers": {
    "threat-research-mcp": {
      "command": "python",
      "args": ["-m", "threat_research_mcp"],
      "cwd": "/path/to/threat-research-mcp"
    }
  }
}

🎬 Live Example

Real run against the Google Mandiant UNC6692 Snow Flurries report (Teams phishing → browser extension backdoor → credential theft):

Input — paste into Claude:

Source: https://cloud.google.com/blog/topics/threat-intelligence/unc6692
UNC6692 Microsoft Teams phishing impersonating IT helpdesk. AutoHotkey
scripts from S3. SNOWBELT browser extension C2 over WebSocket AES-GCM.
SNOWGLAZE Python tunneler wss://sad4w7h913-b4a57f9c36eb.herokuapp.com:443/ws
SHA256 7f1d71e1e079f3244a69205588d504ed830d4c473747bb1b5c520634cc5a2477
lsass credential dump pass-the-hash lateral movement. Black Basta ransomware.

Pipeline output:

Source quality auto-detected: vendor_blog (0.75)
IOCs extracted: 4  (1 domain · 3 SHA256 hashes)

ATT&CK Techniques: 14 above threshold
  T1566.004  [MEDIUM 0.59]  Spearphishing via Service
               evidence: teams phishing, teams lure, impersonating it
  T1071      [MEDIUM 0.56]  Application Layer Protocol
               evidence: c2, command and control
  T1003.001  [LOW    0.54]  LSASS Memory
               evidence: lsass, credential dump
  T1550.002  [LOW    0.43]  Pass the Hash
  T1486      [LOW    0.47]  Data Encrypted for Impact
  ... 9 more

Sigma rules generated: 14  (1 curated · 13 with SigmaHQ/Elastic links)
Hunt hypotheses: 8

What you get back:

  • IOC table with confidence scores and MALICIOUS / UNKNOWN / VICTIM labels
  • ATT&CK technique cards with keyword evidence and links to attack.mitre.org
  • Hunt queries (SPL · KQL · EQL · SQL) per technique × log source
  • Curated Sigma YAML for the 3 supported techniques; community search links for the rest
  • ATT&CK Navigator JSON — drag into attack.mitre.org/navigator
  • Self-contained HTML report with D3 force graph, heatmap, and hunt cards

> ℹ️ The confidence model is intentionally conservative — even high-quality vendor_blog sources often land in LOW / MEDIUM. Thresholds and weights are tunable in [playbook/confidence_weights.yaml](src/threatresearchmcp/playbook/confidence_weights.yaml). See [Limitations](#-limitations) for details.


🧭 Coverage Matrix

Legend:  ✅ hand-written / curated  ·  🟡 playbook query (hand-written, embedded in hunt playbook)  ·  🔗 community link only (no_curated_rule)  ·  ❌ not covered

| Technique | Keyword index | Hunt hypothesis | Full Sigma | KQL | SPL | EQL | SQL | YARA | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | T1059.001 PowerShell | ✅ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1003.001 LSASS Memory | ✅ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1071.001 C2 over Web Protocols | ✅ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1053.005 Scheduled Task | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1547.001 Registry Run Key | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1505.003 Web Shell | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1566.001 Spearphishing Attachment | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1021.001 / .002 RDP / SMB | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1078 Valid Accounts | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1110.003 Password Spraying | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1486 Ransomware Encryption | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1558.003 Kerberoasting | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1190 Exploit Public-Facing App | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1055 Process Injection | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1027 Obfuscated Files | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ✅ | | T1543.003 Windows Service | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1041 / T1567.002 Exfiltration | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1046 Network Port Scanning | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1539 Steal Web Cookies | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1204.002 Malicious File | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1560.001 Archive (rar/7z) | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1059.002 AppleScript | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1543.001 Launch Agent (macOS) | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1548.006 TCC Manipulation (macOS) | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1555.003 Browser Credentials | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1195.001 / .002 Supply Chain | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1530 Cloud Storage Access | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1552.005 IMDS Credentials | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1078.004 Cloud Valid Accounts | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | T1609 / T1610 / T1613 Containers | ✅ | ✅ | 🔗 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | | Other 80+ techniques in keyword index | ✅ | ❌ | 🔗 | 🔗 | 🔗 | 🔗 | 🔗 | ❌ |

Bottom line:

  • 3 full hand-written Sigma rules (T1059.001, T1003.001, T1071.001)
  • 37 techniques with embedded SPL/KQL/Elastic/SQL queries in the hunt playbook
  • 119 unique techniques in the keyword index (mapping only, no hand-written queries)
  • All other techniques fall through to no_curated_rule with community search links

This matrix is manually maintained. If it drifts from reality, please open an issue.


🔬 How It Works

The pipeline

run_pipeline_tool chains all stages automatically from a single text input:

flowchart TD
    A["📄 Raw Intel Textreport · blog · IR note · paste"] --> B
    B["🔎 extract_iocsIPv4 · domains · hashes · emailsconfidence-scored · context-labelledRFC1918 / benign CDN auto-filtered"]
    B --> C["🗺️ map_ttp284-keyword ATT&CK indexevidence-based confidence scoresource quality auto-detectedIOC corroboration bonus"]
    C --> D["🎯 hunt_for_techniquesSPL · KQL · EQL · SQL queriesper technique × log source"]
    C --> E["📋 sigma_bundle3 curated rulescommunity links for the restno fake rules generated"]
    C --> F["🗃️ navigator_layerATT&CK Navigator JSONdrag into attack.mitre.org"]
    C --> G["📊 generate_threat_reportself-contained HTMLD3 force graph · heatmaphunt cards · Sigma cards"]

Each stage is also callable individually.

Confidence scoring

Every detected technique gets a score built from four dimensions:

| Dimension | Weight | What it measures | |---|:---:|---| | keywordspecificity | 35% | How diagnostic the keyword is (mimikatz=0.95 vs. script=0.30) | | evidencediversity | 25% | How many independent signals fired (1 keyword=0.30 → 5+ keywords=0.95) | | ioccorroboration | 20% | Whether extracted IOCs align with the technique (network IOC + C2 technique = +0.30 bonus) | | sourcequality | 20% | Authority of the intelligence source (cisa_advisory=1.0 · vendor_blog=0.75) |

| Label | Score | What to do | |:---:|:---:|---| | 🟢 HIGH | ≥ 0.75 | Multiple specific signals — treat as confirmed, deploy detection | | 🟡 MEDIUM | 0.55 – 0.75 | Credible — worth hunting, validate in your environment | | 🟠 LOW | 0.35 – 0.55 | Weak signal — analyst review before acting | | ⚫ SUPPRESSED | ⚠️ Calibration is conservative. On many real-world vendor reports, most techniques will land in LOW / MEDIUM. Tune thresholds and dimension weights in [playbook/confidence_weights.yaml](src/threatresearchmcp/playbook/confidence_weights.yaml) for your environment.

Source quality is auto-detected from URLs in the pasted text — CISA, Microsoft, Google/Mandiant, NCSC, and ISAC domains are all recognized automatically.


✨ STIX Enrichment (optional)

After run_pipeline_tool maps technique IDs, pass them to enrich_techniques_stix to pull authoritative detail directly from the official MITRE CTI STIX bundle:

T1059.001 — PowerShell
platforms:      Windows
data_sources:   Process: Process Creation
                Script: Script Execution
                Command: Command Execution
detection:      MITRE official guidance string
threat_groups:  APT32, Lazarus Group, Kimsuky, OilRig (+more)

One-time setup:

pip install "threat-research-mcp[attack]"      # installs mitreattack-python
python scripts/download_attack_stix.py          # downloads enterprise-attack.json (~50 MB)

Run stix_status to check if enrichment is active. The core pipeline works without this — STIX enrichment degrades gracefully.


📖 What Each Stage Produces

IOC Extraction — extract_iocs

Context-aware extraction with a confidence score and label per indicator. Automatically filters RFC1918 / loopback IPs, version strings, macOS bundle IDs (com.apple.*), and known-benign CDN domains.

{
  "ips":     [{"value": "185.220.101.47",     "confidence": 0.92, "label": "MALICIOUS"}],
  "domains": [{"value": "cdn.apple-cdn.org",  "confidence": 0.85, "label": "MALICIOUS"}],
  "hashes":  [{"value": "a3f8c2d1...",        "confidence": 0.78, "label": "HASH"}],
  "emails":  [{"value": "hr@careers-talent.io","confidence": 0.71, "label": "MALICIOUS"}],
  "filtered_fps": [{"value": "192.168.1.1",   "reason": "RFC1918"}]
}

Context patterns live in [playbook/ioc_context_patterns.yaml](src/threatresearchmcp/playbook/ioccontextpatterns.yaml) — editable without code changes.

Known edge case: multi-dot TLDs (*.trycloudflare.com, *.net.br) and sketchy newer TLDs (.site, .sh) may be over-rejected. Tracked in [Limitations](#-limitations).

ATT&CK Mapping — map_ttp

Maps text to techniques using a 284-keyword index loaded from [playbook/keywords.yaml](src/threatresearchmcp/playbook/keywords.yaml) — the single source of truth for all keyword→technique mappings. No hardcoded data in Python.

{
  "techniques": [
    {
      "id": "T1059.002",
      "name": "AppleScript",
      "tactic": "execution",
      "evidence": ["osascript", "applescript"],
      "confidence": 0.82,
      "confidence_label": "HIGH",
      "url": "https://attack.mitre.org/techniques/T1059/002/"
    }
  ],
  "suppressed": [...],
  "source_quality": "vendor_blog"
}

To add a keyword: edit [playbook/keywords.yaml](src/threatresearchmcp/playbook/keywords.yaml) and restart the server — no Python changes needed.

Hunt Hypotheses — huntfortechniques

Returns one hypothesis per technique × log source with a ready-to-run query in four SIEM flavours:

{
  "hypothesis": "Attacker invoked osascript to execute in-memory payload",
  "technique_id": "T1059.002",
  "log_source_key": "edr_macos",
  "queries": {
    "spl":     "index=edr source=macos process_name=osascript ...",
    "kql":     "DeviceProcessEvents | where FileName =~ 'osascript' ...",
    "elastic": "pr

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [harshthakur6293](https://github.com/harshthakur6293)
- **Source:** [harshthakur6293/threat-research-mcp](https://github.com/harshthakur6293/threat-research-mcp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.