Domain intelligence CLI and MCP server — tech stack, email security, and signal intelligence from DNS.
Project description
recon
Passive domain intelligence from public sources. Queries DNS records, Microsoft/Google identity endpoints, and certificate transparency logs to build a picture of an organization's technology stack — no credentials, no API keys, no active scanning.
Defensive use only. recon is designed for legitimate security posture assessment, IT architecture review, vendor due diligence, and defensive hardening. It performs zero active scanning and zero credentialed access. See docs/legal.md for the full intended-use policy.
recon contoso.com
┌──────────────────────────────── Contoso Ltd ────────────────────────────────┐
│ │
│ Company: Contoso Ltd │
│ Domain: contoso.onmicrosoft.com │
│ Provider: Microsoft 365 (primary email via Proofpoint gateway); │
│ Google Workspace (secondary) │
│ Tenant ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890 │
│ Region: NA │
│ Auth: Federated │
│ GWS Auth: Managed │
│ Confidence: ●●● High (4 sources) │
│ Services: AWS Route 53, Atlassian (Jira/Confluence)*, BIMI, │
│ CAA: DigiCert, Cloudflare, DocuSign*, Google Workspace, │
│ Microsoft 365, Okta, Proofpoint, Salesforce*, Slack │
│ * single-source — --explain to see evidence │
│ │
│ Insights: Federated identity indicators (likely ADFS/Okta/Ping — │
│ enterprise SSO) │
│ Email security 4/5 strong (DMARC reject, DKIM, SPF strict, │
│ BIMI) │
│ Email gateway: Proofpoint in front of Exchange │
│ Email delivery path: Proofpoint gateway → Microsoft 365 + │
│ Google Workspace │
│ Security stack: Okta (identity), Wiz (cloud security) │
│ Edge Layering: cloudflare, akamai │
│ Dual Email Provider: microsoft365, google-workspace │
│ │
│ Certs: 280 total, 10 in last 90d, 3 issuers (DigiCert, Entrust, │
│ Sectigo) │
│ │
│ Related: api.contoso.com, cdn.contoso.com, dev.contoso.com, │
│ login.contoso.com, portal.contoso.com, shop.contoso.com, │
│ sso.contoso.com, staging.contoso.com, status.contoso.com, │
│ support.contoso.com │
│ …and 47 more — use --full for the complete list │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Examples use Microsoft's fictional company names (Contoso, Northwind Traders, Fabrikam). Tenant IDs, services, and domains are fabricated. No real company is depicted.
Works for Microsoft 365, Google Workspace, or any provider. Also runs as an MCP server for AI agents.
Install
Requires Python 3.10+.
pip install recon-tool # from PyPI
pip install -U recon-tool # upgrade an existing install
recon doctor # verify connectivity
Usage
recon contoso.com # default panel
recon contoso.com --explain # show why each signal fired
recon contoso.com --full # everything (services + domains + posture)
recon contoso.com --json # structured JSON for piping
recon batch domains.txt --json # batch lookup
recon mcp # start MCP server (stdio)
See docs/ for the full CLI reference, fingerprint and signal documentation, and MCP setup.
MCP Server
recon runs as an MCP server for Claude, Cursor, VS Code, ChatGPT, or any MCP client. The Model Context Protocol lets AI agents call tools like recon directly from your chat.
{
"mcpServers": {
"recon": {
"command": "recon",
"args": ["mcp"],
"autoApprove": ["lookup_tenant", "analyze_posture"]
}
}
}
Then ask your AI: "Run a recon lookup on contoso.com and tell me what's running."
See docs/mcp.md for the full tool list, advanced agentic workflows, and per-client config locations.
Limitations
- Coverage depends on public DNS. Organizations behind heavy proxies, with minimal DNS records, or that don't publish SaaS verification tokens will return sparse results. This is fundamental to passive-only collection. When sources transiently fail, the CLI tells you which one and why so you can retry or accept the partial answer.
- Heuristic, not ground truth. The fingerprint database and signal rules are rule-based and solo-maintained. Confident-looking output can still be wrong. Treat results as indicators for investigation, not as definitive assessments. Don't make business decisions based solely on this output.
Development
pip install -e ".[dev]"
pytest tests/ # 1344 tests, 89% coverage
ruff check recon_tool/ # lint
pyright recon_tool/ # type check
License
MIT — see LICENSE for details.
This tool queries only public DNS records and unauthenticated endpoints. See docs/legal.md for full disclaimer.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file recon_tool-0.9.2.tar.gz.
File metadata
- Download URL: recon_tool-0.9.2.tar.gz
- Upload date:
- Size: 298.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61df904dd27dd83b5d60c1e6371f2f825f2bcc27223578fdcba8bf5f64cb3efe
|
|
| MD5 |
298a4a6edf35a5f705dabfe6b00365a2
|
|
| BLAKE2b-256 |
ed6f3b2b2bb64392bd65c110e777021f1fa750b84116d27e855f937aa07094a4
|
Provenance
The following attestation bundles were made for recon_tool-0.9.2.tar.gz:
Publisher:
release.yml on blisspixel/recon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
recon_tool-0.9.2.tar.gz -
Subject digest:
61df904dd27dd83b5d60c1e6371f2f825f2bcc27223578fdcba8bf5f64cb3efe - Sigstore transparency entry: 1301595203
- Sigstore integration time:
-
Permalink:
blisspixel/recon@39ca12a4ef7321a8c83b41f0237e66a5beeab023 -
Branch / Tag:
refs/tags/v0.9.2 - Owner: https://github.com/blisspixel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@39ca12a4ef7321a8c83b41f0237e66a5beeab023 -
Trigger Event:
push
-
Statement type:
File details
Details for the file recon_tool-0.9.2-py3-none-any.whl.
File metadata
- Download URL: recon_tool-0.9.2-py3-none-any.whl
- Upload date:
- Size: 157.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8730f594cace990c1b9376bc7e4bfc41d77c9a2827b774d3bc617f58cb49af28
|
|
| MD5 |
599b85e5d9574f3ead1af9e4aebab3d6
|
|
| BLAKE2b-256 |
b9fdd85fe8f888dff26ff5e7045b26018b1b985768723ca435d9a38e7937140b
|
Provenance
The following attestation bundles were made for recon_tool-0.9.2-py3-none-any.whl:
Publisher:
release.yml on blisspixel/recon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
recon_tool-0.9.2-py3-none-any.whl -
Subject digest:
8730f594cace990c1b9376bc7e4bfc41d77c9a2827b774d3bc617f58cb49af28 - Sigstore transparency entry: 1301595285
- Sigstore integration time:
-
Permalink:
blisspixel/recon@39ca12a4ef7321a8c83b41f0237e66a5beeab023 -
Branch / Tag:
refs/tags/v0.9.2 - Owner: https://github.com/blisspixel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@39ca12a4ef7321a8c83b41f0237e66a5beeab023 -
Trigger Event:
push
-
Statement type: