search_iocs
Search IOCs by keyword.
Params
- query: string
- type?: string
- limit?: number
Use the ThreatNoir MCP server for AI tools, or call the IOC REST API directly.
Use npx or add to your MCP config.
# Using npx (recommended)
npx threatnoir-mcp-iocs
# Or add to your .mcp.json{
"mcpServers": {
"threatnoir-iocs": {
"command": "npx",
"args": ["threatnoir-mcp-iocs"],
"env": { "THREATNOIR_API_KEY": "your-key-here" }
}
}
}Set THREATNOIR_API_KEY to your generated key.
Search IOCs by keyword.
List recent IOCs.
Exact match lookup.
Use these values for type filters.
| Type | Example |
|---|---|
| ip | 8.8.8.8 |
| domain | example.com |
| hash_md5 | d41d8cd98f00b204e9800998ecf8427e |
| hash_sha1 | da39a3ee5e6b4b0d3255bfef95601890afd80709 |
| hash_sha256 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
| url | https://example.com/path |
| cve | CVE-2024-12345 |
| mitre_attack | T1059 |
| analyst@example.com | |
| malware | Emotet |
Use Authorization: Bearer tn_live_your_key for authenticated endpoints.
GET https://threatnoir.com/api/v1/iocs?type=cve&limit=10
GET https://threatnoir.com/api/v1/iocs?q=192.168&type=ip
Authorization: Bearer tn_live_your_keyCopy‑paste examples for all endpoints. Full schema available in the OpenAPI spec.
| Tier | Search | List | Limit |
|---|---|---|---|
| Free (no key) | 10/hour, 10 results | 30/min, 50 results | — |
| API Key | 100/min, 50 results | 100/min, 50 results | 5 keys max |
import requests
r = requests.get("https://threatnoir.com/api/v1/iocs", params={"q": "log4j", "type": "cve"})
for ioc in r.json()["items"]:
print(f'{ioc["type"]}: {ioc["value"]} — {ioc["article"]["title"]}')Add an Authorization header to use your API key.
headers = {"Authorization": "Bearer tn_live_your_key_here"}
r = requests.get("https://threatnoir.com/api/v1/iocs", params={"q": "192.168"}, headers=headers)r = requests.get("https://threatnoir.com/api/v1/articles", params={"q": "ransomware", "limit": 5})r = requests.get("https://threatnoir.com/api/v1/weekly", params={"limit": 3})r = requests.get("https://threatnoir.com/api/v1/focus", params={"severity": "critical"})r = requests.get("https://threatnoir.com/api/v1/awareness", params={"q": "phishing"})Requires a valid API key in the Authorization header.
headers = {"Authorization": "Bearer tn_live_your_key_here"}
r = requests.post("https://threatnoir.com/api/v1/submit",
headers=headers,
json={"url": "https://example.com/security-article", "source_name": "My Feed"})