3.1 KiB
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
mfromGermaine M. Brownmatches 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
- Add
Run OSINTbutton on claim/debtor page. - Call
person_searchwith debtor anchors. - Save JSON packet + markdown dossier to debtor record.
- Require human review before any collection action uses a lead.
- Later add paid providers only where MVP gaps are proven (People Data Labs, Trestle/Ekata-style phone intelligence, Pipl).