Initial skills documentation — 25 categories, all SKILL.md + references + scripts
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user