HTTPS and HSTS
sec_tls
Free
Whether the site is served over HTTPS with a Strict-Transport-Security max-age.
ThresholdHTTPS with an HSTS max-age of at least 15768000 seconds (six months); 31536000 recommended
Source: MDN: Strict-Transport-Security
No sensitive files exposed
sec_exposed
Free
Whether well-known secret files (.env, .git/config, config backups, phpinfo) are readable. Detail is shown only to a verified owner.
ThresholdNone readable
Source: OWASP WSTG: configuration and deployment testing
Origin address not disclosed
sec_origin_leak
Free
Behind Cloudflare, whether common diagnostic paths (phpinfo, server-status, status pages) print a public IP address that would let an attacker bypass the CDN. Detail is shown only to a verified owner.
ThresholdNo origin address disclosed
Source: Cloudflare: protect your origin server
OAuth resource metadata
sec_oauth
Free
When the MCP server requires auth, whether RFC 9728 protected-resource metadata tells a client where to authenticate.
ThresholdValid /.well-known/oauth-protected-resource
Source: RFC 9728: OAuth 2.0 Protected Resource Metadata
MCP authentication posture
sec_mcp_auth
Free
Whether an MCP server that exposes mutating tools accepts unauthenticated calls. Detail is shown only to a verified owner.
ThresholdAuth required wherever a tool can change something
Source: MCP specification: authorization
Destructive tools declared
sec_mcp_risk
Free
Whether tools whose names suggest they change or delete data declare destructiveHint.
ThresholdEvery mutating tool annotated
Source: MCP spec: Tools
Tool text free of model instructions
sec_injection
Free
Whether tool names and descriptions contain text that tries to instruct the model (tool poisoning).
ThresholdNo instruction-like text
Source: OWASP GenAI: LLM01 prompt injection
HTTP redirects to HTTPS
sec_https_redirect
Free
Where the first hop of http://host/ goes, without following it.
Threshold301 or 308 to https:// on the same host
Source: hstspreload.org: submission requirements
HSTS max-age
sec_hsts
Free
The Strict-Transport-Security header on the HTTPS homepage and its max-age.
Thresholdmax-age >= 15768000 (6 months)
Source: MDN: Strict-Transport-Security
HSTS preload eligibility
sec_hsts_preload
Free
Whether the HSTS header and redirect meet the browser preload list rules.
Thresholdmax-age >= 31536000, includeSubDomains, preload, same-host HTTPS redirect
Source: hstspreload.org
Content-Security-Policy enforced
sec_csp
Free
Whether a CSP is sent as an enforced header (not only report-only or a meta tag).
ThresholdEnforced Content-Security-Policy header
Source: Mozilla HTTP Observatory: tests and scoring
CSP blocks injected scripts
sec_csp_script
Free
The effective script-src (or default-src): 'unsafe-inline' without nonces/hashes, 'unsafe-eval', and blanket sources (*, https:, data:).
ThresholdNo 'unsafe-inline', 'unsafe-eval' or blanket sources
Source: Mozilla HTTP Observatory: tests and scoring
CSP object-src and base-uri
sec_csp_object
Free
Whether object-src is 'none' and base-uri is restricted.
Thresholdobject-src 'none'; base-uri 'self' or 'none'
Source: OWASP CSP Cheat Sheet
Clickjacking protection
sec_clickjacking
Free
CSP frame-ancestors in the header, or X-Frame-Options DENY/SAMEORIGIN.
Thresholdframe-ancestors restricted or X-Frame-Options DENY/SAMEORIGIN
Source: OWASP Clickjacking Defense Cheat Sheet
Permissions-Policy
sec_permissions_policy
Free
Whether Permissions-Policy switches off powerful features the site does not use.
ThresholdPresent and disabling at least one powerful feature
Source: MDN: Permissions-Policy
Referrer-Policy
sec_referrer_policy
Free
The Referrer-Policy header (or meta referrer) value.
Thresholdno-referrer, same-origin, strict-origin or strict-origin-when-cross-origin
Source: Mozilla HTTP Observatory: tests and scoring
MIME sniffing disabled
sec_nosniff
Free
X-Content-Type-Options on the homepage.
ThresholdX-Content-Type-Options: nosniff
Source: Mozilla HTTP Observatory: tests and scoring
No version disclosure
sec_version_disclosure
Free
Server, X-Powered-By, X-AspNet-Version and similar headers that name software and versions.
ThresholdNo version numbers in response headers
Source: OWASP WSTG-INFO-02: Fingerprint Web Server
Cookie flags
sec_cookies
Free
Secure, HttpOnly (for session-like cookies), SameSite and prefix rules on cookies set by the homepage.
ThresholdSecure on HTTPS, HttpOnly on session cookies, SameSite set
Source: MDN: Set-Cookie
Subresource Integrity on third-party scripts
sec_sri
Free
Whether versioned third-party scripts carry integrity hashes; unversioned vendor loaders are reported as advisory.
ThresholdEvery versioned third-party script has integrity=
Source: MDN: Subresource Integrity
security.txt
sec_security_txt
Free
/.well-known/security.txt and its Contact and Expires fields.
ThresholdContact present and Expires in the future
Source: RFC 9116: security.txt
CORS not reflecting origins
sec_cors
Free
Access-Control-Allow-Origin on the homepage when an unknown Origin is sent, and whether credentials are allowed.
ThresholdNo reflected origin with credentials
Source: OWASP WSTG-CLNT-07: Testing Cross Origin Resource Sharing
No repository or env files exposed
sec_vcs_exposed
Free
Whether /.git/HEAD or /.env.local serve their real content (the core pillar covers /.env and /.git/config). Detail only for a verified owner.
ThresholdNone readable
Source: OWASP WSTG-CONF-04: Old Backup and Unreferenced Files
No backups or dumps exposed
sec_backup_exposed
Free
Whether wp-config.php.bak or backup.sql serve real content (the core pillar covers config.php.bak). Detail only for a verified owner.
ThresholdNone readable
Source: OWASP WSTG-CONF-04: Old Backup and Unreferenced Files
No debug endpoints exposed
sec_debug_exposed
Free
Whether Apache server-status or the Spring Boot actuator answer with their real content (the core pillar covers phpinfo). Detail only for a verified owner.
ThresholdNone reachable
Source: OWASP WSTG-CONF-05: Enumerate Admin Interfaces
No public source maps
sec_source_maps
Free
Whether the first same-origin JavaScript bundle has a readable .map file.
ThresholdNo .map served
Source: OWASP WSTG-INFO-05: Review Web Page Content for Information Leakage
TLS 1.3 negotiated
net_tls_version
Free
The protocol a modern client negotiates with the site.
ThresholdTLS 1.3 (TLS 1.2 is acceptable)
Source: Mozilla Server Side TLS guidelines
TLS 1.0/1.1 refused
net_tls_legacy
Free
Whether a handshake offering only TLS 1.0 and 1.1 completes.
ThresholdRefused
Source: RFC 8996: Deprecating TLS 1.0 and TLS 1.1
Certificate valid
net_cert
Free
Whether the certificate verifies, matches the host, is not self-signed, and how many days it has left.
ThresholdVerifies, matches, more than 21 days left
Source: MDN: Transport Layer Security
Mail exchangers
net_mx
Free
MX records for the registrable domain (reported, not graded).
ThresholdInformational
Source: RFC 7505: A "Null MX" No Service Resource Record
Exactly one v=spf1 TXT record and the qualifier of its all mechanism.
ThresholdOne record ending in -all or ~all
Source: RFC 7208: Sender Policy Framework
SPF lookup limit
net_spf_lookups
Free
DNS lookups the SPF record needs, with include: and redirect= expanded recursively (capped).
Threshold10 or fewer
Source: RFC 7208 section 4.6.4: DNS lookup limits
DMARC policy
net_dmarc
Free
The _dmarc TXT record: present, single, and its p= and pct= values.
Thresholdp=quarantine or p=reject at pct=100
Source: RFC 7489: DMARC
DMARC reports requested
net_dmarc_reporting
Free
Whether the DMARC record asks for aggregate reports (rua).
Thresholdrua present
Source: RFC 7489 section 7: DMARC feedback
DKIM key published
net_dkim
Free
A DKIM public key at the selectors most likely for the mail provider. Grey when none is found, because selectors cannot be listed.
ThresholdA key at a likely selector
Source: RFC 6376: DKIM Signatures
CAA records at the host or its registrable domain, and whether they permit the CA that issued the current certificate.
ThresholdCAA present and permitting the current CA
Source: RFC 8659: DNS Certification Authority Authorization
Whether a validating resolver sets the AD flag for the domain, or DNSKEY exists without a valid chain.
ThresholdValidated (AD flag)
Source: ICANN: DNSSEC, what is it and why is it important
No dangling CNAME
net_dangling_cname
Free
Whether the host or its apex/www sibling is a CNAME to a target that no longer resolves, or to a claimable provider without an address. Detail only for a verified owner.
ThresholdNo dangling CNAME
Source: OWASP WSTG-CONF-10: Test for Subdomain Takeover
BIMI logo record
net_bimi
Free
Whether default._bimi publishes a brand logo record (reported, not graded).
ThresholdInformational
Source: BIMI Group: implementation guide
No hidden tool poisoning
mcp_sec_poisoning
Free
Tool names, descriptions and schemas for invisible Unicode (tag, zero-width, bidi), base64 text, hidden tags, exfiltration phrasing and cross-tool shadowing.
ThresholdNo poisoning signals
Source: OWASP GenAI: LLM01 prompt injection
Destructive tools flagged honestly
mcp_sec_annotations
Free
Whether tools named delete/remove/drop/revoke/cancel/refund... set destructiveHint: true and never claim readOnlyHint: true.
ThresholddestructiveHint: true, no read-only claim
Source: MCP specification: Tools (security considerations)
OAuth metadata correct (RFC 9728)
mcp_sec_oauth
Free
Protected-resource metadata: resource matching the endpoint, https authorization_servers, bearer methods, JSON content type, and a WWW-Authenticate resource_metadata pointer.
ThresholdValid and discoverable from the 401
Source: RFC 9728: OAuth 2.0 Protected Resource Metadata
MCP endpoint CORS
mcp_sec_cors
Free
A CORS preflight from an unknown origin: reflected origin with credentials, or open browser access to anonymous write tools.
ThresholdNo reflected origin with credentials; no anonymous browser writes
Source: MCP specification: Streamable HTTP transport, security warning
Rate limits advertised
mcp_sec_rate_limit
Free
RateLimit, RateLimit-Policy, X-RateLimit-* or Retry-After headers on MCP responses.
ThresholdRate-limit headers present
Source: IETF draft: RateLimit header fields for HTTP
Server card matches live tools
mcp_sec_card_mismatch
Free
Tool names on the server card (/.well-known/mcp.json or /.well-known/mcp/server-card.json) against tools/list.
ThresholdIdentical sets
Source: MCP specification: Tools (security considerations)
Tool fingerprints
mcp_sec_tool_hashes
Free
A sha256 per tool over name, description, schemas and annotations, kept so a later scan can flag silent changes (reported, not graded).
ThresholdInformational
Source: Invariant Labs: MCP tool poisoning and rug pulls