29 pay-per-call DNS, SEO, SSL, security, WHOIS, mail, and AI tools for AI agents. x402, no API key.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Score how ready a website is for AI agents and LLM-driven discovery, 0-100 with a letter grade: robots.txt presence, explicit AI-crawler policy (GPTBot, ClaudeBot, CCBot, PerplexityBot, and 8 more), llms.txt presence and structure, structured data (JSON-LD) and Open Graph basics, agent/payment discovery files (/.well-known/x402, /openapi.json), sitemap presence, and title/meta basics. The bundle to run before/after making a site agent-friendly — for raw robots/sitemap contents only, use check_robots_sitemap; for classic search SEO only, use seo_audit.
Any URL on the site to audit (origin is derived from it)
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Score how ready a website is for AI agents and LLM-driven discovery, 0-100 with a letter grade: robots.txt presence, explicit AI-crawler policy (GPTBot, ClaudeBot, CCBot, PerplexityBot, and 8 more), llms.txt presence and structure, structured data (JSON-LD) and Open Graph basics, agent/payment discovery files (/.well-known/x402, /openapi.json), sitemap presence, and title/meta basics. The bundle to run before/after making a site agent-friendly — for raw robots/sitemap contents only, use check_robots_sitemap; for classic search SEO only, use seo_audit.
| Argument | Type | Description |
|---|---|---|
| url* | string | Any URL on the site to audit (origin is derived from it) |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Any URL on the site to audit (origin is derived from it)"
}
}
}Find broken links two ways. Default (crawl mode): crawl a site starting from a URL (same-origin pages only, bounded by maxPages) and check every linked URL for broken status codes, returning each broken link with the page(s) it was found on. Sitemap mode (viaSitemap: true): parse the site's sitemap.xml (following one level of sitemap-index nesting) and check the status of every URL listed in it instead. Note: some external sites (e.g. social platforms) block automated HEAD/GET requests and may show up as false positives.
| Argument | Type | Description |
|---|---|---|
| url* | string | Starting URL to crawl — or, in sitemap mode, the sitemap.xml URL or any page URL on the site |
| maxPages | number | Max same-origin pages to crawl in crawl mode (default 20, capped at 50) |
| viaSitemap | boolean | Check the URLs listed in the site's sitemap.xml instead of crawling pages (default false) |
| checkExternal | boolean | Crawl mode only: also check links pointing off-site (default true; crawling never follows off-site links) |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Starting URL to crawl — or, in sitemap mode, the sitemap.xml URL or any page URL on the site"
},
"maxPages": {
"type": "number",
"description": "Max same-origin pages to crawl in crawl mode (default 20, capped at 50)"
},
"viaSitemap": {
"type": "boolean",
"description": "Check the URLs listed in the site's sitemap.xml instead of crawling pages (default false)"
},
"checkExternal": {
"type": "boolean",
"description": "Crawl mode only: also check links pointing off-site (default true; crawling never follows off-site links)"
}
}
}TCP-connect scan a host for open ports, plus network intel on the host's resolved IPs (ASN, network owner, BGP prefix, country — via Team Cymru). Defaults to a list of ~20 common service ports (SSH, HTTP/S, mail, DBs, etc.) if none are given. For checking your own infrastructure's exposure — capped at 100 ports per call.
| Argument | Type | Description |
|---|---|---|
| host* | string | Hostname or IP to scan (no scheme) |
| ports | array | Specific ports to check. Defaults to a common-ports list. Max 100 ports per call. |
{
"type": "object",
"required": [
"host"
],
"properties": {
"host": {
"type": "string",
"description": "Hostname or IP to scan (no scheme)"
},
"ports": {
"type": "array",
"items": {
"type": "number"
},
"description": "Specific ports to check. Defaults to a common-ports list. Max 100 ports per call."
}
}
}Check a site's robots.txt and sitemap.xml in one call: raw contents (truncated), sitemap presence, an AI-crawler policy analysis (explicit rules for GPTBot, ClaudeBot, CCBot, PerplexityBot, Google-Extended, Bytespider, Amazonbot and other AI crawlers, vs wildcard/default), and llms.txt presence. For a scored, whole-site AI-readiness report use ai_readiness_audit instead.
| Argument | Type | Description |
|---|---|---|
| url* | string | Any URL on the site to check (origin is derived from it) |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Any URL on the site to check (origin is derived from it)"
}
}
}Query a DNS record for a domain against several major public resolvers (Google, Cloudflare, Quad9, OpenDNS) in parallel and compare the answers. Flags mismatches, which usually mean propagation is still in progress after a DNS change.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Bare domain to query, e.g. example.com |
| recordType | string | Record type: A, AAAA, MX, TXT, NS, or CNAME (default A) |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Bare domain to query, e.g. example.com"
},
"recordType": {
"type": "string",
"description": "Record type: A, AAAA, MX, TXT, NS, or CNAME (default A)"
}
}
}Check whether a domain is registered, plus scan common typo-squat variants (adjacent-key substitution, letter omission/doubling, transposition) across popular TLDs (.com, .net, .org, .io, .co, .ai, .app, .dev) for brand-protection or domain-flipping research. WHOIS-based; capped at 40 variants checked per call for latency.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Bare domain to check, e.g. example.com |
| checkSquats | boolean | Also scan typo-squat variants (default true) |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Bare domain to check, e.g. example.com"
},
"checkSquats": {
"type": "boolean",
"description": "Also scan typo-squat variants (default true)"
}
}
}Check a domain's registration expiry (via WHOIS) and DNS health: nameservers, A/AAAA, MX, SPF, and DMARC records. Flags common misconfigurations. WHOIS + DNS only — for the WHOIS record alone use whois_lookup; for deliverability detail (DKIM, DNSBL, PTR) use email_deliverability_check; for all of it plus SEO in one report use domain_report.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Bare domain to check, e.g. example.com (no scheme/path) |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Bare domain to check, e.g. example.com (no scheme/path)"
}
}
}Bundle: runs seo_audit, domain_health_check (WHOIS + DNS: nameservers, A/AAAA, MX, SPF, DMARC), and email_deliverability_check (DKIM, SPF lookup-count, DMARC strength, DNSBL) against a domain in one call, one charge. Cheaper than calling the three tools separately. Each sub-check reports independently, so a failure in one doesn't void the others.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Bare domain to report on, e.g. example.com (no scheme/path) |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Bare domain to report on, e.g. example.com (no scheme/path)"
}
}
}Validate a single email address: RFC syntax check, MX record lookup on the domain, disposable/temporary-email-provider detection, and role-account detection (info@, admin@, etc.). Per-address check — different from email_deliverability_check, which audits a whole domain's sending reputation (SPF/DKIM/DMARC/PTR/DNSBL).
| Argument | Type | Description |
|---|---|---|
| email* | string | Email address to validate |
{
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Email address to validate"
}
}
}Deep-dive email deliverability check for a domain: MX records + reverse-DNS (PTR) on each MX host, common DKIM selector probing, SPF lookup-count (RFC 7208 caps at 10), DMARC policy strength, and DNSBL blacklist lookups (Spamhaus Zen, SpamCop, Barracuda) on MX IPs. Note: public-resolver DNSBL queries are frequently rate-limited or blocked by Spamhaus, so a `listed: null` result means "unknown", not "clean" — treat null results as inconclusive, not as a clean bill of health.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Bare domain to check, e.g. example.com |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Bare domain to check, e.g. example.com"
}
}
}Probe a site for publicly exposed sensitive files attackers scan for: /.env and variants, /.git/config and /.git/HEAD, /.svn/entries, docker-compose files, /.aws/credentials, /.ssh/id_rsa, database dumps (backup.sql, db.sql, dump.sql), backup archives, phpinfo pages, .DS_Store, and similar. Reports ONLY reachability metadata (path, status, content type, size) — file contents are never returned or stored. A random-nonexistent-path baseline filters out SPA/catch-all false positives. For auditing your own sites' exposure.
| Argument | Type | Description |
|---|---|---|
| url* | string | Any URL on the site to probe (origin is derived from it) |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Any URL on the site to probe (origin is derived from it)"
}
}
}Check a GitHub repository's health signals: stars, forks, open issues, license, archived/disabled status, and days since last push. Flags likely-abandoned or unlicensed repos. Useful before depending on a repo.
| Argument | Type | Description |
|---|---|---|
| repo* | string | Repository name |
| owner* | string | Repository owner (user or org) |
{
"type": "object",
"required": [
"owner",
"repo"
],
"properties": {
"repo": {
"type": "string",
"description": "Repository name"
},
"owner": {
"type": "string",
"description": "Repository owner (user or org)"
}
}
}Probe a remote MCP server end-to-end: performs the initialize handshake, captures server info and protocol version, lists its tools, and grades tool-quality the way directories like Glama do — description coverage and depth, input-schema completeness, and naming consistency — with a 0-100 score, letter grade, and per-tool detail. Use it to vet an MCP server before connecting an agent (or paying per call) to it.
| Argument | Type | Description |
|---|---|---|
| url* | string | The MCP server endpoint URL, e.g. https://example.com/mcp |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The MCP server endpoint URL, e.g. https://example.com/mcp"
}
}
}Look up a package (optionally pinned to a version) against OSV.dev's aggregated vulnerability database (GitHub Advisories, PyPA, RustSec, Go vuln DB, etc.) for known CVEs/advisories. Supports npm, PyPI, crates.io, RubyGems, Go, Maven, NuGet, and Packagist ecosystems. Useful before adding a dependency.
| Argument | Type | Description |
|---|---|---|
| name* | string | Package name |
| version | string | Optional exact version to check; omit to check the package generally |
| ecosystem* | string | Package ecosystem |
{
"type": "object",
"required": [
"ecosystem",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Package name"
},
"version": {
"type": "string",
"description": "Optional exact version to check; omit to check the package generally"
},
"ecosystem": {
"enum": [
"npm",
"pypi",
"cargo",
"rubygems",
"go",
"maven",
"nuget",
"packagist"
],
"type": "string",
"description": "Package ecosystem"
}
}
}Fetch a URL and measure time-to-first-byte, total fetch time, and response size from this server. Flags missing compression, missing Cache-Control, oversized payloads, and slow TTFB. Lightweight raw-timing check — for Google Lighthouse scores, Core Web Vitals, and real-user field data use pagespeed_insights instead.
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to measure |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to measure"
}
}
}Run Google's real PageSpeed Insights (Lighthouse + Chrome UX Report) against a URL: performance score, Core Web Vitals (LCP, CLS, INP/TBT), and real-user field data where available. The authoritative, Google-measured score — for a quick raw TTFB/size timing check from this server use page_performance_check instead. Works without an API key at low volume; set GOOGLE_PAGESPEED_API_KEY server-side for higher throughput.
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to test |
| strategy | string | Device strategy (default mobile) |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to test"
},
"strategy": {
"enum": [
"mobile",
"desktop"
],
"type": "string",
"description": "Device strategy (default mobile)"
}
}
}Follow a URL through every HTTP redirect hop and report the full chain, final destination, and issues like redirect loops, too many hops, or HTTPS-to-HTTP downgrades.
| Argument | Type | Description |
|---|---|---|
| url* | string | The starting URL to trace |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The starting URL to trace"
}
}
}Check a URL against Google Safe Browsing's malware/phishing/unwanted-software/PUA blocklists. Requires GOOGLE_SAFE_BROWSING_API_KEY to be configured server-side (free Google Cloud API key).
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to check |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to check"
}
}
}Fetch a URL and audit its response headers in one pass: security headers (HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy) with a score, PLUS its CORS policy (the probe sends a foreign Origin header and flags wildcard-origin + credentials combinations and arbitrary-origin reflection). Header-level checks on a single response — for server/TLS-level checks use ssl_cert_check or ssl_labs_grade instead.
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to audit |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to audit"
}
}
}Fetch a URL and run a full on-page SEO audit: title/meta description length, canonical tag, Open Graph + Twitter Card tags, html lang attribute, viewport meta, heading structure, image alt-text coverage, internal/external link counts and generic-anchor-text detection, robots meta (noindex/nofollow), structured data (JSON-LD) presence, robots.txt/sitemap.xml presence, and site chrome (favicon, apple-touch-icon, web app manifest, theme-color). Whole-page audit — for raw extracted data only use structured_data_extract, for the platform/framework use tech_stack_fingerprint.
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to audit |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to audit"
}
}
}Live-probe a mail server over SMTP: connects to port 25 (or a given port), reads the banner, issues EHLO and lists advertised capabilities (STARTTLS, AUTH mechanisms, SIZE, 8BITMIME, PIPELINING), then upgrades via STARTTLS when offered and reports the TLS protocol and certificate (issuer, expiry). The server-side complement to email_deliverability_check (which reads DNS records only and never connects). No mail is sent and no relay attempt is made.
| Argument | Type | Description |
|---|---|---|
| host* | string | Mail server hostname, e.g. mail.example.com — or a bare domain, in which case its lowest-priority-number MX host is probed |
| port | number | SMTP port (default 25) |
{
"type": "object",
"required": [
"host"
],
"properties": {
"host": {
"type": "string",
"description": "Mail server hostname, e.g. mail.example.com — or a bare domain, in which case its lowest-priority-number MX host is probed"
},
"port": {
"type": "number",
"description": "SMTP port (default 25)"
}
}
}Connect to a host over TLS and report its certificate's expiry date, days remaining, issuer, and subject. Fast facts only — for a full graded TLS assessment (protocols, ciphers, vulnerabilities) use ssl_labs_grade instead.
| Argument | Type | Description |
|---|---|---|
| port | number | TLS port to connect to (default 443) |
| hostname* | string | Hostname to check, e.g. papacasper.com (no scheme/path) |
{
"type": "object",
"required": [
"hostname"
],
"properties": {
"port": {
"type": "number",
"description": "TLS port to connect to (default 443)"
},
"hostname": {
"type": "string",
"description": "Hostname to check, e.g. papacasper.com (no scheme/path)"
}
}
}Full SSL Labs-style TLS assessment: overall letter grade, protocol support (TLS 1.0-1.3), cipher strength, certificate chain issues, and known vulnerabilities (Heartbleed, POODLE, etc.) for each endpoint. Use this for a deep grade; use ssl_cert_check instead for a fast expiry/issuer check. Slower (can take up to ~90s on a cold cache; SSL Labs caches results for 24h server-side).
| Argument | Type | Description |
|---|---|---|
| hostname* | string | Hostname to assess, e.g. example.com (no scheme/path) |
{
"type": "object",
"required": [
"hostname"
],
"properties": {
"hostname": {
"type": "string",
"description": "Hostname to assess, e.g. example.com (no scheme/path)"
}
}
}Fetch a URL and extract structured data deterministically: JSON-LD blocks (each one also VALIDATED — @context/@type presence plus required fields for common schema.org types like Article, Product, Organization, FAQPage), OpenGraph/meta tags, and optional caller-supplied CSS-selector fields (e.g. { price: '.product-price', title: 'h1' }). No LLM involved — pure HTML parsing via CSS selectors, so results are exact matches only, not summarized or inferred. For a whole-page SEO audit (headings, links, images, meta lengths) use seo_audit instead.
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to extract from |
| attr | string | Optional HTML attribute to extract instead of text content (e.g. 'href', 'src', 'content'). Applies to all selector fields in this call. |
| selectors | object | Optional map of field name -> CSS selector (e.g. { price: '.product-price', headline: 'h1' }). Each field returns an array of matched, whitespace-normalized text values in document order. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to extract from"
},
"attr": {
"type": "string",
"description": "Optional HTML attribute to extract instead of text content (e.g. 'href', 'src', 'content'). Applies to all selector fields in this call."
},
"selectors": {
"type": "object",
"description": "Optional map of field name -> CSS selector (e.g. { price: '.product-price', headline: 'h1' }). Each field returns an array of matched, whitespace-normalized text values in document order.",
"additionalProperties": {
"type": "string"
}
}
}
}Enumerate a domain's subdomains from public Certificate Transparency logs (crt.sh, with a Cert Spotter fallback): every hostname that has ever appeared on a certificate for the domain. Passive reconnaissance - no packets are sent to the target. Useful for attack-surface reviews, migration inventories, and finding forgotten test/staging hosts.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Bare domain to enumerate, e.g. example.com (no scheme/path) |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Bare domain to enumerate, e.g. example.com (no scheme/path)"
}
}
}Fetch a URL and fingerprint its likely tech stack from response headers (server, x-powered-by, x-generator) and HTML markers (generator meta tag, framework/CMS-specific script or class patterns). Answers 'what is this site built with?' — for on-page SEO/content signals use seo_audit, for raw structured data use structured_data_extract. Best-effort — not exhaustive, no additional paths are probed.
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to fingerprint |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to fingerprint"
}
}
}Fetch a URL and return its main text content as clean, readable plain text/markdown-ish output. Strips scripts, styles, and HTML tags.
| Argument | Type | Description |
|---|---|---|
| url* | string | The URL to fetch |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The URL to fetch"
}
}
}Test a WebSocket endpoint (ws:// or wss://): attempts the handshake, reports success/failure, time-to-open in ms, and close code/reason. Useful for verifying a WebSocket server is reachable and completes its upgrade handshake before you wire real traffic to it.
| Argument | Type | Description |
|---|---|---|
| url* | string | WebSocket URL to test, e.g. wss://example.com/socket |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "WebSocket URL to test, e.g. wss://example.com/socket"
}
}
}Look up a domain's WHOIS registration record: registrar, creation and expiry dates, days remaining, name servers, and domain statuses, direct from the TLD registry. Registration data only — for DNS/mail health as well, use domain_health_check; for a combined report, use domain_report.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Bare domain to look up, e.g. example.com (no scheme/path) |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Bare domain to look up, e.g. example.com (no scheme/path)"
}
}
}