Domain intelligence at your fingertips.
A high-performance, multi-interface domain utility suite โ query WHOIS, RDAP, DNS, SSL, and more from the terminal, Python, REST API, or AI assistants.
Features ยท Quick Start ยท CLI Usage ยท Python ยท REST API ยท MCP Server
|
๐ Lookups & Discovery
|
๐ DNS & Propagation
|
|
๐ก๏ธ Security & Health
|
โก Power Features
|
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ User Interfaces โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโค
โ seer-cli โ seer-py โ seer-api โ seer-api โ
โ Terminal โ Python โ REST API โ MCP Server โ
โโโโโโโโฌโโโโโโโดโโโโโโโฌโโโโโโโดโโโโโโโฌโโโโโโโโดโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ โ โ โ
โ โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ seer-core โ
โ Core Rust Library โ
โโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโฌโโโโโโโโโฌโโโโโโโฌโโโโโโโฌโโโโโโโโโโโโโโโโค
โ WHOIS โ RDAP โ DNS โ Status โ SSL โ Bulk โ Diff/Watch โ
โโโโโโโโโโโโดโโโโโโโโโดโโโโโโโดโโโโโโโโโดโโโโโโโดโโโโโโโดโโโโโโโโโโโโโโโโ
cargo install seer-cliseer lookup example.com # Smart RDAP + WHOIS lookup
seer dig example.com MX # DNS query
seer status example.com # HTTP, SSL, and expiration check
seer ssl example.com # Full SSL chain inspection
seer # Launch interactive REPL[dependencies]
seer-core = "0.18"
tokio = { version = "1", features = ["full"] }Requirements: Rust 1.70+ ยท Python 3.9+ (for Python bindings/API)
| Package | Type | Install | Description |
|---|---|---|---|
| seer-core | Rust library | cargo add seer-core |
Core library โ all business logic |
| seer-cli | Rust binary | cargo install seer-cli |
The seer command-line tool |
| seer-py | Python extension | maturin develop --release |
Python bindings via PyO3 |
| seer-api | Python package | pip install -e . |
REST API + MCP server |
seer-cli vs seer-core โ which do I need?
| seer-cli | seer-core | |
|---|---|---|
| What | Executable binary | Rust library crate |
| Install | cargo install seer-cli |
cargo add seer-core |
| Use | Run seer in your terminal |
use seer_core::* in Rust code |
| Provides | Commands, REPL, formatted output | Structs, clients, async APIs |
| Depends on | seer-core internally | Nothing โ it's the foundation |
# Smart lookup (concurrent RDAP + WHOIS)
seer lookup example.com
# Comprehensive domain info (merged RDAP + WHOIS)
seer info example.com
# WHOIS / RDAP
seer whois example.com
seer rdap example.com # Domain
seer rdap 8.8.8.8 # IP address
seer rdap AS15169 # ASN
# DNS queries
seer dig example.com # A records (default)
seer dig example.com MX # Specific record type
seer dig example.com A -s 8.8.8.8 # Custom nameserver
# DNS propagation & monitoring
seer prop example.com A
seer follow example.com 20 0.5 # 20 checks, 30s interval
seer follow example.com 10 1 MX --changes-only
# DNSSEC & DNS comparison
seer dnssec example.com
seer compare example.com A 8.8.8.8 1.1.1.1
# Domain health & SSL
seer status example.com
seer ssl example.com
# Reverse DNS
seer reverse 8.8.8.8
# Discovery
seer avail example.com
seer subdomains example.com
seer tld .com
# Domain diff
seer diff example.com google.com
# Watchlist
seer watch add example.com
seer watch list
seer watch # Check all watched domains
seer watch remove example.com
# Lookup history
seer history example.com
seer history --clear
# Bulk operations (with CSV export)
seer bulk lookup domains.txt
seer bulk status domains.txt -o results.csv
seer bulk dig domains.txt MX
seer bulk avail domains.txt
seer bulk info domains.txt
# Scriptable field extraction
seer --quiet --fields registrar lookup example.com
seer --quiet --fields certificate.issuer status example.com
# Shell completions
seer completions bash >> ~/.bashrc
seer completions zsh >> ~/.zshrcseer --format human lookup example.com # Colored, human-readable (default)
seer --format json lookup example.com # JSON
seer --format yaml lookup example.com # YAML
seer --format markdown lookup example.com # Markdown tableLaunch by running seer with no arguments:
$ seer
seer> lookup example.com
seer> dig github.com MX
seer> status cloudflare.com
seer> set output json
seer> help
seer> exit
Features: command history (~/.seer_history), tab completion, loading spinners, persistent session state.
import seer
# Smart lookup
result = seer.lookup("example.com")
# WHOIS / RDAP
whois = seer.whois("example.com")
rdap = seer.rdap_domain("example.com")
rdap = seer.rdap_ip("8.8.8.8")
rdap = seer.rdap_asn(15169)
# DNS
records = seer.dig("example.com", record_type="MX")
propagation = seer.propagation("example.com", record_type="A")
# Domain health & SSL
status = seer.status("example.com")
ssl = seer.ssl("example.com")
dnssec = seer.dnssec("example.com")
# Availability & info
available = seer.availability("example.com")
info = seer.info("example.com")
# Comparison & enumeration
diff = seer.diff("example.com", "google.com")
comparison = seer.dns_compare("example.com", "A", "8.8.8.8", "1.1.1.1")
subdomains = seer.subdomains("example.com")
# Bulk operations
results = seer.bulk_lookup(["example.com", "google.com"], concurrency=10)
results = seer.bulk_status(["example.com", "google.com"])
results = seer.bulk_dig(["example.com", "google.com"], record_type="A")
results = seer.bulk_info(["example.com", "google.com"])Example: Check SSL Certificate
status = seer.status("example.com")
if cert := status.get("certificate"):
print(f"SSL Valid: {cert['is_valid']}")
print(f"Expires: {cert['valid_until']}")
print(f"Days left: {cert['days_until_expiry']}")[dependencies]
seer-core = "0.18"
tokio = { version = "1", features = ["full"] }use seer_core::{SmartLookup, DnsResolver, RecordType, StatusClient};
#[tokio::main]
async fn main() -> seer_core::Result<()> {
// Smart lookup (RDAP โ WHOIS fallback)
let lookup = SmartLookup::new();
let result = lookup.lookup("example.com").await?;
// DNS resolution
let resolver = DnsResolver::new();
let records = resolver.resolve("example.com", RecordType::MX, None).await?;
for record in records {
println!("{}: {}", record.record_type, record.data);
}
// Domain status check
let client = StatusClient::new();
let status = client.check("example.com").await?;
println!("HTTP: {:?}", status.http_status);
Ok(())
}See seer-core/README.md for the full API reference.
seer-api # Starts on http://127.0.0.1:8000 (loopback-only by default)- Default bind is
127.0.0.1(was0.0.0.0in previous versions). To bind publicly, set bothSEER_HOST=0.0.0.0andSEER_API_KEYโ the server refuses to start on a non-loopback host without an auth key. /docs,/redoc,/openapi.jsonare disabled by default. SetSEER_DOCS_ENABLED=trueto re-enable.- Multi-worker deployments require
SEER_RATE_LIMIT_STORAGE. WithWEB_CONCURRENCY>1and the default in-memory limiter, the server refuses to start โ the per-worker limiter would be trivially bypassable. Useredis://host:6379or another shared store.
| Endpoint | Method | Description |
|---|---|---|
/lookup/{domain} |
GET | Smart lookup (RDAP + WHOIS) |
/lookup/bulk |
POST | Bulk smart lookups |
/whois/{domain} |
GET | WHOIS lookup |
/rdap/domain/{domain} |
GET | RDAP domain lookup |
/rdap/ip/{ip} |
GET | RDAP IP lookup |
/rdap/asn/{asn} |
GET | RDAP ASN lookup |
/dns/{domain}/{record_type} |
GET | DNS query |
/dns/bulk |
POST | Bulk DNS queries |
/propagation/{domain}/{record_type} |
GET | DNS propagation check |
/propagation/bulk |
POST | Bulk propagation checks |
/status/{domain} |
GET | Domain status check |
/status/bulk |
POST | Bulk status checks |
/health |
GET | Health check |
# Examples
curl http://localhost:8000/lookup/example.com
curl http://localhost:8000/dns/example.com/MX
curl -X POST http://localhost:8000/lookup/bulk \
-H "Content-Type: application/json" \
-d '{"domains": ["example.com", "google.com"]}'API docs (when SEER_DOCS_ENABLED=true):
Swagger UI ยท ReDoc
Integrate Seer with AI assistants via the Model Context Protocol:
seer-mcp # Runs on stdio transport16 tools available:
| Tool | Description |
|---|---|
seer_lookup |
Smart domain lookup |
seer_info |
Comprehensive domain info |
seer_whois |
WHOIS lookup |
seer_rdap_domain |
RDAP domain lookup |
seer_rdap_ip |
RDAP IP lookup |
seer_rdap_asn |
RDAP ASN lookup |
seer_dig |
DNS query |
seer_propagation |
DNS propagation check |
seer_status |
Domain status check |
seer_bulk_lookup |
Bulk smart lookups |
seer_bulk_whois |
Bulk WHOIS lookups |
seer_bulk_dig |
Bulk DNS queries |
seer_bulk_status |
Bulk status checks |
seer_bulk_propagation |
Bulk propagation checks |
seer_bulk_info |
Bulk domain info |
Claude Desktop configuration
Add to claude_desktop_config.json:
{
"mcpServers": {
"seer": {
"command": "seer-mcp"
}
}
}| Type | Description | Type | Description | |
|---|---|---|---|---|
A |
IPv4 address | CAA |
CA authorization | |
AAAA |
IPv6 address | PTR |
Pointer record | |
MX |
Mail exchange | SRV |
Service locator | |
TXT |
Text records | DNSKEY |
DNSSEC public key | |
NS |
Nameserver | DS |
Delegation signer | |
SOA |
Start of authority | ANY |
All records | |
CNAME |
Canonical name |
Propagation checks query 29 nameservers across 6 regions:
| Region | Servers |
|---|---|
| ๐บ๐ธ North America | Google 8.8.8.8 ยท Cloudflare 1.1.1.1 ยท OpenDNS ยท Quad9 ยท Level3 |
| ๐ช๐บ Europe | DNS.Watch ยท Mullvad ยท dns0.eu ยท Yandex ยท UncensoredDNS |
| ๐ Asia Pacific | AliDNS ยท 114DNS ยท Tencent DNSPod ยท TWNIC ยท HiNet |
| ๐ Latin America | Claro Brasil ยท Telefonica Brasil ยท Antel Uruguay ยท Telmex ยท CenturyLink |
| ๐ Africa | Liquid Telecom ยท SEACOM ยท Safaricom ยท MTN South Africa ยท Telecom Egypt |
| ๐ Middle East | Etisalat UAE ยท STC Saudi ยท Bezeq Israel ยท Turk Telekom ยท Ooredoo Qatar |
| Variable | Description | Default |
|---|---|---|
RUST_LOG |
Logging level (trace / debug / info / warn / error) |
โ |
SEER_CORS_ORIGINS |
Comma-separated CORS origins for REST API | * |
SEER_RATE_LIMIT |
REST API rate limit (requests/minute) | 30 |
Initialize a config file at ~/.seer/config.toml:
seer config --init| Client | Default |
|---|---|
| WHOIS | 10s |
| RDAP | 30s |
| DNS | 5s (2 retries) |
| HTTP / SSL | 10s |
| Propagation | 15s |
- Input: plain text (one domain per line) or CSV (first column)
- Comments: lines starting with
#are skipped - Concurrency: default 10, max 50
- API limit: max 100 domains per request
- Scheduled Monitoring Daemon โ
seer monitor --config monitors.tomlas a background service with notifications (email, Slack, PagerDuty) for expiring domains, SSL certificates, and unexpected DNS changes. The natural evolution ofwatch,follow, andstatusinto persistent monitoring.
cargo build --release # All Rust packages
cd seer-py && maturin develop --release # Python bindings
cd seer-api && pip install -e . # REST API + MCP servercargo test # All Rust tests
cargo test -p seer-core # Core library only
cd seer-api && pytest # Python API tests
RUST_LOG=debug cargo test # With debug loggingcargo fmt --all -- --check # Format check
cargo clippy -- -D warnings # Lintseer/
โโโ Cargo.toml # Workspace root
โโโ seer-core/ # Core Rust library (all business logic)
โ โโโ src/
โ โโโ lib.rs # Module exports
โ โโโ error.rs # Centralized error types
โ โโโ lookup.rs # Smart lookup (RDAP + WHOIS)
โ โโโ validation.rs # Domain validation & SSRF protection
โ โโโ config.rs # Configuration management
โ โโโ whois/ # WHOIS client, parser, server mapping
โ โโโ rdap/ # RDAP client with IANA bootstrap
โ โโโ dns/ # Resolver, propagation, DNSSEC, follow
โ โโโ ssl/ # SSL certificate chain inspection
โ โโโ status/ # HTTP, SSL, and expiration checking
โ โโโ bulk/ # Concurrent bulk executor
โ โโโ diff/ # Domain comparison
โ โโโ availability/ # Domain availability checking
โ โโโ subdomains/ # CT log enumeration
โ โโโ tld/ # TLD information
โ โโโ watchlist/ # Domain monitoring
โ โโโ history/ # Lookup history tracking
โ โโโ domain_info/ # Flat domain info structure
โ โโโ cache/ # TTL and single-value caching
โ โโโ retry/ # Network retry with classification
โ โโโ logging/ # Structured logging + OpenTelemetry
โ โโโ output/ # Formatters (human/JSON/YAML/markdown)
โ โโโ colors.rs # Catppuccin color palette
โ
โโโ seer-cli/ # CLI application
โ โโโ src/
โ โโโ main.rs # Clap commands & dispatch
โ โโโ display/ # Spinner and progress utilities
โ โโโ repl/ # Interactive REPL
โ
โโโ seer-py/ # Python bindings (PyO3)
โ โโโ src/lib.rs # Rust โ Python bridge
โ โโโ python/seer/ # Python package wrapper
โ
โโโ seer-api/ # FastAPI REST server + MCP
โโโ seer_api/
โโโ main.py # FastAPI app
โโโ routers/ # API endpoint modules
โโโ mcp/ # MCP server (16 tools)
| Layer | Technologies |
|---|---|
| Core | Rust ยท Tokio ยท Reqwest (rustls) ยท Hickory-resolver (DNSSEC) ยท Serde ยท OpenTelemetry |
| CLI | Clap v4 ยท Rustyline ยท Indicatif ยท Colored ยท Crossterm |
| Python | PyO3 (ABI3) ยท FastAPI ยท Pydantic ยท MCP |
| Data | WHOIS servers from WooMai/whois-servers ยท IANA RDAP bootstrap |
MIT License โ Copyright (c) 2026 Zac Roach
See LICENSE for the full text.