Scovant Core — https://example.com/
Profile: saas (requested auto, confidence 80%)
Core version: 0.18.0
29 PASS, 12 WARN, 2 FAIL, 25 N/A, 0 ERROR (68 checks)
Technical Readiness
73 / 100
Grade: C · Status: OK · Coverage: 100% · Model: R2.1@67df90af85b0
Diagnostics (50 readiness checks): 22 pass · 8 warn · 0 fail
Capabilities detected (descriptive, not scored): mcp: absent · webmcp: absent · ucp: not_checked · llms_txt: absent · openapi: absent · oauth: invalid · content_signal: absent · security_txt: present
Standards: AgentReady v1.0 (descriptive, not scored): MUST 3/3 measured — 1 pass, 2 warn · SHOULD 4/12 measured — 4 warn · MAY none measured (0/3) — Mapping: docs/standards/agentready.md
Findings
| Status | ID | Title | Severity | Summary |
|---|---|---|---|---|
| FAIL | CORE-SECURITY-003 | Content-Security-Policy / framing policy | medium | Neither Content-Security-Policy nor X-Frame-Options is sent. |
| FAIL | CORE-SECURITY-006 | security.txt validity (RFC 9116) | medium | Expires missing or unparsable. |
| WARN | CORE-ACCESS-003 | AI search crawler policy | high | robots.txt declares PerplexityBot as disallowed. |
| WARN | CORE-ACCESS-004 | Training vs. search crawler separation | low | Search/retrieval crawlers are restricted together with training crawlers — intent unclear. |
| WARN | CORE-ACCESS-006 | Sitemap freshness | low | The newest lastmod in the sitemap is over 730 days old. |
| WARN | CORE-INTERFACE-006 | OAuth authorization-server metadata | medium | An authorization-server metadata document was found but is incomplete or does not parse. |
| WARN | CORE-INTERFACE-007 | OAuth protected-resource metadata | medium | A protected-resource metadata document was found but is incomplete or does not parse. |
| WARN | CORE-MACHINE-002 | Organization entity | medium | An Organization entity is missing url. |
| WARN | CORE-OPERABILITY-001 | Server-rendered core content | medium | The entry page's static HTML carries only 90 chars of visible text (< 200). |
| WARN | CORE-OPERABILITY-006 | Form/control labels | medium | 1 control(s) across 1 form(s) lack a label or accessible name. |
| 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. |
| 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-005 | Sitemap availability | info | A valid urlset sitemap was found at https://example.com/sitemap.xml. |
| 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-MACHINE-001 | JSON-LD parseability | info | Every JSON-LD block on the sampled pages parses as valid JSON. |
| PASS | CORE-MACHINE-003 | WebSite/WebPage entity | info | A WebSite or WebPage entity was found on the sampled pages. |
| PASS | CORE-MACHINE-007 | Breadcrumbs | info | A sampled non-entry page declares a BreadcrumbList. |
| 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-003 | Cache validators | info | The entry response carries an ETag or Last-Modified validator. |
| PASS | CORE-OPERABILITY-004 | Broken machine-consumable endpoints | info | All 4 checked machine-consumable reference(s) resolve. |
| PASS | CORE-OPERABILITY-005 | Agent parse cost | info | The entry page's estimated parse cost is ~22 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. |
| PASS | CORE-TRUST-004 | Privacy policy discoverability | info | A privacy policy page was found with substantive content. |
| PASS | CORE-TRUST-005 | Terms/conditions discoverability | info | A terms/conditions page was found with substantive content. |
| PASS | CORE-TRUST-006 | security.txt discoverability | info | A valid security.txt was found with a contact method. |
| PASS | CORE-TRUST-007 | Pricing discoverability | info | A pricing page was found with a readable price. |
| 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-INTERFACE-005 | OpenAPI discovery | info | No OpenAPI document discovered at the conventional paths. |
| N/A | CORE-MACHINE-004 | Product structured data | info | Not applicable to the saas profile. |
| N/A | CORE-MACHINE-005 | Offer price, currency, and availability | info | Not applicable to the saas profile. |
| N/A | CORE-MACHINE-006 | Product identifier count | info | Not applicable to the saas profile. |
| N/A | CORE-MACHINE-011 | Image alt coverage | info | Not applicable to the saas 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-TRUST-002 | Shipping policy discoverability | info | Not applicable to the saas profile. |
| N/A | CORE-TRUST-003 | Returns/refund policy discoverability | info | Not applicable to the saas 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(WARN) — `authorization_servers` is missing, empty or not a list of URLs.CORE-SECURITY-018(WARN) — `authorization_endpoint` is not declared. `token_endpoint` is not declared. 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).
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": "3986b6edab342dfd005c7e59bf3e6876ce79173402727d30bb6c632805c1a1da",
"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": false
},
"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": [
"PerplexityBot"
],
"training_blocked": []
}
CORE-ACCESS-005 — Sitemap availability
{
"entry_count": 4,
"exists": true,
"kind": "urlset",
"parse_error": null,
"probe_error": null,
"probe_status": 200,
"served_as_html": false,
"url": "https://example.com/sitemap.xml",
"valid": true
}
CORE-ACCESS-006 — Sitemap freshness
{
"dated_entry_count": 4,
"entry_count": 4,
"newest": "2020-01-01",
"oldest": "2020-01-01",
"url": "https://example.com/sitemap.xml"
}
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": 4,
"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": false,
"http_status": 200,
"parseable": true,
"resource": "https://example.com/.well-known/oauth-authorization-server",
"served_as_html": false
}
CORE-INTERFACE-007 — OAuth protected-resource metadata
{
"dpop_bound_access_tokens_required": false,
"http_status": 200,
"jwks_uri": null,
"matches_issuer": true,
"parseable": true,
"resource": "https://example.com/.well-known/oauth-protected-resource",
"resource_matches_origin": true,
"scopes_supported": [],
"served_as_html": false
}
CORE-MACHINE-001 — JSON-LD parseability
{
"pages": [
{
"parsed": 2,
"raw": 2,
"url": "https://example.com/"
},
{
"parsed": 0,
"raw": 0,
"url": "https://example.com/pricing"
},
{
"parsed": 1,
"raw": 1,
"url": "https://example.com/docs"
},
{
"parsed": 0,
"raw": 0,
"url": "https://example.com/signup"
}
],
"parsed_total": 3,
"raw_total": 3
}
CORE-MACHINE-002 — Organization entity
{
"found": true,
"missing": [
"url"
],
"pages_parsed": 4
}
CORE-MACHINE-003 — WebSite/WebPage entity
{
"found": true,
"pages_parsed": 4
}
CORE-MACHINE-007 — Breadcrumbs
{
"has_breadcrumb": true,
"non_entry_pages": [
"https://example.com/pricing",
"https://example.com/docs",
"https://example.com/signup"
],
"non_entry_parsed": 3
}
CORE-MACHINE-008 — Metadata quality
{
"entry_url": "https://example.com/",
"issues": [],
"meta_description": "Example SaaS is a synthetic subscription service used to exercise agent-readiness checks.",
"missing": [],
"title": "Example SaaS"
}
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": 90
}
CORE-OPERABILITY-002 — Redirect chain complexity
{
"redirect_chain": [],
"redirect_count": 0
}
CORE-OPERABILITY-003 — Cache validators
{
"cache_control": null,
"etag": "\"abc\"",
"last_modified": null
}
CORE-OPERABILITY-004 — Broken machine-consumable endpoints
{
"broken": [],
"broken_count": 0,
"inconclusive": [],
"refs_checked": 4,
"refs_resolved": 4,
"unresolved": []
}
CORE-OPERABILITY-005 — Agent parse cost
{
"dom_nodes": 26,
"estimated_tokens": 22,
"html_bytes": 1278,
"level": "LOW",
"link_count": 7,
"script_bytes": 218,
"script_ratio": 0.1705790297339593,
"structured_bytes": 218,
"text_chars": 90,
"token_chars_ratio": 4
}
CORE-OPERABILITY-006 — Form/control labels
{
"totals": {
"forms": 1,
"inputs": 2,
"unlabeled_inputs": 1,
"unlabeled_selects": 0,
"unnamed_buttons": 0
}
}
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": 5
}
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-006 — security.txt validity (RFC 9116)
{
"canonical_location": true,
"canonical_uris": [],
"contact": true,
"expired": null,
"expires": null,
"found_url": "https://example.com/.well-known/security.txt"
}
CORE-SECURITY-007 — Credential-like value exposed in a machine-facing surface
{
"hit_count": 0,
"hits": [],
"surfaces_scanned": 3
}
CORE-SECURITY-008 — Internal network reference exposed
{
"hits": [],
"surfaces_scanned": 3
}
CORE-TRUST-001 — Contact/support discoverability
{
"contact_url": "https://example.com/contact",
"kind": "page"
}
CORE-TRUST-004 — Privacy policy discoverability
{
"served_as_html": true,
"status": 200,
"text_chars": 342,
"url": "https://example.com/privacy"
}
CORE-TRUST-005 — Terms/conditions discoverability
{
"served_as_html": true,
"status": 200,
"text_chars": 324,
"url": "https://example.com/terms"
}
CORE-TRUST-006 — security.txt discoverability
{
"contact": true,
"expires": null,
"expires_valid": null,
"found_url": "https://example.com/.well-known/security.txt",
"status": 200
}
CORE-TRUST-007 — Pricing discoverability
{
"has_price_text": true,
"has_structured_price": false,
"status": 200,
"url": "https://example.com/pricing"
}
Remediation
CORE-ACCESS-003— Review whether blocking these retrieval crawlers is intended; they power answer-engine discovery, not model training.CORE-ACCESS-004— Restrict only the training-purpose crawler tokens; leave search/retrieval crawlers allowed.CORE-ACCESS-006— Regenerate the sitemap so lastmod reflects real content changes.CORE-INTERFACE-006— Publish RFC 8414 metadata with `issuer`, `authorization_endpoint`, and `token_endpoint` at /.well-known/oauth-authorization-server.CORE-INTERFACE-007— Publish RFC 9728 metadata with `resource` and a non-empty `authorization_servers` list at /.well-known/oauth-protected-resource.CORE-MACHINE-002— Add the missing fields (url) to the Organization entity.CORE-OPERABILITY-001— Server-render (or statically pre-render) the core content so an agent's plain HTTP fetch sees it.CORE-OPERABILITY-006— Add a <label> (or aria-label/aria-labelledby) to every input/select, and a name or accessible text to every button.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-SECURITY-006— Set Expires to a future date (RFC 3339) and keep it fresh.
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 | 0 |
| Medium | 4 |
| Low | 2 |
| Web baseline | PASS 1 WARN 2 FAIL 1 |
| Disclosure | PASS 0 WARN 0 FAIL 1 |
| Data exposure | PASS 2 WARN 0 FAIL 0 |
| Prompt surface | PASS 4 WARN 0 FAIL 0 |
| auth | PASS 0 WARN 2 FAIL 0 |
- 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-006 (SEC-TXT-001) — security.txt validity (RFC 9116) DECLARED
Status: FAIL · Severity: medium · Confidence: high
Fix owner: security · Domain: disclosure
Expires missing or unparsable.
Remediation: Set Expires to a future date (RFC 3339) and keep it fresh.
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: WARN · Severity: medium · Confidence: high
Fix owner: identity · Domain: auth
`authorization_servers` is missing, empty or not a list of URLs.
Remediation: Declare `authorization_servers` as a non-empty list of issuer URLs.
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: WARN · Severity: medium · Confidence: high
Fix owner: identity · Domain: auth
`authorization_endpoint` is not declared. `token_endpoint` is not declared. 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).
Remediation: Declare `authorization_endpoint` with an HTTPS URL. Declare `token_endpoint` with an HTTPS URL. Require PKCE and list "S256" in `code_challenge_methods_supported`. Return `iss` in authorization responses and set `authorization_response_iss_parameter_supported: true`.
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 are weighted into a 0–100 rating. Coverage is the share of applicable weight 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, weights and outcome states: docs/r2.md. The five-domain Static Signal Score is deprecated: it prints only with --legacy-score and is removed in 0.19.0.
Provenance
- scan_id
- local-golden
- started_at
- 2026-09-04T00:00:00Z
- completed_at
- 2026-09-04T00:00:00Z
- schema_version
- 1.2
- core_version
- 0.18.0
- profile_detector_version
- 1.0
- ruleset_version
- 2026.10
- ruleset_digest
- 7f440d6205c3
- python
- <runtime>
- platform
- <runtime>
- user_agent
- ScovantCore/0.18.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
- evidence_min_coverage
- 0.6
- canonical_min_coverage
- 0.85
- dependencies
- <runtime>
- environment_digest
- <runtime>