Files

3.1 KiB

OSINT Person Intelligence MCP Pattern

Build a dedicated entity-resolution layer above generic search MCPs when the task is person/skip-trace intelligence rather than raw search.

Architecture

Hermes
  ↓
osint-person-mcp        # entity resolution, scoring, dossier logic
  ↓
super-search MCP        # raw search + extraction providers
  ↓
SearXNG / Exa / OpenCorporates / CourtListener / Firecrawl

Keep super-search generic. Put identity-specific logic in a separate MCP so the generic search engine does not become a grab bag of scoring and compliance behavior.

Tool set

Recommended tools:

Tool Purpose
person_search Query generation, search, source scoring, entity clustering, compliance notes
phone_search_variants Normalize phone and emit common variants
phone_search Search all phone variants and cluster matches
email_search Search email address and cluster matches
business_affiliation_search Search person + organization/business/location anchors
court_business_search Search court/business/public-record query variants
score_source Score URL/title/description reliability
dossier_report Convert structured JSON into concise markdown report

Source scoring

Use durable source tiers:

Tier Examples Treatment
High official school/government/court/publication sources Strong evidence only when identity anchors also match
Medium-high LinkedIn, RocketReach, TheOrg, Tradeloop, ZoomInfo Useful but needs corroboration
Medium-low Whitepages, 411, BeenVerified, NPD, FastBackgroundCheck Lead only; mark unverified
Low obituaries/name-only pages Usually weak/name-collision
Reject random blob/CDN/search-spam pages Exclude from useful clusters

Do not let organization-only pages rank as likely person matches. An official SCAD page with no subject name is context, not identity evidence.

Matching pitfalls

  • Ignore one-letter middle initials for alias matching. A lone m from Germaine M. Brown matches almost every page.
  • Normalize phone numbers into all common forms: digits, dashed, dotted, (xxx) xxx-xxxx, +1 xxx xxx xxxx, +1-xxx-xxx-xxxx.
  • Separate likely target, possible target, weak/different, and rejected results.
  • Preserve source URL, query, provider, matched fields, score, and timestamp for every lead.
  • Treat Atlanta/Savannah/location-only matches as insufficient without identity anchors.

Compliance guardrails

  • OSINT results are leads, not verified facts.
  • Do not auto-contact from scraped or data-broker leads without human review.
  • Preserve source URL and timestamp for every claim.
  • Mark data-broker information as unverified until corroborated.

DRE integration path

  1. Add Run OSINT button on claim/debtor page.
  2. Call person_search with debtor anchors.
  3. Save JSON packet + markdown dossier to debtor record.
  4. Require human review before any collection action uses a lead.
  5. Later add paid providers only where MVP gaps are proven (People Data Labs, Trestle/Ekata-style phone intelligence, Pipl).