Seer
A multi-interface domain name utility tool for querying domain registration information, DNS records, and network data. Seer provides a unified interface across CLI, Python library, REST API, and MCP (Model Context Protocol) server.
Features
- WHOIS Lookups - Query domain registrant and registrar information
- RDAP Lookups - Modern Registration Data Access Protocol queries for domains, IPs, and ASNs
- DNS Resolution - Query DNS records (A, AAAA, MX, TXT, NS, SOA, CNAME, CAA, PTR, SRV, DNSKEY, DS)
- DNS Propagation Checking - Monitor global DNS propagation across multiple nameservers
- Domain Status - Quick health check: HTTP status, site title, SSL certificate info, expiration dates
- Smart Lookups - Intelligent fallback that tries RDAP first, then falls back to WHOIS
- Bulk Operations - Process multiple domains/queries concurrently with rate limiting
- Multiple Interfaces - CLI, Python library, REST API, and MCP server
Installation
Prerequisites
- Rust 1.70+ (required for CLI and building Python bindings)
- Python 3.9+ (required for Python library, REST API, and MCP server)
- uv (recommended Python package manager)
CLI Only
Install from crates.io:
This installs the seer binary to ~/.cargo/bin/, which is typically already in your PATH if you have Rust installed.
Full Installation (CLI + Python Library + REST API + MCP Server)
# Clone the repository
# Install CLI to PATH
# Install maturin (needed to build Python bindings)
# Build and install Python bindings (required before installing the API)
# Install REST API and MCP server
After installation, you'll have access to:
seer- CLI toolseer-api- REST API serverseer-mcp- MCP server for AI assistants
Individual Components
Python Library Only
Or build a wheel for distribution:
REST API & MCP Server
Note: The Python library must be installed first (see above).
This provides two commands:
seer-api- Start the REST API serverseer-mcp- Start the MCP server
Usage
CLI
Command Mode
# Smart lookup (RDAP with WHOIS fallback)
# WHOIS lookup
# RDAP lookups
# DNS queries
# DNS propagation check
# Domain status check (HTTP, SSL, expiration)
# Bulk operations
Output Formats
# Human-readable output (default)
# JSON output
Interactive REPL
Launch the interactive shell by running seer without arguments:
REPL features:
- Command history (saved to
~/.seer_history) - Tab completion
- Loading spinners for long operations
Python Library
# Smart lookup
=
# WHOIS lookup
=
# RDAP lookups
=
=
=
# DNS queries
=
=
# DNS propagation
=
# Domain status (HTTP, SSL, expiration)
=
# Bulk operations
=
=
=
=
REST API
Start the server:
The API runs on http://localhost:8000 with auto-reload enabled.
Endpoints
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | List available endpoints |
/health |
GET | Health check |
/lookup/{domain} |
GET | Smart lookup |
/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 |
/propagation/{domain}/{record_type} |
GET | Propagation check |
/status/{domain} |
GET | Domain status check |
/status/bulk |
POST | Bulk status checks |
Examples
# Smart lookup
# WHOIS lookup
# DNS query
# Domain status
# Bulk lookup
API documentation is available at:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
CORS Configuration
Set allowed origins via environment variable:
MCP Server
Start the MCP server for AI assistant integration:
The MCP server exposes these tools:
seer_lookup- Smart domain lookupseer_whois- WHOIS lookupseer_rdap_domain/seer_rdap_ip/seer_rdap_asn- RDAP lookupsseer_dig- DNS queriesseer_propagation- Propagation checkingseer_status- Domain status (HTTP, SSL, expiration)seer_bulk_lookup/seer_bulk_whois/seer_bulk_dig/seer_bulk_status- Bulk operations
Project Structure
seer/
├── seer-core/ # Core Rust library
│ └── src/
│ ├── lib.rs # Module exports
│ ├── error.rs # Error types
│ ├── lookup.rs # Smart lookup implementation
│ ├── bulk/ # Bulk operation executor
│ ├── dns/ # DNS resolver and propagation
│ ├── whois/ # WHOIS client and parser
│ ├── rdap/ # RDAP client
│ ├── status/ # Domain status checker
│ └── output/ # Output formatters
│
├── seer-cli/ # CLI application
│ └── src/
│ ├── main.rs # Entry point with clap commands
│ ├── display/ # Spinner and display utilities
│ └── repl/ # Interactive REPL
│
├── seer-py/ # Python bindings (PyO3)
│ ├── pyproject.toml # Maturin build config
│ └── src/lib.rs # Python module definitions
│
└── seer-api/ # FastAPI REST server + MCP
└── seer_api/
├── main.py # FastAPI app
├── routers/ # API endpoints
└── mcp/ # MCP server
Configuration
Environment Variables
| Variable | Description | Default |
|---|---|---|
RUST_LOG |
Logging level (trace, debug, info, warn, error) | - |
SEER_CORS_ORIGINS |
Comma-separated list of allowed CORS origins | * (all) |
Bulk Operations
Bulk operations support:
- Plain text files (one domain per line)
- Comments (lines starting with
#) - CSV files (uses first column)
Default concurrency: 10 (max: 50)
Supported DNS Record Types
A- IPv4 addressAAAA- IPv6 addressMX- Mail exchangeTXT- Text recordsNS- NameserverSOA- Start of authorityCNAME- Canonical nameCAA- Certification authority authorizationPTR- Pointer recordSRV- Service locatorDNSKEY- DNSSEC public keyDS- Delegation signer (DNSSEC)ANY- All available records
Global DNS Servers for Propagation Checks
Propagation checks query these nameservers:
- Google DNS (8.8.8.8, 8.8.4.4)
- Cloudflare DNS (1.1.1.1, 1.0.0.1)
- OpenDNS (208.67.222.222, 208.67.220.220)
- Quad9 (9.9.9.9)
- Level3 (4.2.2.1, 4.2.2.2)
- Comodo (8.26.56.26)
- DNS.Watch (84.200.69.80)
Development
Prerequisites
- Rust 1.70+
- Python 3.9+
- maturin (for Python bindings)
Building
# Build all Rust packages
# Build Python bindings
&&
# Install API package
&&
Running Tests
# Rust tests
# Python tests
&&
Logging
Enable debug logging:
RUST_LOG=debug
Technology Stack
Core (Rust)
- Tokio - Async runtime
- Reqwest - HTTP client
- Hickory-resolver - DNS resolution
- Serde - Serialization
Data Sources
- WHOIS server list sourced from WooMai/whois-servers (auto-synced with IANA Root Zone Database)
CLI
- Clap - Command-line parsing
- Rustyline - REPL line editing
- Indicatif - Progress indicators
- Colored - Terminal colors
Python
- PyO3 - Rust/Python bindings
- FastAPI - REST API framework
- Pydantic - Data validation
- MCP - Model Context Protocol
License
MIT License
Copyright (c) 2026 Zac Roach
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.