Scovant Core — https://example.com/

Profile: api (requested auto, confidence 55%)

Core version: 0.19.0

23 PASS, 10 WARN, 4 FAIL, 31 N/A, 0 ERROR (68 checks)

Technical Readiness

98 / 100

Grade: A · Status: OK · Coverage: 100% · Model: R2.1@67df90af85b0

Diagnostics (50 readiness checks): 16 pass · 8 warn · 1 fail

Profile: api? (confidence LOW, 0.55) — canonical comparison should specify --profile.

Capabilities detected (descriptive, not scored): mcp: absent · webmcp: absent · ucp: not_checked · llms_txt: absent · openapi: absent · oauth: present · content_signal: absent · security_txt: absent

Standards: AgentReady v1.0 (descriptive, not scored): MUST 3/3 measured — 1 pass, 1 warn, 1 fail · SHOULD 5/12 measured — 1 pass, 4 warn · MAY none measured (0/3) — Mapping: docs/standards/agentready.md

Findings

StatusIDTitleSeveritySummary
FAILCORE-OPERABILITY-004Broken machine-consumable endpointshigh1 of 2 machine-consumable reference(s) do not resolve.
FAILCORE-SECURITY-003Content-Security-Policy / framing policymediumNeither Content-Security-Policy nor X-Frame-Options is sent.
WARNCORE-ACCESS-005Sitemap availabilitymediumNo sitemap was found.
WARNCORE-INTERFACE-005OpenAPI discoverymediumNo OpenAPI document discovered at the conventional paths.
WARNCORE-MACHINE-002Organization entitymediumNo Organization entity was found on the sampled pages.
WARNCORE-MACHINE-003WebSite/WebPage entitylowNo WebSite or WebPage entity was found on the sampled pages.
WARNCORE-OPERABILITY-001Server-rendered core contentmediumThe entry page's static HTML carries only 155 chars of visible text (< 200).
WARNCORE-OPERABILITY-003Cache validatorsinfoThe entry response carries no cache validator (ETag, Last-Modified, or Cache-Control).
WARNCORE-SECURITY-002HSTS presencelowNo Strict-Transport-Security header.
WARNCORE-SECURITY-005Referrer / MIME hygiene headerslowMissing: referrer-policy, x-content-type-options.
WARNCORE-TRUST-004Privacy policy discoverabilityhighThe privacy policy page link is broken (HTTP 404).
WARNCORE-TRUST-005Terms/conditions discoverabilitymediumNo terms/conditions page was found linked from the entry page.
PASSCORE-ACCESS-001HTTPS reachabilityinfoHTTPS entry URL answered 200.
PASSCORE-ACCESS-002robots.txt availability and syntaxinforobots.txt answered 200 with a well-formed policy.
PASSCORE-ACCESS-003AI search crawler policyinforobots.txt declares all major search and answer-engine crawlers as allowed.
PASSCORE-ACCESS-004Training vs. search crawler separationinfoNo training restriction is declared; search and retrieval remain allowed.
PASSCORE-ACCESS-007Canonical URL integrityinfoThe canonical URL matches the entry URL.
PASSCORE-ACCESS-008IndexabilityinfoThe entry page does not declare noindex.
PASSCORE-INTERFACE-006OAuth authorization-server metadatainfoOAuth authorization-server metadata is published and complete.
PASSCORE-INTERFACE-007OAuth protected-resource metadatainfoOAuth protected-resource metadata is published and complete.
PASSCORE-MACHINE-008Metadata qualityinfoThe entry page declares title, description, and Open Graph tags.
PASSCORE-MACHINE-009Heading structureinfoThe entry page has a single H1 and no skipped heading levels.
PASSCORE-MACHINE-010Language declarationinfoThe entry page declares a valid `lang` attribute.
PASSCORE-OPERABILITY-002Redirect chain complexityinfoThe entry URL redirects 0 time(s) before settling.
PASSCORE-OPERABILITY-005Agent parse costinfoThe entry page's estimated parse cost is ~38 tokens (low).
PASSCORE-OPERABILITY-008Unknown paths return 404infoUnknown paths answer with a real 404.
PASSCORE-OPERABILITY-010Challenge pages are not served as 200infoNo challenge page is served with HTTP 200.
PASSCORE-SECURITY-001HTTPS baselineinfoServed over https; http:// redirects to https.
PASSCORE-SECURITY-007Credential-like value exposed in a machine-facing surfaceinfoNo credential-like values in the gathered machine-facing surfaces.
PASSCORE-SECURITY-008Internal network reference exposedinfoNo internal network references found.
PASSCORE-TRUST-001Contact/support discoverabilityinfoA contact or support link was found on the entry page.
N/ACORE-ACCESS-006Sitemap freshnessinfoNo valid sitemap to evaluate freshness for.
N/ACORE-ACCESS-009llms.txt presence and integrityinfoNo llms.txt is published.
N/ACORE-ACCESS-010Content-Signal declarationinfoNo Content-Signal directive is declared.
N/ACORE-INTERFACE-001MCP discovery presenceinfoNo MCP discovery file is published.
N/ACORE-INTERFACE-002MCP server declaration qualityinfoNo MCP server is declared.
N/ACORE-INTERFACE-003WebMCP static presenceinfoNo static WebMCP marker was found on the sampled pages.
N/ACORE-MACHINE-001JSON-LD parseabilityinfoNo JSON-LD blocks were found on the sampled pages.
N/ACORE-MACHINE-004Product structured datainfoNot applicable to the api profile.
N/ACORE-MACHINE-005Offer price, currency, and availabilityinfoNot applicable to the api profile.
N/ACORE-MACHINE-006Product identifier countinfoNot applicable to the api profile.
N/ACORE-MACHINE-007BreadcrumbsinfoNot applicable to the api profile.
N/ACORE-MACHINE-011Image alt coverageinfoNot applicable to the api profile.
N/ACORE-OPERABILITY-006Form/control labelsinfoNot applicable to the api profile.
N/ACORE-OPERABILITY-009Rate limiting is signalledinfoNo 429 response was observed during this scan.
N/ACORE-SECURITY-004Security-relevant cookie attributesinfoNo cookies set on the entry response.
N/ACORE-SECURITY-006security.txt validity (RFC 9116)infoNo security.txt published.
N/ACORE-TRUST-002Shipping policy discoverabilityinfoNot applicable to the api profile.
N/ACORE-TRUST-003Returns/refund policy discoverabilityinfoNot applicable to the api profile.
N/ACORE-TRUST-006security.txt discoverabilityinfoNo security.txt was found at /.well-known/security.txt or /security.txt.
N/ACORE-TRUST-007Pricing discoverabilityinfoNot applicable to the api profile.

Experimental (not scored)

N/A: CORE-ACCESS-011, CORE-INTERFACE-004, CORE-INTERFACE-008, CORE-INTERFACE-009, CORE-MACHINE-012, CORE-OPERABILITY-007, CORE-OPERABILITY-011, CORE-SECURITY-009, CORE-SECURITY-010, CORE-SECURITY-015, CORE-SECURITY-016

Evidence

CORE-ACCESS-001 — HTTPS reachability
{
  "final_url": "https://example.com/",
  "input_url": "https://example.com/",
  "redirect_chain": [],
  "redirect_count": 0,
  "status": 200
}
CORE-ACCESS-002 — robots.txt availability and syntax
{
  "error": null,
  "resource": "https://example.com/robots.txt",
  "served_as_html": false,
  "sha256": "b87966e58d2e52aaf3d52e0e5308a67505c7b1015c2fa7f772d1ecc327c4082f",
  "sitemap_count": 1,
  "status": 200,
  "unknown_directives": []
}
CORE-ACCESS-003 — AI search crawler policy
{
  "declared_policy": {
    "Applebot": true,
    "Bingbot": true,
    "Claude-SearchBot": true,
    "Googlebot": true,
    "OAI-SearchBot": true,
    "PerplexityBot": true
  },
  "http_status": 200,
  "resource": "https://example.com/robots.txt",
  "robots_present": true,
  "user_fetch_policy": {
    "ChatGPT-User": true,
    "Claude-User": true,
    "DuckAssistBot": true,
    "Perplexity-User": true
  }
}
CORE-ACCESS-004 — Training vs. search crawler separation
{
  "explicit_separation": false,
  "http_status": 200,
  "resource": "https://example.com/robots.txt",
  "search_blocked": [],
  "training_blocked": []
}
CORE-ACCESS-005 — Sitemap availability
{
  "entry_count": 0,
  "exists": false,
  "kind": null,
  "parse_error": null,
  "probe_error": null,
  "probe_status": 404,
  "served_as_html": false,
  "url": null,
  "valid": false
}
CORE-ACCESS-006 — Sitemap freshness
{
  "url": null
}
CORE-ACCESS-007 — Canonical URL integrity
{
  "canonical_url": "https://example.com/",
  "entry_url": "https://example.com/"
}
CORE-ACCESS-008 — Indexability
{
  "robots_meta": null,
  "x_robots_tag": null
}
CORE-ACCESS-009 — llms.txt presence and integrity
{
  "http_status": 404,
  "resource": "https://example.com/llms.txt"
}
CORE-ACCESS-010 — Content-Signal declaration
{
  "declared": false,
  "dimensions": {
    "ai-input": "unset",
    "ai-train": "unset",
    "search": "unset"
  },
  "syntax_errors": []
}
CORE-INTERFACE-001 — MCP discovery presence
{
  "exists": false,
  "http_status": 404,
  "resource": "https://example.com/.well-known/mcp.json",
  "server_card": false,
  "valid": false
}
CORE-INTERFACE-003 — WebMCP static presence
{
  "pages_scanned": 2,
  "pages_with_marker": []
}
CORE-INTERFACE-005 — OpenAPI discovery
{
  "candidates_checked": 5,
  "found_url": null,
  "openapi_version": null,
  "parseable": false
}
CORE-INTERFACE-006 — OAuth authorization-server metadata
{
  "has_endpoints": true,
  "http_status": 200,
  "issuer": "https://login.other.test",
  "parseable": true,
  "resource": "https://example.com/.well-known/oauth-authorization-server",
  "served_as_html": false
}
CORE-INTERFACE-007 — OAuth protected-resource metadata
{
  "authorization_servers": [
    "http://example.com"
  ],
  "dpop_bound_access_tokens_required": false,
  "http_status": 200,
  "jwks_uri": null,
  "matches_issuer": false,
  "parseable": true,
  "resource": "https://example.com/.well-known/oauth-protected-resource",
  "resource_matches_origin": false,
  "resource_value": "https://api.other.test",
  "scopes_supported": [],
  "served_as_html": false
}
CORE-MACHINE-001 — JSON-LD parseability
{
  "pages": [
    {
      "parsed": 0,
      "raw": 0,
      "url": "https://example.com/"
    }
  ],
  "parsed_total": 0,
  "raw_total": 0
}
CORE-MACHINE-002 — Organization entity
{
  "found": false,
  "pages_parsed": 1,
  "unread": 1
}
CORE-MACHINE-003 — WebSite/WebPage entity
{
  "found": false,
  "pages_parsed": 1,
  "unread": 1
}
CORE-MACHINE-008 — Metadata quality
{
  "entry_url": "https://example.com/",
  "issues": [],
  "meta_description": "Example API is a synthetic HTTP API used to exercise agent-readiness checks.",
  "missing": [],
  "title": "Example API"
}
CORE-MACHINE-009 — Heading structure
{
  "entry_url": "https://example.com/",
  "h1_count": 1,
  "heading_count": 1,
  "issues": [],
  "levels": [
    "h1"
  ]
}
CORE-MACHINE-010 — Language declaration
{
  "entry_url": "https://example.com/",
  "html_lang": "en"
}
CORE-OPERABILITY-001 — Server-rendered core content
{
  "entry_url": "https://example.com/",
  "spa_shell_marker": false,
  "visible_text_chars": 155
}
CORE-OPERABILITY-002 — Redirect chain complexity
{
  "redirect_chain": [],
  "redirect_count": 0
}
CORE-OPERABILITY-003 — Cache validators
{
  "cache_control": null,
  "etag": null,
  "last_modified": null
}
CORE-OPERABILITY-004 — Broken machine-consumable endpoints
{
  "broken": [
    {
      "source": "policy_link",
      "status": 404,
      "url": "https://example.com/privacy"
    }
  ],
  "broken_count": 1,
  "inconclusive": [],
  "refs_checked": 2,
  "refs_resolved": 2,
  "unresolved": []
}
CORE-OPERABILITY-005 — Agent parse cost
{
  "dom_nodes": 18,
  "estimated_tokens": 38,
  "html_bytes": 753,
  "level": "LOW",
  "link_count": 4,
  "script_bytes": 0,
  "script_ratio": 0.0,
  "structured_bytes": 0,
  "text_chars": 155,
  "token_chars_ratio": 4
}
CORE-OPERABILITY-008 — Unknown paths return 404
{
  "final_url": "https://example.com/scovant-core-probe-9b580505",
  "probed_url": "https://example.com/scovant-core-probe-9b580505",
  "redirected": false,
  "served_html": false,
  "status": 404
}
CORE-OPERABILITY-009 — Rate limiting is signalled
{
  "observed": []
}
CORE-OPERABILITY-010 — Challenge pages are not served as 200
{
  "honest_challenges": 0,
  "pages": [],
  "pages_checked": 3
}
CORE-SECURITY-001 — HTTPS baseline
{
  "downgrade_attempted": true,
  "downgrade_status": 301,
  "final_scheme": "https",
  "redirected_to_https": true
}
CORE-SECURITY-002 — HSTS presence
{
  "header": null,
  "max_age": null
}
CORE-SECURITY-003 — Content-Security-Policy / framing policy
{
  "csp_present": false,
  "csp_report_only": false,
  "frame_ancestors": false,
  "x_frame_options": null
}
CORE-SECURITY-005 — Referrer / MIME hygiene headers
{
  "missing": [
    "referrer-policy",
    "x-content-type-options"
  ],
  "referrer_policy": null,
  "x_content_type_options": null
}
CORE-SECURITY-007 — Credential-like value exposed in a machine-facing surface
{
  "hit_count": 0,
  "hits": [],
  "surfaces_scanned": 1
}
CORE-SECURITY-008 — Internal network reference exposed
{
  "hits": [],
  "surfaces_scanned": 1
}
CORE-TRUST-001 — Contact/support discoverability
{
  "contact_url": "https://example.com/contact",
  "kind": "page"
}
CORE-TRUST-004 — Privacy policy discoverability
{
  "served_as_html": false,
  "status": 404,
  "text_chars": 0,
  "url": "https://example.com/privacy"
}
CORE-TRUST-006 — security.txt discoverability
{
  "contact": false,
  "expires": null,
  "expires_valid": null,
  "found_url": null,
  "status": 404
}

Remediation

Limitations

Agentic Security & Trust

PASSIVE SIGNALS ONLY

SignalValue
Critical0
High2
Medium1
Low2
Web baselinePASS 1 WARN 2 FAIL 1
DisclosurePASS 0 WARN 0 FAIL 0
Data exposurePASS 2 WARN 0 FAIL 0
Prompt surfacePASS 4 WARN 0 FAIL 0
authPASS 0 WARN 0 FAIL 2
CORE-SECURITY-002 (SEC-WEB-002) — HSTS presence PASSIVE_OBSERVED

Status: WARN · Severity: low · Confidence: high

Fix owner: edge_cdn · Domain: web_baseline

No Strict-Transport-Security header.

Remediation: Send Strict-Transport-Security: max-age=31536000 (add includeSubDomains once every subdomain is https).

Limitations: Passive signal only. Scovant Core did not authenticate, submit forms or invoke tools; observed authorization behaviour is not tested.

CORE-SECURITY-003 (SEC-WEB-003) — Content-Security-Policy / framing policy PASSIVE_OBSERVED

Status: FAIL · Severity: medium · Confidence: high

Fix owner: frontend · Domain: web_baseline

Neither Content-Security-Policy nor X-Frame-Options is sent.

Remediation: Send a Content-Security-Policy with frame-ancestors, or at least X-Frame-Options: DENY.

Limitations: Passive signal only. Scovant Core did not authenticate, submit forms or invoke tools; observed authorization behaviour is not tested.

CORE-SECURITY-005 (SEC-WEB-005) — Referrer / MIME hygiene headers PASSIVE_OBSERVED

Status: WARN · Severity: low · Confidence: high

Fix owner: edge_cdn · Domain: web_baseline

Missing: referrer-policy, x-content-type-options.

Remediation: Send Referrer-Policy: strict-origin-when-cross-origin and X-Content-Type-Options: nosniff.

Limitations: Passive signal only. Scovant Core did not authenticate, submit forms or invoke tools; observed authorization behaviour is not tested.

CORE-SECURITY-017 (MCP-AUTH-011) — OAuth protected-resource metadata consistency PASSIVE_OBSERVED

Status: FAIL · Severity: high · Confidence: high

Fix owner: identity · Domain: auth

The declared `resource` names a different site than the one serving it. An authorization server is declared over plain HTTP.

Remediation: Set `resource` to this server's own canonical URL so tokens are audience-bound to it. Declare every authorization server with an HTTPS URL.

Mapped to OWASP Agentic Top 10 (not a compliance claim): ASI03 Identity & Privilege Abuse (partial)

Limitations: Passive signal only. Scovant Core reads the published metadata documents at the origin of the site itself; it never authenticates, registers a client or runs an OAuth flow, so it cannot see what the server enforces beyond what it advertises.

CORE-SECURITY-018 (MCP-AUTH-012) — OAuth authorization-server metadata consistency PASSIVE_OBSERVED

Status: FAIL · Severity: high · Confidence: high

Fix owner: identity · Domain: auth

`issuer` is not exactly the URL the metadata is served under. `token_endpoint` is declared over plain HTTP. PKCE with S256 is not advertised in `code_challenge_methods_supported` (the server may still enforce it; agents cannot discover that it does). The RFC 9207 `iss` authorization-response parameter is not advertised (the server may still enforce it; agents cannot discover that it does). The protected-resource metadata does not list this authorization server's issuer in `authorization_servers`.

Remediation: Serve the metadata at the well-known URL derived from the issuer, or set `issuer` to exactly that URL (RFC 8414 issuer rule). Serve `token_endpoint` over HTTPS. Require PKCE and list "S256" in `code_challenge_methods_supported`. Return `iss` in authorization responses and set `authorization_response_iss_parameter_supported: true`. List this issuer in the protected-resource metadata's `authorization_servers`, or remove the stale entry.

Mapped to OWASP Agentic Top 10 (not a compliance claim): ASI03 Identity & Privilege Abuse (partial)

Limitations: Passive signal only. Scovant Core reads the published metadata documents at the origin of the site itself; it never authenticates, registers a client or runs an OAuth flow, so it cannot see what the server enforces beyond what it advertises.

This section evaluates tested AI-agent security controls and machine-facing security signals. It is not an overall website or application security rating.

Not tested by Scovant Core

Core vs Cloud

CapabilityCoreCloud
HTTP reachability✅✅
robots.txt✅✅
Sitemap✅✅
llms.txt✅✅
Structured data (JSON-LD)✅✅
Product/Offer data✅✅
Static crawler policy✅✅
Content-Signal✅✅
MCP discovery✅✅
WebMCP static presence✅✅
OpenAPI presence✅✅
OAuth authorization-server / protected-resource metadata✅✅
UCP profile validity✅ (experimental)✅
Agent discovery surface (A2A cards, AI-plugin, agents.json, Agent Skills)✅ (experimental)✅
Technical Readiness from Core's own sampled evidence✅—
Cloud = observed, reproducible, cross-provider, longitudinal——
Cloud's full compatibility score❌✅
Cloud's full production ruleset❌✅
Observed WAF/bot-firewall behavior❌✅
Real crawler network access❌✅
Browser-based agent simulation❌✅
Multi-model execution❌✅
MCP tool invocation❌✅
WebMCP tool execution/state parity❌✅
Tool/UI parity checking❌✅
Checkout/task completion❌✅
CAPTCHA/challenge behavior❌✅
Verified-agent access❌✅
Failure attribution❌✅
Temporal stability / regressions❌✅
Scheduled monitoring❌✅
Alerts/webhooks❌✅
Hosted, shareable reports❌✅
Contextual fix plan❌✅

Scovant Core measures passive, machine-facing signals. Scovant Cloud verifies how real agents actually behave, across providers, browser runtimes, security layers and time.

Methodology

Technical Readiness is the open R2 rating over the passive evidence Core gathered. Each rule outcome counts PASS = 1, WARN = 0.5, FAIL = 0 within its category, and the categories combine into a 0–100 rating. Coverage is the severity-adjusted share of the applicable rules Core could measure. A rule Core could not measure is listed as not measured, with a reason, and lowers coverage; it is never a FAIL. Below the coverage floor there is no number (INSUFFICIENT_EVIDENCE); an under-covered or errored measurement is DEGRADED (a number, no grade). Formula, category shares and outcome states: docs/r2.md. Checks are diagnostics: each reports its own verdict and evidence and none feeds the rating.

Provenance

scan_id
local-golden
started_at
2026-09-04T00:00:00Z
completed_at
2026-09-04T00:00:00Z
schema_version
2.0
core_version
0.19.0
profile_detector_version
1.0
ruleset_version
2026.10
ruleset_digest
e7426fb13abe
python
<runtime>
platform
<runtime>
user_agent
ScovantCore/0.19.0 (+https://github.com/Scovant/scovant-core)
timeout
60.0
max_pages
5
network_mode
fixture
experimental
False
allow_private_networks
False
scan_scope
CANONICAL
included_checks
[]
excluded_checks
[]
error_count
0
dependencies
<runtime>
environment_digest
<runtime>