Atlas / MCP servers / spatronn / TalonHound

TalonHoundBLOCK

mcp/spatronn/talonhound

Self-hosted threat intelligence and IOC management platform

Verdict
BLOCK
Grade
F
Trust score
48 /100
Exposed tools
27 23r · 3w · 1d
Transport
streamable-http
License
Apache-2.0
Stars
0
01

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-
Read from source at commit 0724d437f686OBSERVED · 2026-10-11
02

Connect

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-code
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]
claude-desktop
{
  "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}"
      }
    }
  }
}
03

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.

ToolRiskDescription
.netreadlegacy note
IOCswriteCreate, update, read, search, and export indicators of compromise
Mreadd
PeckBirdyreadC2 framework used against gambling-themed decoys
PhishingreadPhishing description
TAXIIreadTAXII 2.1 read-only server over STIX-enabled Published Feeds
Threat-Huntingreadmanual
UnknownreadDefault when classification is unset or unrecognized.
Xread
add_ioc_tagswrite
bulk_enrich_iocsread
bulk_lookup_iocsread
enrich_iocread
get_enrichment_jobread
get_ioc_contextread
get_threat_reportread
import_iocswrite
list_enrichment_providersread
list_ioc_sourcesread
list_iocs_by_malware_familyread
list_malware_familiesread
list_tagsread
lookup_iocread
peckbirdyreadC2 framework
ransomwarereadd
remove_ioc_tagsdestructive
search_iocsread
04

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.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
backend/lib/tlsTestFixtures.js:5
export const GOOD_KEY = '-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC4unZ6hbbO6XLK\nVtlLdrDwhcuIZgF3eJXNsGR/+NnH+Lnnr1oCiJ6r1cNLvbaWVShVpHz6sxuWmORe\nmMoJqWCZkrR/WX
CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
backend/lib/tlsTestFixtures.js:7
export const OTHER_KEY = '-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7O1ORcki6ACgI\nHkzQaccjUCpn5enveLg6Af0+POQPwyPQgvbpG2sgFXXUt4P8T3ekx4o8BBJUmqHd\nhqvjA2RQzeYhJ
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
backend/lib/customThreatFeedSsrf.js:7
const BLOCKED_HOSTNAMES = new Set(['localhost', 'metadata', 'metadata.google.internal']);
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
backend/lib/publishedFeedWindowEligibility.js:157
verify = false
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMInventory / provenance · inv.binary · CWE-1104
backend/lib/firstRunSetup.js
firstRunSetup.js
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
backend/scripts/create-system-admin.js:46
console.log(`\n      ${password}\n`);
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
backend/lib/feedLifecycle.js:1
import { recomputeIocGlobalStatus } from './iocExpiration.js';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
backend/lib/fileArtifactDualWriteDiagnostics.test.js:12
+ 'Authorization: Bearer tok_abc x-apikey: K9xyz password=hunter2 postgres://u:p@db:5432/th'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
backend/lib/authSessions.test.js:20
secret: 'longsecrethex.with.dots'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
backend/lib/customThreatFeedAuth.test.js:271
const s = buildCustomFeedAuthSummary({ auth_type: 'bearer_token', token: 'super-secret-token-value' });
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
backend/lib/enrichmentOrchestrator.test.js:41
apiKey: 'sk-test-SECRET-should-never-leak'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
backend/lib/firstRunSetup.integration.test.js:78
password: 'a-strong-passphrase-123',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
backend/lib/firstRunSetup.integration.test.js:135
code, username, password: 'a-strong-passphrase-123', confirmPassword: 'a-strong-passphrase-123', timezone
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
remove_ioc_tags
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.binary · CWE-1104
backend/lib/virustotalFileMetadata.test.js
virustotalFileMetadata.test.js
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
backend/lib/publishedFeedStix.js:47
const hash = crypto.createHash('sha1')
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
backend/lib/threatLibrary/importIdentity.test.js:68
assert.equal(normalizeSha256(crypto.createHash('md5').update('x').digest('hex')), null, 'MD5 is never an identity');
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
backend/lib/threatLibrary/narrativeAssertionScope.test.js:28
const MD5 = crypto.createHash('md5').update('synthetic-narrative-attachment').digest('hex');
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
backend/lib/threatLibrary/narrativeAssertionScope.test.js:29
const MD5_ID = crypto.createHash('md5').update('synthetic-asset-identifier').digest('hex');
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
backend/lib/threatLibrary/pdfAppendixTables.test.js:36
const md5 = (s) => crypto.createHash('md5').update(s).digest('hex');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
backend/lib/fileArtifacts/listAliasExpansionPerf.test.js:20
import { enrichItemsWithAnalystIntelligenceCounts } from '../../routes/analystIntelligence.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
backend/lib/integrationImageImports.test.js:115
path.posix.normalize(path.posix.join('/app/lib', '../../backend/lib/fileArtifacts/index.js'))
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
backend/lib/iocSearchExport/exportConfig.test.js:14
assert.throws(() => resolveExportFilePath(DIR, '../../etc/passwd'));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
backend/lib/malwareFamilies/seedArtifact.js:20
export const DEFAULT_MALWARE_FAMILY_SEED_PATH = path.resolve(moduleDir, '../../seeds/malware-families-mitre-attack.json');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
backend/lib/malwarebazaarCoverage.test.js:27
} from '../../backend/lib/malwarebazaarCoverage.js';

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 0724d437f686full audit observations/trust-audit/mcp-server/spatronn__talonhound.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-110724d437f686BLOCKF48first audit
06

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.

Advertisement