Skip to main content

Domain intelligence CLI and MCP server — tech stack, email security, and signal intelligence from DNS.

Project description

recon

CI PyPI Python License OpenSSF Scorecard

Passive domain intelligence from public sources. recon reads public DNS, certificate transparency, and unauthenticated Microsoft and Google identity discovery endpoints to report what an organization appears to publish about its identity stack, email posture, SaaS footprint, and related domains.

It uses no credentials, no API keys, no paid feeds, and no active scanning. It is a local Python CLI, importable library, JSON producer, and stdio MCP server. It is not a hosted service, scheduler, vulnerability scanner, company research tool, or firmographic database.

Defensive use only. Use recon for legitimate posture review, IT architecture review, vendor diligence, and defensive hardening. See docs/legal.md for the intended-use policy.

Quick Start

Install with uv or pipx:

uv tool install recon-tool
# or
pipx install recon-tool

If uv or pipx is already installed, the platform script can install or update recon:

Windows (PowerShell):

powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/blisspixel/recon/main/scripts/install.ps1 | iex"

macOS or Linux:

curl -fsSL https://raw.githubusercontent.com/blisspixel/recon/main/scripts/install.sh | bash

Open a new terminal and verify the install:

recon doctor

Run a lookup:

recon contoso.com

Example output shape:

Contoso Ltd
contoso.com

Provider     Microsoft 365 via Proofpoint gateway
Tenant       a1b2c3d4-e5f6-7890-abcd-ef1234567890
Auth         Federated
Confidence   High (4 sources)

Services
  Email       Microsoft 365, Proofpoint, DMARC, DKIM, SPF strict
  Identity    Okta, Entra ID
  Cloud       Cloudflare, AWS Route 53

Insights
  Federated identity indicators observed
  Email security 4/5: DMARC reject, DKIM, SPF strict, BIMI
  Email gateway: Proofpoint in front of Exchange

Examples use Microsoft's fictional company names. Tenant IDs, services, and domains in examples are fabricated. No real company is depicted.

For detailed install, update, uninstall, and first-run workflows, read docs/getting-started.md.

What recon Is Good For

Need Use recon for Use something else when
Fast external stack context Passive DNS, identity-endpoint, CT, SaaS, and posture indicators You need authenticated tenant inventory or asset-management truth
Defensive review or vendor diligence Hedged observations and evidence traces you can verify You need vulnerability scanning, exploit checks, or host-level facts
Automation-friendly output Stable JSON, batch mode, delta mode, and local MCP tools You need dashboards, scheduling, or report generation built in

recon reports observations, not verdicts. A missing DMARC record is a missing record. A Microsoft 365 tenant indicator is an observed indicator. The operator decides what those facts mean in context.

Common Commands

recon contoso.com                              # default panel
recon https://www.contoso.com/path             # normalize URL to apex
recon mail.contoso.com                         # reduce sub-host to apex
recon mail.contoso.com --exact                 # keep that literal host
recon contoso.com --explain                    # reasoning and provenance
recon contoso.com --full                       # services, domains, posture
recon contoso.com --json                       # structured lookup record
recon batch domains.txt --json                 # batch JSON array
recon batch domains.txt --ndjson               # one record per line
recon batch domains.txt --summary              # aggregate-only cohort summary
recon delta contoso.com                        # diff against cached snapshot
recon mcp install --client=cursor              # wire MCP into a client
recon mcp doctor                               # live MCP handshake check

Built-in posture profiles: fintech, healthcare, saas-b2b, high-value-target, public-sector, and higher-ed. Custom profiles live in ~/.recon/profiles/*.yaml.

Generated command and flag reference: docs/cli-surface.md.

How recon Works

recon reads:

  • DNS records: MX, TXT, SPF, DMARC, DKIM, BIMI, CNAME, NS, SRV, and CAA.
  • Certificate transparency: SAN names, issuers, issuance timing, and bounded related-domain hints.
  • Identity discovery: unauthenticated Microsoft and Google endpoints.

By default, the only request the queried domain's own servers see is the standards-based MTA-STS policy fetch at mta-sts.<domain>. Google CSE and BIMI VMC direct probes are opt-in behind --direct-probes.

The engine then maps observables to fingerprint slugs, derived signals, graph motifs, and optional Bayesian posteriors. Sparse public evidence stays sparse: the result widens uncertainty or lowers confidence instead of inventing a clean answer.

Long-form explanation: docs/how-it-works.md. Formal model: docs/correlation.md.

JSON and Automation

recon <domain> --json emits a stable single-domain lookup object. Batch and delta modes emit different shapes, so route by mode or by record_type.

recon contoso.com --json
recon batch domains.txt --json
recon batch domains.txt --ndjson
recon delta contoso.com --json

Read these before building an integration:

docs/surface-inventory.json, docs/cli-surface.md, and recon://surface-inventory are generated discovery context and drift guards, not stable runtime API contracts. ADR-0007 records the promotion gate for any future stable subset.

MCP Server

The default install includes a local stdio MCP server for MCP-compatible tools. Start with manual approvals and an empty autoApprove list. Treat connected agents as untrusted input.

recon mcp install --client=claude-desktop
recon mcp install --client=cursor --dry-run
recon mcp doctor

The installer writes the right per-client config shape and preserves sibling MCP servers. Full setup, tool list, read-only versus stateful guidance, and troubleshooting live in docs/mcp.md. Per-client scaffolds live in agents/.

Limitations

The public channel has a ceiling:

  • Internal-only workloads are invisible.
  • SaaS products without DNS verification records may not appear.
  • Email gateways can hide the downstream mailbox provider.
  • CT logs can be stale, partial, rate-limited, or absent.
  • Fingerprints are rule-based indicators, not proof of active use.

Read docs/limitations.md before using recon output for a high-stakes decision. Read docs/data-handling-policy.md before committing any validation artifact.

Documentation

Roadmap Focus

recon has a stable baseline, but product quality work remains. The top three priorities are:

  1. Make every default claim traceable to evidence and remove product-use, cloud-type, or security-maturity conclusions that public metadata cannot support.
  2. Characterize the official MCP v2 beta in an isolated compatibility matrix before the 2026-07-28 final release, while production stays on stable MCP v1.
  3. Establish an aggregate-safe quality baseline for claim precision, abstention, provenance, catalog coverage, degradation, latency, CT value, and agent context cost before expanding inference or graph machinery.

The dependency order, acceptance evidence, stop rules, and current code-graph summary live in docs/roadmap.md. The implementation plan is docs/engineering-refinement-plan.md, and the current step-back review is docs/strategic-gap-audit.md. Research publication, OpenSSF process, outside replication, and archive work remain separate maintainer tracks so they do not displace product truthfulness or measured utility.

The latest local public proof for the separate publication track is validation/2026-06-30-submission-freeze-local-proof.md. Its public-label decision keeps public lists as robustness checks rather than population rates, and its M365 tenancy decision keeps that evidence as corroboration rather than independent calibration.

Development

uv sync
pre-commit install
uv run python scripts/release_readiness.py --allow-dirty
uv run python scripts/check.py

python scripts/check.py is the local CI mirror. It runs lint, type checks, coverage-gated tests, generated-artifact checks, validation hygiene, and ratchets. Do not push on --fast alone.

Project hygiene: keep examples fictional or synthetic, keep validation artifacts aggregate-only, run scripts/check.py, and avoid dead code or placeholders. Contributor details: CONTRIBUTING.md.

License

Apache 2.0. Free to use, build on, fork, and share. See LICENSE for the full terms.

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

recon_tool-2.3.9.tar.gz (2.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

recon_tool-2.3.9-py3-none-any.whl (610.4 kB view details)

Uploaded Python 3

File details

Details for the file recon_tool-2.3.9.tar.gz.

File metadata

  • Download URL: recon_tool-2.3.9.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for recon_tool-2.3.9.tar.gz
Algorithm Hash digest
SHA256 d9d813d98c450a04f668d43d0f3b7afbfb26d59ed065e6199c9f6a57e2a60768
MD5 aa07e3ed325b5f51743a83aabae4b4fe
BLAKE2b-256 0949e5a8de9f26b39933543fdcc29db0e06b16eaad6c0d12513fb823e21d929b

See more details on using hashes here.

Provenance

The following attestation bundles were made for recon_tool-2.3.9.tar.gz:

Publisher: release.yml on blisspixel/recon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file recon_tool-2.3.9-py3-none-any.whl.

File metadata

  • Download URL: recon_tool-2.3.9-py3-none-any.whl
  • Upload date:
  • Size: 610.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for recon_tool-2.3.9-py3-none-any.whl
Algorithm Hash digest
SHA256 4a8bbd9a72799e00f576d598f7b76bdfabd6dc15b13a8cc8369cff0c96eae434
MD5 1af9351fbf738300bb76ea6b38bb3133
BLAKE2b-256 bc9230cfbcf632bb2507b78ade7aa74411f455c0215468cd453bd9964ae6a7bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for recon_tool-2.3.9-py3-none-any.whl:

Publisher: release.yml on blisspixel/recon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page