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
| Status | ID | Title | Severity | Summary |
|---|---|---|---|---|
| FAIL | CORE-OPERABILITY-004 | Broken machine-consumable endpoints | high | 1 of 2 machine-consumable reference(s) do not resolve. |
| FAIL | CORE-SECURITY-003 | Content-Security-Policy / framing policy | medium | Neither Content-Security-Policy nor X-Frame-Options is sent. |
| WARN | CORE-ACCESS-005 | Sitemap availability | medium | No sitemap was found. |
| WARN | CORE-INTERFACE-005 | OpenAPI discovery | medium | No OpenAPI document discovered at the conventional paths. |
| WARN | CORE-MACHINE-002 | Organization entity | medium | No Organization entity was found on the sampled pages. |
| WARN | CORE-MACHINE-003 | WebSite/WebPage entity | low | No WebSite or WebPage entity was found on the sampled pages. |
| WARN | CORE-OPERABILITY-001 | Server-rendered core content | medium | The entry page's static HTML carries only 155 chars of visible text (< 200). |
| WARN | CORE-OPERABILITY-003 | Cache validators | info | The entry response carries no cache validator (ETag, Last-Modified, or Cache-Control). |
| WARN | CORE-SECURITY-002 | HSTS presence | low | No Strict-Transport-Security header. |
| WARN | CORE-SECURITY-005 | Referrer / MIME hygiene headers | low | Missing: referrer-policy, x-content-type-options. |
| WARN | CORE-TRUST-004 | Privacy policy discoverability | high | The privacy policy page link is broken (HTTP 404). |
| WARN | CORE-TRUST-005 | Terms/conditions discoverability | medium | No terms/conditions page was found linked from the entry page. |
| PASS | CORE-ACCESS-001 | HTTPS reachability | info | HTTPS entry URL answered 200. |
| PASS | CORE-ACCESS-002 | robots.txt availability and syntax | info | robots.txt answered 200 with a well-formed policy. |
| PASS | CORE-ACCESS-003 | AI search crawler policy | info | robots.txt declares all major search and answer-engine crawlers as allowed. |
| PASS | CORE-ACCESS-004 | Training vs. search crawler separation | info | No training restriction is declared; search and retrieval remain allowed. |
| PASS | CORE-ACCESS-007 | Canonical URL integrity | info | The canonical URL matches the entry URL. |
| PASS | CORE-ACCESS-008 | Indexability | info | The entry page does not declare noindex. |
| PASS | CORE-INTERFACE-006 | OAuth authorization-server metadata | info | OAuth authorization-server metadata is published and complete. |
| PASS | CORE-INTERFACE-007 | OAuth protected-resource metadata | info | OAuth protected-resource metadata is published and complete. |
| PASS | CORE-MACHINE-008 | Metadata quality | info | The entry page declares title, description, and Open Graph tags. |
| PASS | CORE-MACHINE-009 | Heading structure | info | The entry page has a single H1 and no skipped heading levels. |
| PASS | CORE-MACHINE-010 | Language declaration | info | The entry page declares a valid `lang` attribute. |
| PASS | CORE-OPERABILITY-002 | Redirect chain complexity | info | The entry URL redirects 0 time(s) before settling. |
| PASS | CORE-OPERABILITY-005 | Agent parse cost | info | The entry page's estimated parse cost is ~38 tokens (low). |
| PASS | CORE-OPERABILITY-008 | Unknown paths return 404 | info | Unknown paths answer with a real 404. |
| PASS | CORE-OPERABILITY-010 | Challenge pages are not served as 200 | info | No challenge page is served with HTTP 200. |
| PASS | CORE-SECURITY-001 | HTTPS baseline | info | Served over https; http:// redirects to https. |
| PASS | CORE-SECURITY-007 | Credential-like value exposed in a machine-facing surface | info | No credential-like values in the gathered machine-facing surfaces. |
| PASS | CORE-SECURITY-008 | Internal network reference exposed | info | No internal network references found. |
| PASS | CORE-TRUST-001 | Contact/support discoverability | info | A contact or support link was found on the entry page. |
| N/A | CORE-ACCESS-006 | Sitemap freshness | info | No valid sitemap to evaluate freshness for. |
| N/A | CORE-ACCESS-009 | llms.txt presence and integrity | info | No llms.txt is published. |
| N/A | CORE-ACCESS-010 | Content-Signal declaration | info | No Content-Signal directive is declared. |
| N/A | CORE-INTERFACE-001 | MCP discovery presence | info | No MCP discovery file is published. |
| N/A | CORE-INTERFACE-002 | MCP server declaration quality | info | No MCP server is declared. |
| N/A | CORE-INTERFACE-003 | WebMCP static presence | info | No static WebMCP marker was found on the sampled pages. |
| N/A | CORE-MACHINE-001 | JSON-LD parseability | info | No JSON-LD blocks were found on the sampled pages. |
| N/A | CORE-MACHINE-004 | Product structured data | info | Not applicable to the api profile. |
| N/A | CORE-MACHINE-005 | Offer price, currency, and availability | info | Not applicable to the api profile. |
| N/A | CORE-MACHINE-006 | Product identifier count | info | Not applicable to the api profile. |
| N/A | CORE-MACHINE-007 | Breadcrumbs | info | Not applicable to the api profile. |
| N/A | CORE-MACHINE-011 | Image alt coverage | info | Not applicable to the api profile. |
| N/A | CORE-OPERABILITY-006 | Form/control labels | info | Not applicable to the api profile. |
| N/A | CORE-OPERABILITY-009 | Rate limiting is signalled | info | No 429 response was observed during this scan. |
| N/A | CORE-SECURITY-004 | Security-relevant cookie attributes | info | No cookies set on the entry response. |
| N/A | CORE-SECURITY-006 | security.txt validity (RFC 9116) | info | No security.txt published. |
| N/A | CORE-TRUST-002 | Shipping policy discoverability | info | Not applicable to the api profile. |
| N/A | CORE-TRUST-003 | Returns/refund policy discoverability | info | Not applicable to the api profile. |
| N/A | CORE-TRUST-006 | security.txt discoverability | info | No security.txt was found at /.well-known/security.txt or /security.txt. |
| N/A | CORE-TRUST-007 | Pricing discoverability | info | Not applicable to the api profile. |
Experimental (not scored)
CORE-SECURITY-011(PASS) — No indicators found.CORE-SECURITY-012(PASS) — No indicators found.CORE-SECURITY-013(PASS) — No indicators found.CORE-SECURITY-014(PASS) — No indicators found.CORE-SECURITY-017(FAIL) — The declared `resource` names a different site than the one serving it. An authorization server is declared over plain HTTP.CORE-SECURITY-018(FAIL) — `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`.
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
CORE-ACCESS-005— Publish /sitemap.xml and declare it in robots.txt.CORE-INTERFACE-005— Publish an OpenAPI document at a conventional path (e.g. /openapi.json), or link to it from the entry page.CORE-MACHINE-002— Add JSON-LD with "@type": "Organization" declaring at least name and url.CORE-MACHINE-003— Add JSON-LD with "@type": "WebSite" or "WebPage".CORE-OPERABILITY-001— Server-render (or statically pre-render) the core content so an agent's plain HTTP fetch sees it.CORE-OPERABILITY-003— Add an ETag or Last-Modified header so agents can issue conditional GETs.CORE-OPERABILITY-004— Fix or remove the broken references (sitemap, llms.txt, OpenAPI spec, policy links) so agents don't hit dead links.CORE-SECURITY-002— Send Strict-Transport-Security: max-age=31536000 (add includeSubDomains once every subdomain is https).CORE-SECURITY-003— Send a Content-Security-Policy with frame-ancestors, or at least X-Frame-Options: DENY.CORE-SECURITY-005— Send Referrer-Policy: strict-origin-when-cross-origin and X-Content-Type-Options: nosniff.CORE-TRUST-004— Publish a privacy policy page and link it from the entry page's nav or footer.CORE-TRUST-005— Publish a terms/conditions page and link it from the entry page's nav or footer.
Limitations
- Scovant Core evaluates declared and static evidence only; it does not observe real agent traffic.
- Only reachability and syntax are checked; per-agent policy is evaluated by the other CORE-ACCESS checks.
- Only the declared robots.txt policy is evaluated; whether the crawler is actually served is not observed.
- Only the declared robots.txt policy is evaluated.
- Only the first-declared sitemap (or its first child, for a sitemap index) is fetched and validated.
- Only ISO 8601 date-formatted lastmod values are parsed; malformed dates are ignored, not penalised.
- Only the entry page's declared canonical is evaluated.
- Only the entry page's own robots meta tag and X-Robots-Tag header are checked.
- Absence is not penalised; the convention is emerging. Reference checks are HTTP status only.
- Absence is not penalised; the convention is emerging.
- Only `/.well-known/mcp.json` and the two candidate server-card paths are probed; a custom discovery location is not found.
- Only the `mcpServers` object at /.well-known/mcp.json is parsed; a server card is not covered by this check.
- This is a static text scan of already-fetched HTML for a marker string; the browser-side registration was not executed, so a marker's presence does not confirm the tools actually register or work.
- Only a fixed set of conventional paths, plus same-origin entry-page links naming openapi/swagger, are probed.
- Only the conventional /.well-known/oauth-authorization-server path is probed.
- Only the conventional /.well-known/oauth-protected-resource path is probed.
- Only well-formed-JSON parseability is checked; schema.org vocabulary correctness is not validated.
- Only the schema_org nodes on the sampled pages are checked; an Organization declared elsewhere on the site is not evaluated.
- Only the schema_org nodes on the sampled pages are checked.
- Only the sampled pages are checked; a product catalog not represented in the sample is not evaluated.
- Only the first sampled page that exposes a Product entity is checked.
- Only the non-entry pages in the sampled set are checked.
- Only the entry page's metadata is checked.
- Only the entry page's heading outline is checked.
- Only the entry page's `<html lang>` attribute is checked.
- Only the images on the sampled pages are counted.
- Static-HTML signal only: the raw fetched response is inspected, never rendered in a browser, so a site that hydrates real content very quickly may still be flagged here.
- Only the entry URL's own redirect chain is inspected; redirects encountered while fetching other sampled pages are not counted here.
- Only the entry response's own headers are checked; per-page-type validator strategy is not inspected.
- Only the capped set of references collected by the machine_links gatherer are checked; endpoints not linked from any declared document are not found. A declared MCP endpoint is recorded but never judged — Core does not perform the MCP handshake.
- `estimated_tokens` is a character-count estimate (chars / token_chars_ratio), never a real tokenizer count, and only the entry page is measured.
- Only forms on the sampled page set are inspected; a form behind client-side rendering that never appears in the static HTML is not seen.
- One extra request to a path that cannot exist (the URL is in evidence); a site that deliberately serves a 200 landing page for every path fails this check by design. The shell heuristic errs on the lenient side: a very short 200 page that carries a script bundle is reported as an application shell (WARN) even when it is in fact a terse, genuinely server-rendered soft-404.
- Core never induces throttling; only 429 responses that happened to occur during the scan are examined, so most scans report N/A.
- Only the entry response and the sampled pages are inspected; a challenge served with an honest 403/429/503 is not a defect here (the access checks cover blocking).
- Passive signal only. Scovant Core did not authenticate, submit forms or invoke tools; observed authorization behaviour is not tested.
- Passive signal only. Scovant Core reports declaration and exposure in public machine-facing documents; it never tests exploitability, authenticates or invokes tools.
- Only the entry page's anchors are scanned; a contact method reachable only from a deeper page is not found.
- Only a same-origin link discovered from the entry page's nav/footer/anchors is followed; a shipping policy reachable only from a deeper page is not found.
- Only a same-origin link discovered from the entry page's nav/footer/anchors is followed; a returns policy reachable only from a deeper page is not found.
- Only a same-origin link discovered from the entry page's nav/footer/anchors is followed; a privacy policy reachable only from a deeper page is not found.
- Only a same-origin link discovered from the entry page's nav/footer/anchors is followed; terms reachable only from a deeper page are not found.
- Only the conventional /.well-known/security.txt and legacy /security.txt paths are probed.
- Pricing-page discovery follows only a same-origin link from the entry page; the structured-price fallback checks only the sampled pages.
Agentic Security & Trust
PASSIVE SIGNALS ONLY
| Signal | Value |
|---|---|
| Critical | 0 |
| High | 2 |
| Medium | 1 |
| Low | 2 |
| Web baseline | PASS 1 WARN 2 FAIL 1 |
| Disclosure | PASS 0 WARN 0 FAIL 0 |
| Data exposure | PASS 2 WARN 0 FAIL 0 |
| Prompt surface | PASS 4 WARN 0 FAIL 0 |
| auth | PASS 0 WARN 0 FAIL 2 |
- Observed authorization: NOT TESTED
- Verified agent identity: NOT TESTED
- Prompt-injection resilience: NOT TESTED
- Tool invocation safety: NOT TESTED
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
- Observed WAF access
- Real agent tasks
- MCP tool execution
- WebMCP state parity
- Multi-model reliability
- Regression stability
Core vs Cloud
| Capability | Core | Cloud |
|---|---|---|
| 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>