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

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
contoso.com
──────────────────────────────────────────────────────────────────────────────
  Provider     Microsoft 365 (primary) via Proofpoint gateway + Google Workspace (secondary)
  Tenant       a1b2c3d4-e5f6-7890-abcd-ef1234567890 • NA
  Auth         Federated (Entra ID + Google Workspace)
  Confidence   ●●● High (4 sources)

Services
  Email          Microsoft 365, Google Workspace, Proofpoint, DMARC, DKIM,
                 SPF: strict (-all), BIMI
  Identity       Okta, Google Workspace (managed identity)
  Cloud          Cloudflare (CDN), AWS Route 53 (DNS)
  Security       Wiz, CAA: 3 issuers restricted
  Collaboration  Slack, Atlassian (Jira/Confluence)

High-signal related domains
  api.contoso.com, login.contoso.com, portal.contoso.com, sso.contoso.com,
  admin.contoso.com, status.contoso.com, support.contoso.com
  (57 total — 50 more, use --full to see all)

Insights
  Federated identity indicators observed (likely Okta — enterprise SSO)
  Email security 4/5: DMARC reject, DKIM, SPF strict, BIMI
  Email gateway: Proofpoint in front of Exchange
  Dual provider: Google + Microsoft coexistence

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; the default pip install recon-tool includes MCP support.

Why recon?

If you need... Use recon for... Reach for something heavier when...
Fast external stack context Passive DNS, identity-endpoint, CT, SaaS, and posture indicators with no credentials 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, scheduled monitoring, or report generation

Install

Requires Python 3.10+.

pip install recon-tool                 # includes MCP server
pip install -U recon-tool              # upgrade
recon doctor                           # verify connectivity

Usage

recon contoso.com                              # default panel
recon contoso.com --explain                    # full reasoning + provenance DAG
recon contoso.com --full                       # everything (services + domains + posture)
recon contoso.com --profile fintech            # apply a posture lens
recon contoso.com --confidence-mode strict     # drop hedging on dense-evidence targets (v0.11)
recon contoso.com --json                       # structured JSON for piping
recon batch domains.txt --json                 # batch (cross-domain token clustering)
recon contoso.com --chain --depth 2            # follow related-domain breadcrumbs
recon delta contoso.com                        # diff against last cached snapshot
recon mcp                                      # start MCP server (stdio)

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

See docs/README.md for the organized documentation index.

MCP Server

[!WARNING] recon mcp runs with the privileges of the calling user or editor process. Treat connected AI agents as untrusted input. Start with manual approvals, keep autoApprove empty by default, and prefer an isolated workspace or container for production agent use.

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": []
    }
  }
}

The default install already includes the MCP server. Keep approvals manual until you've decided which tools, if any, you want to trust automatically.

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.

Claude Code, Kiro, Windsurf, Cursor, VS Code: drop-in install snippets and agent guidance live under clients/. Claude Code users get a full plugin (MCP + skill in one install) at claude-code/. The portable AGENTS.md at the repo root is auto-detected by Kiro and other agents.md-aware tools.

Quickest install for AI clients with file-write tools. Paste this prompt to your AI:

Fetch https://raw.githubusercontent.com/blisspixel/recon/main/claude-code/skills/recon/SKILL.md and save it to my Claude Code skills directory (~/.claude/skills/recon/SKILL.md) — or to ~/.kiro/skills/recon/SKILL.md if I'm using Kiro. Then run pip install recon-tool and recon doctor to verify.

The SKILL.md follows the open agentskills.io standard, so the same file works in Claude Code and Kiro.

Stable JSON schema. Downstream consumers can validate recon <domain> --json output against docs/recon-schema.json (raw URL). The schema is the v1.0 stability contract documented in docs/schema.md; drift between schema and emitter is caught by tests/test_json_schema_file.py.

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]"               # or: uv sync --extra dev
pytest tests/                          # full test suite
ruff check recon_tool/                 # lint
pyright recon_tool/                    # type check
pre-commit install                     # activate pre-commit hooks

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

This version

1.6.0

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-1.6.0.tar.gz (665.3 kB view details)

Uploaded Source

Built Distribution

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

recon_tool-1.6.0-py3-none-any.whl (280.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: recon_tool-1.6.0.tar.gz
  • Upload date:
  • Size: 665.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for recon_tool-1.6.0.tar.gz
Algorithm Hash digest
SHA256 0bf05073276ac183d4dbe6a07571f1f4130dfb5273105709cbb7db213b2fef22
MD5 2e76d849fda0b33d39677ea566034597
BLAKE2b-256 617454e9bf4aa17bc954467dc2665c1f77a3776c9ba4564c8bf00220a1dff06c

See more details on using hashes here.

Provenance

The following attestation bundles were made for recon_tool-1.6.0.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-1.6.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for recon_tool-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0c1de47c6eb068102a0ea53e074461351fde44d0fbd874e2976179edf90113e0
MD5 e7401c9bbd832b599521d71388b00639
BLAKE2b-256 fa9ba6108074b8b9b7bc25922d17e392fc4cb93ff7e9c2fe2079674da4a14645

See more details on using hashes here.

Provenance

The following attestation bundles were made for recon_tool-1.6.0-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