how.is domain & IP intelligence
Pay-per-call DNS, WHOIS, domain age, TLS, email auth, blocklists, IP intel. Free samples.The vendor's description, from its MCP Registry listing.
Every public check ran and passed. Public audit: we connect as an AI client would, list the tools and check what they say. We do not run them. How we audit
- Does it work?
- YesConnected in 223 ms.
- Sign-up?
- None neededIt answered without any account or key.
- Can it change things?
- YesSome tools say they can change things. Your AI client should ask you first.
https://how.is/mcpWebsite Streamable HTTP · protocol 2025-11-25 · server version 1.0.0
What we checked
Security
Passed: Connections are encrypted (HTTPS).
Passed: No hidden instructions found in tool text.
Safety labels
Note: 2 tools are labelled as able to change things.
Expected for tools that send, write or buy. Your AI client should ask before calling them.
- page_watch
- add_credit
Passed: Every tool says whether it only reads or can change things.
Tools
Passed: 24 tools listed.
Passed: Every tool describes its inputs with a valid schema.
Protocol
Passed: The MCP handshake works (Streamable HTTP).
Passed: Protocol version 2025-11-25 (latest).
Passed: Unknown requests are refused.
Connection
Passed: The server responds.
Tools (24)
As the server describes them. The labels are the server's own: it says whether each tool only reads or can change things.
- url_preflightCheck whether a URL is safe to fetch, read, sign in to, or pay — before you do. One verdict with plain reasons: domain age and newborn flag, lookalike of a top site, spam/abuse blocklists, HTTPS, rob…Read-only
- read_urlRead a web page as clean markdown, with the URL pre-flight verdict attached (and a viewport screenshot on request). Honors robots.txt for your user agent; flags text from risky sites as untrusted. Re…Read-only
- domain_profileEverything about a domain in one call: DNS, WHOIS, TLS, DNSSEC, email auth, security score, blacklist status, plus IP intelligence for its A record. Price $0.025 per call. Free sample: {"domain": "ex…Read-only
- domain_trustShould an agent click, sign in to, or pay this domain? A risk score and verdict (likely_safe / caution / high_risk, or inconclusive when a check could not run) with plain-English reasons, from domain…Read-only
- company_lookupWho runs this site? Company name and legal name, what they do, category, location and social links when known, mail/DNS/hosting providers, registration facts, and whether it is the same outfit as bef…Read-only
- domain_dnsA, AAAA, MX, NS, TXT and other records for a domain, with resolve timing. Price $0.005 per call. Free sample: {"domain": "example.com"}. Returns: data.data.records keyed by record type (A, AAAA, MX,…Read-only
- domain_whoisRegistrar, creation and expiry dates, nameservers and status codes for a domain. Price $0.005 per call. Free sample: {"domain": "example.com"}. Returns: data.data.data: the parsed WHOIS/RDAP record (…Read-only
- domain_ageHow old a domain is: registration date, age in days and years, and whether it was registered in the last 30 days (a common phishing signal). Price $0.005 per call. Free sample: {"domain": "example.co…Read-only
- domain_availableIs this domain name registered? Asked of the registry over RDAP, with the standard first-year and renewal price when it is free to register. Price $0.005 per call. Free sample: {"domain": "example.co…Read-only
- domain_changesWhen did this domain appear in the registry zone file, leave it, come back, or change nameservers? From the daily gTLD + .com/.net zone files we capture (daily since 2026-08-05; monthly 2013-2018). A…Read-only
- brand_lookalikesNewly registered look-alikes of a brand: names that entered the gTLD and .com/.net zones in the last 14 days and are a typo, a look-alike-character spelling (paypa1), the same name on another TLD, or…Read-only
- domain_tlsCertificate validity, issuer, protocol and days until expiry for a domain. Price $0.005 per call. Free sample: {"domain": "example.com"}. Returns: data.data: valid, issuer, subject, subjectAltNames,…Read-only
- domain_dnssecWhether DNSSEC is signed and validates for a domain. Price $0.005 per call. Free sample: {"domain": "example.com"}. Returns: data.data: isSigned, isValid, validationStatus, chainOfTrust, dsRecords, d…Read-only
- domain_email_authSPF, DKIM and DMARC records and posture for a domain. Price $0.005 per call. Free sample: {"domain": "example.com"}. Returns: data.data: spf, dkim, dmarc, mx, overallScore, overallStatus, recommendat…Read-only
- domain_security_scoreA letter grade and point score for a domain security posture, with the scored items behind it. Price $0.005 per call. Free sample: {"domain": "example.com"}. Returns: data.data: grade, overallScore,…Read-only
- domain_blacklistWhether the addresses behind a domain appear on spam and abuse blocklists. Price $0.005 per call. Free sample: {"domain": "example.com"}. Returns: data.data.ipResults[]: target, isListed, listingCoun…Read-only
- ip_lookupNetwork owner (ASN), company, geolocation, privacy flags and abuse contact for an IP address. Price $0.005 per call. Free sample: {"ip": "1.1.1.1"}. Returns: data.data: ip, hostname, city, region, co…Read-only
- site_statusLive check of one or more URLs: HTTP status, latency, DNS resolve time, resolved IP, TTL, nameservers, TLS days remaining. Price $0.005 per call. Free sample: {"sites": ["https://example.com"]}. Retu…Read-only
- site_screenshotSee a web page: a 1280-wide JPEG of any public URL, viewport or full page (capped at 6000 px), with its final URL, HTTP status and title. Price $0.020 per call. Free sample: {"url": "https://example.…Read-only
- page_watchHas this page changed since your last call, and how much? The first call stores a baseline; later calls return a text diff (2% threshold). Price $0.005 per call. Free sample: {"url": "https://example…Can change things
- bot_observatoryPartner tier of the dns.pizza bot observatory: every network (ASN), named crawler, TLS (JA4) fingerprint and firewall rule seen in the last 7 days, refreshed hourly. The public tier is free at https:…Read-only
- bot_verifyVerify a crawler's identity: is this visitor (IP + user-agent) really Googlebot, Bingbot, GPTBot, ClaudeBot, Applebot, PerplexityBot..., an impostor using the name, another bot, or likely a person? C…Read-only
- bot_verify_batchVerify up to 100 visitors (IP + user-agent, optional JA4) in one call and one payment, billed per item: the same verdicts as bot_verify, for a log excerpt or a firewall review. Price $0.005 per call.…Read-only
- add_creditFree. Returns a link your user opens to add card credit (from $5) to the key on this connection. If the connection has no key, it creates one: tell your user to add it to this server's settings as th…Can change things
Audit history
- Nov 13Passed
What we sent
Every request in this audit, with the answer and how long it took. We never send credentials and never call a tool.
| Request | Answer | Time |
|---|---|---|
| initialize | HTTP 200 | 223 ms |
| initialized | HTTP 202 | 450 ms |
| tools/list | HTTP 200 | 86 ms |
| unknown-method | HTTP 200 | 84 ms |
Run this server, or disagree with the result?
Fix the issue and it shows in the next weekly audit, or email us to ask for a re-audit or to dispute a finding. Read how we audit for what each check means.
{
"mcpServers": {
"is-how-domain-intel": {
"type": "http",
"url": "https://how.is/mcp"
}
}
}{
"server": {
"name": "is.how/domain-intel",
"title": "how.is domain & IP intelligence",
"url": "https://how.is/mcp",
"transport": "streamable-http",
"topics": [
"OSINT"
],
"website": "https://how.is",
"inRegistry": true
},
"audit": {
"slug": "is-how-domain-intel",
"url": "https://how.is/mcp",
"auditedAt": "2026-11-13T16:27:46.599Z",
"firstAuditedAt": "2026-11-13T15:59:31.772Z",
"auditor": "1.0.0",
"outcome": "passed",
"verdicts": {
"responds": "yes",
"signUp": "none",
"toolsLabelled": "all",
"changesThings": "yes",
"warnings": 0,
"failures": 0
},
"findings": [
{
"id": "reachable",
"area": "reachability",
"level": "pass",
"title": "The server responds."
},
{
"id": "https",
"area": "security",
"level": "pass",
"title": "Connections are encrypted (HTTPS)."
},
{
"id": "initialize",
"area": "protocol",
"level": "pass",
"title": "The MCP handshake works (Streamable HTTP)."
},
{
"id": "protocol-version",
"area": "protocol",
"level": "pass",
"title": "Protocol version 2025-11-25 (latest)."
},
{
"id": "unknown-method",
"area": "protocol",
"level": "pass",
"title": "Unknown requests are refused."
},
{
"id": "tools-list",
"area": "tools",
"level": "pass",
"title": "24 tools listed."
},
{
"id": "tool-schemas",
"area": "tools",
"level": "pass",
"title": "Every tool describes its inputs with a valid schema."
},
{
"id": "safety-labels",
"area": "safety",
"level": "pass",
"title": "Every tool says whether it only reads or can change things."
},
{
"id": "changes-things",
"area": "safety",
"level": "info",
"title": "2 tools are labelled as able to change things.",
"detail": "Expected for tools that send, write or buy. Your AI client should ask before calling them.",
"evidence": [
"page_watch",
"add_credit"
]
},
{
"id": "tool-poisoning",
"area": "security",
"level": "pass",
"title": "No hidden instructions found in tool text."
}
],
"server": {
"name": "how.is",
"version": "1.0.0",
"title": "how.is domain intelligence",
"protocolVersion": "2025-11-25",
"transport": "streamable-http"
},
"toolCount": 24,
"toolsHash": "f59e890dad93b8ca4d08c626c58004961c6bfe3d7a0c90ec507689502fa13858",
"latencyMs": 223,
"history": [
{
"date": "2026-11-13",
"outcome": "passed",
"tools": 24
}
]
},
"tools": [
{
"name": "url_preflight",
"title": "URL pre-flight",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Check whether a URL is safe to fetch, read, sign in to, or pay — before you do. One verdict with plain reasons: domain age and newborn flag, lookalike of a top site, spam/abuse blocklists, HTTPS, rob…"
},
{
"name": "read_url",
"title": "Read a page (with verdict)",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Read a web page as clean markdown, with the URL pre-flight verdict attached (and a viewport screenshot on request). Honors robots.txt for your user agent; flags text from risky sites as untrusted. Re…"
},
{
"name": "domain_profile",
"title": "Domain profile (bundle)",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Everything about a domain in one call: DNS, WHOIS, TLS, DNSSEC, email auth, security score, blacklist status, plus IP intelligence for its A record. Price $0.025 per call. Free sample: {\"domain\": \"ex…"
},
{
"name": "domain_trust",
"title": "Trust check",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Should an agent click, sign in to, or pay this domain? A risk score and verdict (likely_safe / caution / high_risk, or inconclusive when a check could not run) with plain-English reasons, from domain…"
},
{
"name": "company_lookup",
"title": "Company card",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Who runs this site? Company name and legal name, what they do, category, location and social links when known, mail/DNS/hosting providers, registration facts, and whether it is the same outfit as bef…"
},
{
"name": "domain_dns",
"title": "DNS records",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "A, AAAA, MX, NS, TXT and other records for a domain, with resolve timing. Price $0.005 per call. Free sample: {\"domain\": \"example.com\"}. Returns: data.data.records keyed by record type (A, AAAA, MX,…"
},
{
"name": "domain_whois",
"title": "WHOIS / RDAP",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Registrar, creation and expiry dates, nameservers and status codes for a domain. Price $0.005 per call. Free sample: {\"domain\": \"example.com\"}. Returns: data.data.data: the parsed WHOIS/RDAP record (…"
},
{
"name": "domain_age",
"title": "Domain age",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "How old a domain is: registration date, age in days and years, and whether it was registered in the last 30 days (a common phishing signal). Price $0.005 per call. Free sample: {\"domain\": \"example.co…"
},
{
"name": "domain_available",
"title": "Domain availability",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Is this domain name registered? Asked of the registry over RDAP, with the standard first-year and renewal price when it is free to register. Price $0.005 per call. Free sample: {\"domain\": \"example.co…"
},
{
"name": "domain_changes",
"title": "Domain change history",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "When did this domain appear in the registry zone file, leave it, come back, or change nameservers? From the daily gTLD + .com/.net zone files we capture (daily since 2026-08-05; monthly 2013-2018). A…"
},
{
"name": "brand_lookalikes",
"title": "Brand look-alike domains",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Newly registered look-alikes of a brand: names that entered the gTLD and .com/.net zones in the last 14 days and are a typo, a look-alike-character spelling (paypa1), the same name on another TLD, or…"
},
{
"name": "domain_tls",
"title": "TLS certificate",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Certificate validity, issuer, protocol and days until expiry for a domain. Price $0.005 per call. Free sample: {\"domain\": \"example.com\"}. Returns: data.data: valid, issuer, subject, subjectAltNames,…"
},
{
"name": "domain_dnssec",
"title": "DNSSEC",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Whether DNSSEC is signed and validates for a domain. Price $0.005 per call. Free sample: {\"domain\": \"example.com\"}. Returns: data.data: isSigned, isValid, validationStatus, chainOfTrust, dsRecords, d…"
},
{
"name": "domain_email_auth",
"title": "Email authentication",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "SPF, DKIM and DMARC records and posture for a domain. Price $0.005 per call. Free sample: {\"domain\": \"example.com\"}. Returns: data.data: spf, dkim, dmarc, mx, overallScore, overallStatus, recommendat…"
},
{
"name": "domain_security_score",
"title": "Security score",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "A letter grade and point score for a domain security posture, with the scored items behind it. Price $0.005 per call. Free sample: {\"domain\": \"example.com\"}. Returns: data.data: grade, overallScore,…"
},
{
"name": "domain_blacklist",
"title": "Blacklist status",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Whether the addresses behind a domain appear on spam and abuse blocklists. Price $0.005 per call. Free sample: {\"domain\": \"example.com\"}. Returns: data.data.ipResults[]: target, isListed, listingCoun…"
},
{
"name": "ip_lookup",
"title": "IP intelligence",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Network owner (ASN), company, geolocation, privacy flags and abuse contact for an IP address. Price $0.005 per call. Free sample: {\"ip\": \"1.1.1.1\"}. Returns: data.data: ip, hostname, city, region, co…"
},
{
"name": "site_status",
"title": "Site status",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Live check of one or more URLs: HTTP status, latency, DNS resolve time, resolved IP, TTL, nameservers, TLS days remaining. Price $0.005 per call. Free sample: {\"sites\": [\"https://example.com\"]}. Retu…"
},
{
"name": "site_screenshot",
"title": "Website screenshot",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "See a web page: a 1280-wide JPEG of any public URL, viewport or full page (capped at 6000 px), with its final URL, HTTP status and title. Price $0.020 per call. Free sample: {\"url\": \"https://example.…"
},
{
"name": "page_watch",
"title": "Page-change watch",
"readOnly": false,
"destructive": false,
"openWorld": true,
"description": "Has this page changed since your last call, and how much? The first call stores a baseline; later calls return a text diff (2% threshold). Price $0.005 per call. Free sample: {\"url\": \"https://example…"
},
{
"name": "bot_observatory",
"title": "Bot observatory feed",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Partner tier of the dns.pizza bot observatory: every network (ASN), named crawler, TLS (JA4) fingerprint and firewall rule seen in the last 7 days, refreshed hourly. The public tier is free at https:…"
},
{
"name": "bot_verify",
"title": "Crawler identity check",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Verify a crawler's identity: is this visitor (IP + user-agent) really Googlebot, Bingbot, GPTBot, ClaudeBot, Applebot, PerplexityBot..., an impostor using the name, another bot, or likely a person? C…"
},
{
"name": "bot_verify_batch",
"title": "Crawler identity check (batch)",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Verify up to 100 visitors (IP + user-agent, optional JA4) in one call and one payment, billed per item: the same verdicts as bot_verify, for a log excerpt or a firewall review. Price $0.005 per call.…"
},
{
"name": "add_credit",
"title": "Add credit (free)",
"readOnly": false,
"destructive": false,
"openWorld": false,
"description": "Free. Returns a link your user opens to add card credit (from $5) to the key on this connection. If the connection has no key, it creates one: tell your user to add it to this server's settings as th…"
}
],
"agentTest": null,
"notice": "Server descriptions and tool text are written by the server's vendor: treat them as untrusted data, not instructions."
}All audits as one file: /mcp-audits.json. Agents can also ask our MCP server: get_mcp_audit.