{"serverId":"mcp-registry/com.papacasper/mcp-toolbelt","tools":[{"name":"ai_crawler_policy_check","fixed":{"name":"ai_crawler_policy_check","description":"Check a site's robots.txt for explicit directives targeting known AI crawlers (GPTBot, ClaudeBot, CCBot, PerplexityBot, Google-Extended, Bytespider, Amazonbot, and others used for LLM training or AI search/answer products), and check for an llms.txt file. Useful for publishers deciding whether their content policy toward AI crawlers matches their intent, or for auditing a competitor's stance.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Any URL on the site to check (origin is derived from it)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":170,"tokensAfter":170},{"name":"broken_link_check","fixed":{"name":"broken_link_check","description":"Crawl a site starting from a URL (same-origin pages only, bounded by maxPages) and check every linked URL for broken status codes. Returns broken links with the page(s) they were found on. Note: some external sites (e.g. social platforms) block automated HEAD/GET requests and may show up as false positives.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Starting URL to crawl"},"maxPages":{"type":"number","description":"Max same-origin pages to crawl (default 20, capped at 50)"},"checkExternal":{"type":"boolean","description":"Also check links pointing off-site (default true; crawling never follows off-site links)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":202,"tokensAfter":202},{"name":"check_open_ports","fixed":{"name":"check_open_ports","description":"TCP-connect scan a host for open ports. 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.","inputSchema":{"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."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":154,"tokensAfter":154},{"name":"check_robots_sitemap","fixed":{"name":"check_robots_sitemap","description":"Check whether a site has a valid robots.txt and sitemap.xml, and return their raw contents (truncated).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Any URL on the site to check (origin is derived from it)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":88,"tokensAfter":88},{"name":"cors_policy_check","fixed":{"name":"cors_policy_check","description":"Send a probe request with a foreign Origin header to a URL and report its CORS response headers. Flags wildcard-origin + credentials combinations and arbitrary-origin reflection, both common CORS misconfigurations.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL to probe"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"dns_propagation_check","fixed":{"name":"dns_propagation_check","description":"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.","inputSchema":{"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)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":150,"tokensAfter":150},{"name":"domain_availability_check","fixed":{"name":"domain_availability_check","description":"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.","inputSchema":{"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)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":173,"tokensAfter":173},{"name":"domain_health_check","fixed":{"name":"domain_health_check","description":"Check a domain's registration expiry (via WHOIS) and DNS health: nameservers, A/AAAA, MX, SPF, and DMARC records. Flags common misconfigurations.","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Bare domain to check, e.g. example.com (no scheme/path)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"email_address_validate","fixed":{"name":"email_address_validate","description":"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).","inputSchema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","description":"Email address to validate"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"email_deliverability_check","fixed":{"name":"email_deliverability_check","description":"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.","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Bare domain to check, e.g. example.com"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":191,"tokensAfter":191},{"name":"favicon_manifest_check","fixed":{"name":"favicon_manifest_check","description":"Check a site for favicon, apple-touch-icon, web app manifest, and theme-color presence — a quick completeness check for browser/OS chrome and PWA metadata.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Any URL on the site to check (origin is derived from it)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"github_repo_health_check","fixed":{"name":"github_repo_health_check","description":"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.","inputSchema":{"type":"object","required":["owner","repo"],"properties":{"repo":{"type":"string","description":"Repository name"},"owner":{"type":"string","description":"Repository owner (user or org)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"ip_geolocation_asn_lookup","fixed":{"name":"ip_geolocation_asn_lookup","description":"Resolve a hostname to its IPv4 addresses and look up each one's ASN, network prefix, country code, and network owner via Team Cymru's DNS-based WHOIS service (no API key). Country-level only — not city/street geolocation.","inputSchema":{"type":"object","required":["host"],"properties":{"host":{"type":"string","description":"Hostname or bare IPv4 address to look up"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"package_vulnerability_check","fixed":{"name":"package_vulnerability_check","description":"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.","inputSchema":{"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"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":206,"tokensAfter":206},{"name":"page_performance_check","fixed":{"name":"page_performance_check","description":"Fetch a URL and measure time-to-first-byte, total fetch time, and response size. Flags missing compression, missing Cache-Control, oversized payloads, and slow TTFB.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL to measure"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"redirect_chain_check","fixed":{"name":"redirect_chain_check","description":"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.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The starting URL to trace"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":97,"tokensAfter":97},{"name":"safe_browsing_check","fixed":{"name":"safe_browsing_check","description":"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).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL to check"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"ssl_cert_check","fixed":{"name":"ssl_cert_check","description":"Connect to a host over TLS and report its certificate's expiry date, days remaining, issuer, and subject.","inputSchema":{"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)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":111,"tokensAfter":111},{"name":"websocket_endpoint_check","fixed":{"name":"websocket_endpoint_check","description":"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.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"WebSocket URL to test, e.g. wss://example.com/socket"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132}],"toolsChanged":19,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}