MCP tools reference¶
Available tools¶
MCP clients interact with the server through tool calls. In a conversational workflow, a prompt like "investigate example.com" or "find domains on this IP address" triggers the right tool automatically. Agents and automated pipelines can also call tools directly with structured parameters.
The server provides specialized tools organized into four categories. Each tool is optimized for specific use cases and returns a different subset of data.
How to read this reference: Each tool description below includes:
- Usage examples (in
textblocks) — natural language prompts that trigger the tool in conversational clients. Naming a specific tool (like "Use lookup_single to...") is optional but can help direct tool selection. - Input format (in
jsonblocks) — the structured parameters the client sends to the tool. Conversational clients construct these automatically; agents and integrations can build them directly. - Returns — fields included in the tool response.
Tool summary¶
Domain intelligence tools — domain lookups, risk scoring, and pivot searches:
| Tool | Input | Returns | Best for |
|---|---|---|---|
lookup_single |
Single domain | Full domain profile (risk, WHOIS, DNS, SSL, web, history, tags) | Deep investigation of one domain |
lookup_bulk |
Multiple domains (comma-separated) | Essential fields (risk, dates, tags, popularity) | Quick triage of domain lists |
import_hash |
Iris search hash | Same as lookup_bulk |
Continuing Iris Investigate web searches |
evaluate |
Pivot parameters | Same as lookup_bulk |
General connected-domain discovery |
infrastructure |
Pivot parameters | Infrastructure fields (IP, NS, MX, SOA, registrar) | Mapping hosting and DNS infrastructure |
registration |
Pivot parameters | Registration fields (WHOIS contacts, dates, status) | Identifying registrant patterns |
website |
Pivot parameters | Website fields (tracking codes, SSL, redirects, server) | Finding sites with shared web properties |
Passive DNS tools — historical DNS lookups and pattern searches:
| Tool | Input | Returns | Best for |
|---|---|---|---|
pdns_lookup_rrset |
Owner name (domain) | RRsets with rdata, bailiwick, timestamps | Historical DNS records for a domain |
pdns_lookup_rdata_name |
Hostname/domain in rdata | Records pointing to that name | Finding domains sharing DNS infrastructure |
pdns_lookup_rdata_ip |
IP address or CIDR range | Domains that resolved to that IP | IP-based infrastructure mapping |
pdns_flex_search |
Regex or glob pattern | Matching rrnames or rdata values | Large-scale threat hunting with patterns |
Domain history tools — tracking changes over time:
| Tool | Input | Returns | Best for |
|---|---|---|---|
registration_history |
Single domain | Registration change events with before/after states | Ownership and registrar changes |
infrastructure_history |
Single domain | Historical IP, nameserver, and mail server records | Tracking hosting migrations |
website_history |
Single domain | Historical SSL, redirects, server, and tracking codes | Website evolution over time |
registration_history_deep |
Single domain | Full historical WHOIS records | Deep WHOIS history (pre-2022 records) |
Understanding pivot tool parameters:
Pivot tools (evaluate, infrastructure, registration, website) accept a search_criteria object containing a primary search (a search_type and value pair) and optional secondary filters like tld, active, or create_date. Conversational clients build this structure automatically from your prompt. Agents and integrations can construct it directly.
For example, asking "find all .com domains hosted on IP 192.0.2.1" produces:
You can combine multiple filters: "find domains on IP 192.0.2.1 created after January 2026 with a risk score above 70." The client maps these to the appropriate secondary filters.
lookup_single - Full domain profile¶
Usage example:
Purpose: Retrieve a comprehensive threat intelligence profile for a single domain.
Example use case: Investigating a suspicious domain reported in a phishing incident
Input format:
Returns: Full domain profile including:
- Domain risk score and components
- Registration data (WHOIS/RDAP)
- DNS records (A, MX, NS)
- TLS/SSL certificate information
- Website metadata and tracking codes
- Historical data points
- Tags and classifications
Key fields in response:
domain_risk.risk_score: Overall risk assessment (0-100)active: Whether the domain is currently registered and resolvingcreate_date: Domain registration dateregistrant_contact: Registrant contact details (organization, country, email)registrant_org: Registrant organizationregistrar: Domain registrar nameip: Current IP addresses with ASN, country, and ISPname_server: Authoritative nameserversmx: Mail server recordsssl_info: TLS/SSL certificate detailswebsite_title: Website title tag contentga4,gtm_codes: Google Analytics 4 and Tag Manager codestags: Classification tagsdata_updated_timestamp: When the domain data was last refreshed
Note: The server removes fields like ga4, gtm_codes, and tags entirely from the response when no data is available for the queried domain. See Empty and null fields.
lookup_bulk - Quick domain assessment¶
Usage example:
Purpose: Rapid risk assessment for multiple domains with essential threat indicators.
Example use case: Checking a batch of domains extracted from email headers
List the domains in any format: "check suspicious1.com, suspicious2.net, and suspicious3.org." The client converts your list into the comma-separated format the tool expects.
Input format:
Returns: Essential risk fields for each domain:
domain: Domain nameactive: Registration and DNS statuscreate_date: Registration datefirst_seen: First observed by DomainToolspopularity_rank: Relative popularity rankingdomain_risk: Risk score and componentstags: Classification tags (omitted from response when unavailable — see Empty and null fields)
Performance notes:
- Optimized for speed with reduced dataset
- Accepts up to 100 domains per request
- Returns only the most actionable fields
import_hash - Resume saved searches¶
Usage example:
Purpose: Import domain lists from searches saved in the Iris Investigate web interface.
Example use case: Continuing an investigation started in the Iris Investigate web interface
How to get a search hash:
Search hashes are generated by the Iris Investigate web interface:
- Perform a search in Iris Investigate
- Click Search in the top menu
- Select Export
- Copy the search hash value
Input format:
Returns: Same fields as lookup_bulk (domain, active, create_date, first_seen, popularity_rank, domain_risk, tags)
Note: Only the Iris Investigate web interface generates search hashes. The MCP Server consumes them but doesn't generate them.
Error: An HTTP 400 response with the message "The search_hash parameter appears to be invalid" indicates the hash is malformed or expired. Generate a new hash from the Iris Investigate web interface.
evaluate - Find connected domains (general)¶
Usage example:
Purpose: Discover related domains through shared infrastructure, registration, or web characteristics. For deep investigation of a single domain without pivot parameters, use lookup_single instead.
Example use case: Finding domains on the same IP address
Supported search_type values:
- Domain/IP:
domains,ip,redirect_domain - DNS:
nameserver_host,nameserver_domain,nameserver_ip,mailserver_host,mailserver_domain,mailserver_ip - Registration:
registrant,registrant_org,registrar,email,email_domain,email_dns_soa,contact_name,contact_phone,contact_street,iana_id,whois - Historical:
historical_email,historical_registrant,historical_free_text - SSL/TLS:
ssl_common_name,ssl_issuer_common_name,ssl_org,ssl_subject,ssl_email,ssl_hash,ssl_alt_names,ssl_duration(integer: validity in days) - Web/Tracking:
website_title,server_type,adsense,google_analytics,ga4,google_tag_manager,facebook,hotjar,matomo,yandex_metrica,baidu_analytics,statcounter_project,statcounter_security - Tags:
tagged_with_any,tagged_with_all - Other:
search_hash
Optional secondary filters: tld, active, create_date, expiration_date, first_seen_since, first_seen_within, ip_country_code, risk_score, rank, ssl_not_before, ssl_not_after, not_tagged_with_any, not_tagged_with_all
Input format:
Returns: Same fields as lookup_bulk (domain, active, create_date, first_seen, popularity_rank, domain_risk, tags)
Additional examples:
infrastructure - Infrastructure-focused pivoting¶
Usage example:
Purpose: Find domains sharing infrastructure components with detailed DNS and hosting information.
Example use case: Mapping nameserver usage patterns
Supported search_type values and secondary filters: Same as evaluate tool
Input format:
{
"search_criteria": {
"primary": {"search_type": "nameserver_domain", "value": "ns.example.com"}
}
}
Returns: Infrastructure-specific fields:
domain: Domain nameactive: Registration and DNS statusfirst_seen: First observed by DomainToolsip: Current IP addresses, each with nestedasn,country_code, andispname_server: Nameserver hostnamesmx: Mail server recordssoa_email: DNS SOA email addressregistrar: Domain registrar
Difference from evaluate: Returns more detailed infrastructure fields (IP, ASN, ISP, NS, MX records) but omits general metadata like popularity rank and risk scores.
registration - Registration-focused pivoting¶
Usage example:
Purpose: Find domains with shared registration characteristics and WHOIS data.
Example use case: Finding domains registered by the same entity
Supported search_type values and secondary filters: Same as evaluate tool
Input format:
{
"search_criteria": {
"primary": {"search_type": "registrant_org", "value": "Example Corporation"}
}
}
Returns: Registration-specific fields:
domain: Domain nameactive: Registration and DNS statusfirst_seen: First observed by DomainToolscreate_date: Domain registration dateexpiration_date: Domain expiration dateemail_domain: Email domain from WHOISsoa_email: DNS SOA emailadditional_whois_email: Other emails in WHOISadmin_contact: Administrative contactbilling_contact: Billing contactregistrant_org: Registrant organizationtechnical_contact: Technical contactregistrar: Domain registrarregistrar_status: Domain status codes
Privacy note: WHOIS data respects GDPR and other privacy regulations. Some fields may be redacted based on registry policies.
website - Website-focused pivoting¶
Usage example:
Purpose: Find domains sharing web technologies, tracking codes, and website characteristics.
Example use case: Finding domains with the same Google Analytics code
Typical workflow: Use lookup_single on a domain to discover its tracking codes, then pivot with this tool using those codes to find related domains.
Additional example:
Supported search_type values and secondary filters: Same as evaluate tool
Input format:
Returns: Website-specific fields:
domain: Domain nameactive: Registration and DNS statusfirst_seen: First observed by DomainToolswebsite_response: HTTP response coderedirect: Redirect URLredirect_domain: Redirect target domainwebsite_title: Website title tagserver_type: Web server softwaressl_info: SSL certificate detailsssl_email: Email from SSL certificateadsense: Google AdSense codegoogle_analytics: Google Analytics (UA) codega4: Google Analytics 4 codesgtm_codes: Google Tag Manager codesfb_codes: Facebook/Meta tracking codeshotjar_codes: Hotjar tracking codesbaidu_codes: Baidu Analytics codesyandex_codes: Yandex Metrica codesmatomo_codes: Matomo tracking codesstatcounter_project_codes: StatCounter project codesstatcounter_security_codes: StatCounter security codes
Tracking code types supported:
- Google Analytics (UA and GA4)
- Google Tag Manager
- Google AdSense
- Facebook/Meta Pixel
- Hotjar
- Baidu Analytics
- Yandex Metrica
- Matomo
- StatCounter
pdns_lookup_rrset - Forward DNS lookup¶
Usage example:
Purpose: Forward lookup of DNS resource record sets (RRsets) by owner name. Returns complete record sets with all rdata values, bailiwick metadata, and observation timestamps.
Example use case: Discovering historical DNS records and subdomains for a domain under investigation
Input format:
Returns:
rrname: DNS owner namerrtype: Record type (A, AAAA, CNAME, MX, NS, etc.)rdata[]: Record data valuesbailiwick: DNS bailiwick (zone of authority)count: Number of times observedtime_first,time_last: First and last observation timestampszone_time_first,zone_time_last: Zone file observation timestamps
Optional parameters: rrtype, bailiwick, time_first_before, time_first_after, time_last_before, time_last_after, limit, offset, aggr
Wildcards: Use *.example.com for left-hand wildcards (slower) or www.example.* for right-hand wildcards (faster).
pdns_lookup_rdata_name - Inverse name lookup¶
Usage example:
Purpose: Inverse lookup that finds domains whose rdata contains a specific hostname or domain name. Returns individual records rather than full RRsets.
Example use case: Finding domains sharing a nameserver or mail server
Input format:
Returns:
rrname: DNS owner namerrtype: Record typerdata: Record data valuecount: Number of times observedtime_first,time_last: First and last observation timestampszone_time_first,zone_time_last: Zone file observation timestamps (when available)
Wildcards: Use .example.com (dot-prefix) for left-hand wildcards or www.example. (dot-suffix) for right-hand wildcards. Note: this differs from pdns_lookup_rrset, which uses * wildcards.
Optional parameters: rrtype, time_first_before, time_first_after, time_last_before, time_last_after, limit, offset, aggr
pdns_lookup_rdata_ip - Inverse IP lookup¶
Usage example:
Purpose: Inverse lookup that finds all domains that have pointed to specific IP addresses or CIDR ranges.
Example use case: Mapping all domains hosted on a suspicious IP address
Input format:
Returns: Same fields as pdns_lookup_rdata_name
IP formats supported: Single IP (192.0.2.1), CIDR prefix (192.0.2.0/24), or IP range (192.0.2.1-192.0.2.10). Also supports IPv6 addresses.
Optional parameters: time_first_before, time_first_after, time_last_before, time_last_after, limit, offset, aggr
pdns_flex_search - Pattern search¶
Usage example:
Purpose: Pattern-based passive DNS search using regex or glob expressions.
Example use case: Large-scale threat hunting for domains matching a suspicious pattern
Input format:
Search types: rrnames_regex, rrnames_glob, rdata_regex, rdata_glob
Returns (rrnames search): rrname, rrtype
Returns (rdata search): rdata, rrtype, raw_rdata
Flex search returns minimal metadata for pattern discovery. Use pdns_lookup_rrset or pdns_lookup_rdata_name on individual results to get full temporal data (count, time_first, time_last).
Optional parameters: rrtype, exclude (filter out matches), time_first_before, time_first_after, time_last_before, time_last_after, limit, offset
registration_history - Registration changes¶
Usage example:
Purpose: Retrieve a timestamped record of changes to a domain's registration data, including ownership transfers and registrar changes.
Example use case: Tracking when a domain changed hands or switched registrars
Input format:
Returns: The response includes domain, count (total number of changes), and a changes array. Each change event contains:
timestamp: When the change was detectedfield: Which field changedbefore/after: The field's state before and after the change
Tracked fields: create_date, expiration_date, registrant, registrar, registrar_status, active, admin_contact, billing_contact, registrant_contact, technical_contact.
Data coverage: This tool tracks changes beginning January 1, 2022. For older registration records, use registration_history_deep.
Pagination: Results are paginated with page_size (default 50, max 100) and offset (0-indexed).
infrastructure_history - Infrastructure changes¶
Usage example:
Purpose: Retrieve a timestamped record of changes to a domain's infrastructure, including IP addresses, nameservers, and mail servers.
Example use case: Tracking hosting migrations and nameserver changes over time
Input format:
Returns: The response includes domain, count (total number of changes), and a changes array. Each change event contains:
timestamp: When the change was detectedfield: Which field changed (for example,ip,mx,name_server)before/after: The field's state before and after the change
Change events use these field values: ip (each entry contains address, asn, country_code, isp), name_server (each entry contains host, ip), mx (each entry contains host, ip, priority).
Data coverage: This tool tracks infrastructure changes from January 1, 2022 onward. Earlier infrastructure data isn't available through the MCP Server.
Pagination: Results are paginated with page_size (default 50, max 100) and offset (0-indexed).
website_history - Website changes¶
Usage example:
Purpose: Retrieve a timestamped record of changes to a domain's web presence, including SSL certificates, redirects, server software, and tracking codes.
Example use case: Investigating how a compromised website changed over time
Input format:
Returns: The response includes domain, count (total number of changes), and a changes array. Each change event contains:
timestamp: When the change was detectedfield: Which field changed (for example,ssl_info,website_title,server_type)before/after: The field's state before and after the change
Change events use these field values:
ssl_info: Each entry containshash,common_name,alt_names,subject,issuer_common_name,not_before,not_after,duration,email- Content:
redirect,redirect_domain,screenshot_collected_timestamp,server_type,website_response,website_title - Tracking codes:
google_analytics,ga4,google_tag_manager,facebook,hotjar,matomo,yandex_metrica,baidu_analytics,statcounter_project,statcounter_security,adsense
Data coverage: This tool tracks website changes from January 1, 2022 onward. Earlier website data isn't available through the MCP Server.
Pagination: Results are paginated with page_size (default 50, max 100) and offset (0-indexed).
registration_history_deep - Deep WHOIS history¶
Usage example:
Purpose: Retrieve historical WHOIS registration records, including records older than those available from registration_history (which begins at January 2022).
Example use case: Investigating the original registrant of a domain or changes predating 2022
Input format:
Returns: The response includes record_count (total historical records) and a history array. Each record contains:
date: Record timestampis_private: Whether WHOIS privacy was active (0 = public, 1 = redacted)whois: Parsed WHOIS data containing:registrant: Registrant nameregistration: Object withcreated,expires,updated,registrar,statusesname_servers: Nameservers at time of recordrecord: Raw WHOIS text
Optional parameters:
sort:date_ascordate_desc(default) — controls record orderinglimit: Maximum records per request (1-100, default 100)offset: Number of records to skip for pagination (0-indexed)mode:list(default) returns records,countreturns only the record count,check_existencereturns whether the domain exists in the databaseformat: Response format —json(default),xml, orhtml
Example workflows¶
These examples show how to chain tools for multi-step investigations. In a conversational workflow, describe each step and the client selects the tools and carries context forward. Agents can chain these tools programmatically.
Investigate a domain and find related infrastructure¶
Start with a suspicious domain, discover its tracking codes, and pivot to find other domains using the same codes.
The response includes tracking codes (ga4, gtm_codes, adsense), SSL certificates, and nameservers. Pivot on a shared identifier:
Tools used: lookup_single → website → lookup_bulk
Map infrastructure from an IP address¶
Identify all domains associated with a suspicious IP address using both domain lookup and passive DNS tools, then triage by risk.
Step 3: Use infrastructure to find active domains currently hosted on that IP, and show their nameservers and registrar
Step 4: Use lookup_bulk to assess risk scores for the domains you found — focus on any with a risk score above 70
Prioritize high-risk domains. Domains sharing an IP with low risk scores and high popularity ranks are likely co-tenants on shared hosting and can usually be deprioritized.
Tools used: lookup_single → pdns_lookup_rdata_ip + infrastructure → lookup_bulk
Hunt for typosquatting or DGA domains¶
Proactively search for suspicious domains matching a pattern, then triage the results with lookup_bulk.
Filter the matches for suspicious names, then get full DNS details for the strongest candidates:
Newly created domains with high risk scores and shared infrastructure are the strongest candidates for typosquatting campaigns.
Tools used: pdns_flex_search → pdns_lookup_rrset → lookup_bulk
Understand results¶
The server returns structured JSON data. In conversational clients, the model interprets these results and presents them in a readable format. This section explains the underlying data structures.
Risk score interpretation¶
See the Domain Risk Score user guide for more information.
Domain risk scores range from 0 (lowest risk) to 100 (highest risk):
| Score | Description |
|---|---|
| 100 | Blocklisted — known-bad, includes sinkholed domains |
| 90-99 | Strong confidence in near-term weaponization |
| 70-89 | Default investigation significance threshold |
| 50-69 | May require attention depending on security posture |
| 1-49 | Very little evidence of malicious intent |
| 0 | Zero-listed — no evidence of malicious registration |
Risk scores include components that explain the assessment:
- proximity: Observed closeness to known-malicious infrastructure
- threat_profile_phishing: Phishing-specific ML classifier
- threat_profile_malware: Malware-specific ML classifier
- threat_profile_spam: Spam-specific ML classifier
Pivot counts in lookup_single¶
lookup_single returns fields in {value, count} format, where count indicates how many other domains share that exact value (excludes the queried domain):
Use pivot counts to guide your next investigation step:
- Low count (1-50): Strong signal — a rare, high-confidence connection worth pivoting on
- High count (500+): Common value (shared hosting, popular provider) — usually not worth pivoting on
- Count of 1: Unique to the queried domain
All other domain intelligence tools (lookup_bulk, import_hash, evaluate, infrastructure, registration, website) return flattened values with pivot counts removed to keep responses compact.
Empty and null fields¶
The server removes fields entirely from a response when they are empty or null at query time. This reduces token usage and keeps responses focused on available data.
If a field documented in this reference doesn't appear in a response, it means no data was available for that field — not that the tool doesn't support it. For example:
- A domain without Google Analytics won't include
ga4in the response. - A domain without classification data won't include
tags. - Privacy-protected WHOIS may omit registrant contact fields.
- Inactive domains may lack current DNS records.