TalonHoundBLOCK
Self-hosted threat intelligence and IOC management platform
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Self-hosted threat intelligence and IOC management platform.
TalonHound ingests, deduplicates, enriches, and republishes indicators of compromise (IOCs) from community and custom feeds, and lets analysts search, triage, and export them — all on infrastructure you control.
Features
- IOC ingestion from community and custom threat feeds, with per-source provenance and canonical deduplication
- Analyst search, triage, suppression, and bulk operations over large IOC sets
- Enrichment providers (VirusTotal, AbuseIPDB, IPinfo Lite, RDAP) — all optional and configured after install
- Published feeds (JSON / CSV / STIX / TAXII 2.1) with per-key access and rate limiting
- MCP Server for AI clients (lookup, search, bulk check, controlled import) — see
docs/MCP.md - Threat Library — import URL/PDF/THIB reports, AI-assisted analysis, IOC matching, and portable THIB exchange — see
docs/threat-library.md - Role-based access control, audit logging, and a protected System Administrator account
- Scheduled backups with restore, and a single canonical system timezone across the whole stack
Beta status
Current version: VERSION (0.2.0-beta.14).
This is a Beta release. Core install and day-to-day workflows are usable, but interfaces, configuration, and APIs may still evolve. Review release notes before upgrading.
Requirements
- Ubuntu 24.04 (tested; other Linux may work)
- Docker Engine + Docker Compose plugin (the installer sets these up if missing)
- 4 GB RAM minimum (8 GB recommended), 2 vCPU
- Storage (root filesystem):
- Minimum / evaluation: 40 GB free — fresh install, limited feeds, TXT-only published feeds
- Recommended public beta: 60 GB free (≈80 GB total disk) — community feed ingestion, multi-format published feeds, and 30-day local backups
- Production: size from IOC volume, published feed formats/chunking, log retention, and backup policy (see [`docs/backup-
0724d437f686OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add talonhound-integration --env ABUSEIPDB_API_KEY=${ABUSEIPDB_API_KEY} --env ALIENVAULT_OTX_API_KEY=${ALIENVAULT_OTX_API_KEY} --env API_BEARER_TOKEN=${API_BEARER_TOKEN} --env API_INGEST_TOKEN=${API_INGEST_TOKEN} -- npx -y [email protected]{
"mcpServers": {
"talonhound-integration": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"ABUSEIPDB_API_KEY": "${ABUSEIPDB_API_KEY}",
"ALIENVAULT_OTX_API_KEY": "${ALIENVAULT_OTX_API_KEY}",
"API_BEARER_TOKEN": "${API_BEARER_TOKEN}",
"API_INGEST_TOKEN": "${API_INGEST_TOKEN}"
}
}
}
}Exposed tools (27)
23 read · 3 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
.net | read | legacy note |
IOCs | write | Create, update, read, search, and export indicators of compromise |
M | read | d |
PeckBirdy | read | C2 framework used against gambling-themed decoys |
Phishing | read | Phishing description |
TAXII | read | TAXII 2.1 read-only server over STIX-enabled Published Feeds |
Threat-Hunting | read | manual |
Unknown | read | Default when classification is unset or unrecognized. |
X | read | |
add_ioc_tags | write | |
bulk_enrich_iocs | read | |
bulk_lookup_iocs | read | |
enrich_ioc | read | |
get_enrichment_job | read | |
get_ioc_context | read | |
get_threat_report | read | |
import_iocs | write | |
list_enrichment_providers | read | |
list_ioc_sources | read | |
list_iocs_by_malware_family | read | |
list_malware_families | read | |
list_tags | read | |
lookup_ioc | read | |
peckbirdy | read | C2 framework |
ransomware | read | d |
remove_ioc_tags | destructive | |
search_iocs | read |
Trust audit
BLOCKgrade F · trust 48/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (4 observation(s))
- Network
- declared (12 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
export const GOOD_KEY = '-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC4unZ6hbbO6XLK\nVtlLdrDwhcuIZgF3eJXNsGR/+NnH+Lnnr1oCiJ6r1cNLvbaWVShVpHz6sxuWmORe\nmMoJqWCZkrR/WX
export const OTHER_KEY = '-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7O1ORcki6ACgI\nHkzQaccjUCpn5enveLg6Af0+POQPwyPQgvbpG2sgFXXUt4P8T3ekx4o8BBJUmqHd\nhqvjA2RQzeYhJ
const BLOCKED_HOSTNAMES = new Set(['localhost', 'metadata', 'metadata.google.internal']);
verify = false
firstRunSetup.js
console.log(`\n ${password}\n`);import { recomputeIocGlobalStatus } from './iocExpiration.js';+ 'Authorization: Bearer tok_abc x-apikey: K9xyz password=hunter2 postgres://u:p@db:5432/th'
secret: 'longsecrethex.with.dots'
const s = buildCustomFeedAuthSummary({ auth_type: 'bearer_token', token: 'super-secret-token-value' });apiKey: 'sk-test-SECRET-should-never-leak'
password: 'a-strong-passphrase-123',
code, username, password: 'a-strong-passphrase-123', confirmPassword: 'a-strong-passphrase-123', timezone
remove_ioc_tags
virustotalFileMetadata.test.js
const hash = crypto.createHash('sha1')assert.equal(normalizeSha256(crypto.createHash('md5').update('x').digest('hex')), null, 'MD5 is never an identity');const MD5 = crypto.createHash('md5').update('synthetic-narrative-attachment').digest('hex');const MD5_ID = crypto.createHash('md5').update('synthetic-asset-identifier').digest('hex');const md5 = (s) => crypto.createHash('md5').update(s).digest('hex');import { enrichItemsWithAnalystIntelligenceCounts } from '../../routes/analystIntelligence.js';path.posix.normalize(path.posix.join('/app/lib', '../../backend/lib/fileArtifacts/index.js'))assert.throws(() => resolveExportFilePath(DIR, '../../etc/passwd'));
export const DEFAULT_MALWARE_FAMILY_SEED_PATH = path.resolve(moduleDir, '../../seeds/malware-families-mitre-attack.json');
} from '../../backend/lib/malwarebazaarCoverage.js';
Gates applied: critical_finding, no_behavioural_pass.
0724d437f686full audit observations/trust-audit/mcp-server/spatronn__talonhound.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 0724d437f686 | BLOCK | F | 48 | first audit |
Questions
What is the TalonHound MCP server?
Self-hosted threat intelligence and IOC management platform
What tools does TalonHound expose?
27 in total: 23 read-only, 3 that write, and 1 that can delete or overwrite (remove_ioc_tags). Every one is listed on this page with its risk.
Is TalonHound safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (48/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does TalonHound need?
It reads ABUSEIPDB_API_KEY, ALIENVAULT_OTX_API_KEY, API_BEARER_TOKEN, API_INGEST_TOKEN, API_KEY_ENCRYPTION_KEY, AUTH_COOKIE_NAME, AUTH_REFRESH_COOKIE_NAME, BACKUP_ENCRYPTION_KEY_FILE, DB_PASSWORD, IPINFO_LITE_TOKEN, JWT_SECRET and MALWAREBAZAAR_AUTH_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does TalonHound run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as talonhound-integration at 1.0.0.
How current is this page?
The grade is for one exact copy of the source (0724d437f686), read on 2026-10-11. The repository is watched and re-audited when it changes.