Access
90/10091.3% coverage
API site · Static audit
The static audit found gaps. Start with the fixes below.
Pass starts at 80 / 100. This scan does not prove that an agent can complete a purchase. Method and limits
77/ 100
NEEDS WORK
Readiness score
Scanned 2026-09-30 18:07:37 UTC
Start with these changes. Open a fix for the finding, example, and supporting evidence.
Link public API instructions and a valid OpenAPI document. Show request and response examples.
Suggested location: /docs
Finding: The API catalog is usable, but its media type or HEAD Link relation is incomplete.
Change: Serve Linkset JSON and include rel=api-catalog in the HEAD response.
Open this check and its evidenceFinding: No write operation declares an Idempotency-Key header.
Change: Add an Idempotency-Key header parameter to retryable POST, PUT, PATCH, and DELETE operations.
Open this check and its evidenceFinding: The MCP discovery documents do not declare a modern transport.
Change: Publish a valid Streamable HTTP remote in the MCP server card.
Open this check and its evidenceFinding: Only some listed tools meet this requirement.
Change: Give each tool a typed object inputSchema and keep required names in properties.
Open this check and its evidenceFinding: Only some listed tools meet this requirement.
Change: Add boolean readOnlyHint and destructiveHint annotations to each tool.
Open this check and its evidenceFinding: Only some resource descriptors have a valid name, URI, and media type.
Change: Add a valid name, absolute URI, and media type to every resource descriptor.
Open this check and its evidenceFinding: The MCP App omits CSP metadata and therefore uses the restrictive default policy.
Change: Declare the minimum external origins that the view must connect to, load, or frame.
Open this check and its evidence{
"info": {
"title": "Example API",
"version": "1.0.0"
},
"openapi": "3.1.0",
"paths": {
"/status": {
"get": {
"responses": {
"200": {
"description": "Service status"
}
}
}
}
}
}
Adapt this example to the service. Apply every relevant change listed above, then confirm it with a new scan.
Use one documented error format. Match the HTTP status to the error.
HTTP/1.1 404 Not Found
Content-Type: application/problem+json
{"type":"about:blank","title":"Not found","status":404}
Suggested location: /api
Finding: The missing-path response is not a structured JSON error.
Change: Return application/problem+json or a stable JSON error object for API errors.
Open this check and its evidenceFinding: Only 37 of 56 declared error responses have typed schemas.
Change: Use one typed error schema or application/problem+json for every 4xx and 5xx response.
Open this check and its evidenceHTTP/1.1 404 Not Found
Content-Type: application/problem+json
{"type":"about:blank","title":"Not found","status":404}
Adapt this example to the service. Apply every relevant change listed above, then confirm it with a new scan.
Give each operation a unique name and description. Type its inputs and successful responses, and keep schemas shallow.
{
"properties": {
"id": {"type": "string"},
"status": {"type": "string"}
},
"type": "object"
}
Suggested location: OpenAPI operations and schemas
Finding: Typed success response schemas cover only 65.4% of operations.
Change: Define a typed success response schema for every operation.
Open this check and its evidenceFinding: The contract is partly self-describing, but some operation metadata or parameter types are incomplete.
Change: Give every operation a unique operationId, a description, typed parameters, and shallow schemas.
Open this check and its evidence{
"info": {
"title": "Example API",
"version": "1.0.0"
},
"openapi": "3.1.0",
"paths": {
"/items/{id}": {
"get": {
"description": "Read one item by its identifier.",
"operationId": "readItem",
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"type": "object"
}
}
},
"description": "Successful response"
}
}
}
}
}
}
Adapt this example to the service. Apply every relevant change listed above, then confirm it with a new scan.
If batch access fits the service, document the actual array request and each item result. Do not claim support before it exists.
{
"items": {
"properties": {
"id": {"type": "string"},
"status": {"type": "string"}
},
"type": "object"
},
"type": "array"
}
Suggested location: OpenAPI batch operations
Finding: The contract has no batch path or array request operation.
Change: Add a bounded batch endpoint for repeated write operations.
Open this check and its evidence{
"info": {
"title": "Example API",
"version": "1.0.0"
},
"openapi": "3.1.0",
"paths": {
"/batch": {
"post": {
"description": "Process a list of items.",
"operationId": "processBatch",
"requestBody": {
"content": {
"application/json": {
"schema": {
"items": {
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
}
}
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
}
},
"description": "Successful response"
}
}
}
}
}
}
Adapt this example to the service. Apply every relevant change listed above, then confirm it with a new scan.
State whether access is public or needs credentials. Link the applicable authentication metadata.
# Authentication
Public report reads need no credentials.
Write requests require a bearer token.
Never put tokens in URLs.
Suggested location: /auth.md
Finding: The scan did not find authorization-server metadata at the fixed well-known path.
Change: Publish RFC 8414 metadata at /.well-known/oauth-authorization-server.
Open this check and its evidence# Authentication
Public report reads need no credentials.
Write requests require a bearer token.
Never put tokens in URLs.
Adapt this example to the service. Apply every relevant change listed above, then confirm it with a new scan.
Estimated gains use this report's model. All checks listed in a fix must pass to earn its full estimated gain.
53 checks passed. 37 need attention. 16 could not be verified. Checks that do not apply stay out of the score.
Results that need attention are listed first. Open a row for its reason and recommended change.
The public MCP server has no A2UI resource signal.
Publish an A2UI presentation resource and link it from the tool that produces its data.
The product page does not advertise a public GitHub source repository.
Link the canonical public GitHub repository from the product page.
The agent-mode query returned a normal HTML view or another unsuitable representation.
Return a dedicated JSON, Markdown, or plain-text agent view.
The product page does not advertise a public GitHub source repository.
Link the canonical public GitHub repository from the product page.
The checked llms.txt and dedicated instruction paths do not explain when an agent should use the product.
Add a specific when-to-use section to llms.txt or a dedicated agent instruction document.
The product page does not provide a usable public CLI path.
Publish a CLI, a copyable install command, and a stable public documentation or package link.
No write operation declares an Idempotency-Key header.
Add an Idempotency-Key header parameter to retryable POST, PUT, PATCH, and DELETE operations.
The identified bot request received text/html, not Markdown.
Optionally serve a Markdown representation to the truthful AgentReadinessBot identity.
The missing-path response is not a structured JSON error.
Return application/problem+json or a stable JSON error object for API errors.
The MCP discovery documents do not declare a modern transport.
Publish a valid Streamable HTTP remote in the MCP server card.
The page does not declare a Markdown alternate.
Add a link rel=alternate with type=text/markdown and a stable URL.
The product page has no reachable multi-language SDK evidence.
Link stable public SDK pages or package pages and identify their programming languages.
The scan did not find authorization-server metadata at the fixed well-known path.
Publish RFC 8414 metadata at /.well-known/oauth-authorization-server.
The contract has no batch path or array request operation.
Add a bounded batch endpoint for repeated write operations.
The OpenAPI document does not declare a sandbox or test environment.
Add a separate sandbox server declaration or an explicit environment server variable.
The bounded Wikidata search found no entity with verified ownership of this domain.
Add the official website to the correct Wikidata entity, or link the correct Wikidata or Wikipedia page from structured data.
The API catalog is usable, but its media type or HEAD Link relation is incomplete.
Serve Linkset JSON and include rel=api-catalog in the HEAD response.
The contract is partly self-describing, but some operation metadata or parameter types are incomplete.
Give every operation a unique operationId, a description, typed parameters, and shallow schemas.
The document has some semantic structure, but its landmarks or heading order are incomplete.
Use one main region, a navigation landmark, one clear H1, and sequential heading levels.
The probe returns the correct missing status, but its body lacks concise discovery guidance.
Point missing-page clients to llms.txt, sitemap.xml, or the documentation index.
7 of 8 sampled content page(s) were publicly readable.
Fix broken content links and publish non-empty pages without a login wall.
The MCP App omits CSP metadata and therefore uses the restrictive default policy.
Declare the minimum external origins that the view must connect to, load, or frame.
Only some listed tools meet this requirement.
Give each tool a typed object inputSchema and keep required names in properties.
The MCP server card has only 2 of 3 branding signals.
Add a display title, useful description, and absolute HTTP icon URL.
Only some resource descriptors have a valid name, URI, and media type.
Add a valid name, absolute URI, and media type to every resource descriptor.
Only some listed tools meet this requirement.
Add boolean readOnlyHint and destructiveHint annotations to each tool.
Only 2 of 4 served Markdown documents have complete frontmatter metadata.
Start every served Markdown document with title and description, canonical, or last-updated metadata.
A package page is linked, but the bounded descriptor does not identify it as an SDK.
Label the linked NPM or PyPI package as an SDK or API client.
The page has one pricing signal, but not both visible text and a pricing link.
Add a clear pricing link and plain-language pricing information.
The MCP server exposes product operations, but no documentation-oriented tool or resource was classified.
Add a clearly named documentation, reference, guide, help, schema, or overview tool or resource.
Only 2 of 17 GET operations declare pagination signals.
Use one consistent cursor or page shape on list operations.
Typed success response schemas cover only 65.4% of operations.
Define a typed success response schema for every operation.
Only 37 of 56 declared error responses have typed schemas.
Use one typed error schema or application/problem+json for every 4xx and 5xx response.
The page links to only 3 trust-page category or categories.
Link to public about, contact, privacy, terms, and security pages.
The source refers to WebMCP, but declarations are incomplete or use only the deprecated navigator form.
Use complete toolname and tooldescription attributes or document.modelContext.registerTool().
7 sampled link(s) resolved, but 1 did not.
Fix or remove each broken link. A 200 homepage fallback is also a broken target.
robots.txt explicitly addresses only 1 agent-user token(s).
State an explicit policy for user-directed agent fetchers.
The scan did not collect valid ranked web-search evidence for this query.
Configure the ranked search provider and run capture profile version 26 to collect new evidence.
The scan did not collect valid ranked web-search evidence for this query.
Configure the ranked search provider and run capture profile version 26 to collect new evidence.
The scan did not collect valid ranked web-search evidence for this query.
Configure the ranked search provider and run capture profile version 26 to collect new evidence.
The scan did not collect usable GraphQL introspection evidence.
Run capture profile version 17 and permit bounded public introspection.
The scan did not collect usable GraphQL introspection evidence.
Run capture profile version 17 and permit bounded public introspection.
The scan did not collect usable GraphQL introspection evidence.
Run capture profile version 17 and permit bounded public introspection.
The scan did not collect usable GraphQL introspection evidence.
Run capture profile version 17 and permit bounded public introspection.
The scan did not collect usable GraphQL introspection evidence.
Run capture profile version 17 and permit bounded public introspection.
The scan did not collect usable GraphQL introspection evidence.
Run capture profile version 17 and permit bounded public introspection.
The scan did not collect usable NLWeb inspection evidence.
Run capture profile version 16 to collect bounded NLWeb evidence.
The scan did not collect usable NLWeb inspection evidence.
Run capture profile version 16 to collect bounded NLWeb evidence.
The scan did not collect valid official MCP Registry evidence.
Run capture profile version 23 to collect MCP Registry evidence.
The scan could not collect the required discovery evidence.
Run capture profile version 3 and confirm that robots and network access permit this request.
The scan could not collect the required discovery evidence.
Run capture profile version 3 and confirm that robots and network access permit this request.
The scan did not collect valid public skills.sh catalog evidence.
Run capture profile version 25 to collect skills.sh evidence.
The scan did not collect valid public skills.sh catalog evidence.
Run capture profile version 25 to collect skills.sh evidence.
A structured catalog is published at /.well-known/ai-catalog.json.
No configured instruction-risk pattern was found in the evaluated hidden accessibility text.
All 76 detected controls have a computed source name.
All 2 skill entries have the v0.2.0 type, URL, and SHA-256 digest fields.
robots policy permits all 3 evaluated retrieval crawlers at the root path.
The Agent Skills index describes 2 skill(s).
The scan found public entry links and documentation plus 4 of five bounded onboarding signals.
A structured agentic resource catalog is available at /.well-known/ard.json.
The source HTML has 2374 visible text characters.
The page links to 1 developer target(s).
All 3 form fields have an explicit computed label.
The operations have unique names, descriptions, typed inputs, and bounded schema depth.
The final response has 9 parsed Link header value(s) with relations.
JSON-LD has 3 unique sameAs link(s).
The page has 1 valid JSON-LD block(s).
The linked MCP App view was reachable through resources/read and returned valid UI content.
A sampled MCP App view has a complete document and at least five UI quality signals.
A tool uses the current MCP Apps resource link and its UI resource is valid.
The server returns a structured error for a guaranteed unlisted tool name.
Every sampled resource returns non-empty content with a URI and media type.
The server card has complete identity, endpoint, and 13 tool preview(s).
The server returns a supported protocol version, name, version, and instructions.
The site exposes a static MCP endpoint or manifest signal.
Each listed tool has a useful description.
The server lists at least three tools in a valid response.
All inspected tool names are descriptive and use one consistent convention.
A bounded well-known MCP endpoint, server card, or manifest signal is available.
/index.md is a valid Markdown representation.
The canonical root returns valid Markdown when Accept prefers text/markdown.
All 6 served Markdown document(s) have balanced CommonMark fences.
All 9 metadata fields are present.
A structured scoped llms.txt file is available at /docs/llms.txt.
robots.txt publishes 1 structurally valid Schema Map URL(s).
All 76 detected controls use native HTML semantics.
The scanner received the target content without a bot block.
A valid OpenAPI document is available.
The Organization entity has all 6 fields.
The estimated visible-text size is 594 tokens.
A readable Markdown pricing file is available at /pricing.md.
The page links to 4 API or documentation target(s).
A documented GET operation returned a successful machine-readable response.
All 1 declared 202 responses provide a polling location or job status field.
The contract declares API versioning and a machine-readable deprecation signal.
The target uses 0 same-origin redirect(s) with no downgrade or redirect error.
All 5 catalog entries have a domain-bound urn:air identifier, display name, media type, and exactly one target.
All 5 trust manifests have a structurally valid identity binding.
The page declares 7 JSON-LD types.
The directory has 1 structurally valid Ed25519 key(s) with unique key IDs.
A non-placeholder Markdown walkthrough is available at /auth.md.
auth.md covers 7 walkthrough stages and 4 machine-readable anchor terms.
A non-empty /llms.txt file is available.
llms.txt has one leading H1, section headings, and Markdown links.
robots.txt has explicit policies for 4 known AI crawler tokens.
This check is outside the selected site type.
This check is outside the selected site type.
This check is outside the selected site type.
This check is outside the selected site type.
This check is outside the selected site type.
This check is outside the selected site type.
No identity, claim, or events endpoint was advertised.
The MCP endpoint appears public and no OAuth metadata was published. A static HEAD probe cannot classify it as a docs or product server.
No OAuth authorization server was published for the public MCP signal.
This check is outside the selected site type.
This check is outside the selected site type.
This check is outside the selected site type.
This check is outside the selected site type.
The primary public response is not rate limited and exposes no API rate-limit contract.
This check is outside the selected site type.
This check is outside the selected site type.
This check is outside the selected site type.
This check is outside the selected site type.
91.3% coverage
100.0% coverage
55.2% coverage
95.3% coverage
Open a rule to inspect its HTTP and extracted evidence.
robots.analysis
100.0% confidencerobots.policy
100.0% confidencehttps://ora.ai/robots.txt
transport.fetch
100.0% confidencehttps://ora.ai/
discovery.a2a_agent_card
100.0% confidencediscovery.acp_checkout_options
100.0% confidencediscovery.acp_delegate_payment_options
100.0% confidencediscovery.agent_friendly_404
100.0% confidencediscovery.agent_instructions
100.0% confidencediscovery.agent_mode_view
100.0% confidencediscovery.agent_skills_index
100.0% confidencediscovery.ai_catalog
100.0% confidencediscovery.api_catalog
100.0% confidencediscovery.api_catalog_head
100.0% confidencediscovery.ard_catalog
100.0% confidencediscovery.auth_md
100.0% confidencediscovery.llms_txt
100.0% confidencediscovery.markdown_negotiation
100.0% confidencediscovery.markdown_url_fallback
100.0% confidencediscovery.mcp_endpoint
100.0% confidencediscovery.mcp_manifest
100.0% confidencediscovery.mcp_server_card
100.0% confidencediscovery.modular_llms_txt
100.0% confidencediscovery.oauth_authorization_server
100.0% confidencediscovery.oauth_protected_resource
100.0% confidencediscovery.openapi
100.0% confidencediscovery.pricing_markdown
100.0% confidencediscovery.sitemap
100.0% confidencediscovery.ucp
100.0% confidencediscovery.web_bot_auth_directory
100.0% confidencediscovery.x402
100.0% confidencehttps://ora.ai/sitemap.xml
https://ora.ai/llms.txt
https://ora.ai/pricing.md
https://ora.ai/.well-known/agent-card.json
https://ora.ai/.well-known/api-catalog
https://ora.ai/.well-known/api-catalog
https://ora.ai/.well-known/oauth-protected-resource
https://ora.ai/.well-known/ucp
https://ora.ai/openapi.json
https://ora.ai/auth.md
https://ora.ai/.well-known/oauth-authorization-server
https://ora.ai/index.md
https://ora.ai/
https://ora.ai/.well-known/agent-readiness-probe/not-found-7b91e8d4
https://ora.ai/.well-known/agent-skills/index.json
https://ora.ai/docs/llms.txt
https://ora.ai/.well-known/agent-instructions.md
https://ora.ai/agent-instructions.md
https://ora.ai/.well-known/ard.json
https://ora.ai/.well-known/ai-catalog.json
https://ora.ai/.well-known/mcp
https://ora.ai/.well-known/mcp/server-card.json
https://ora.ai/.well-known/mcp/manifest.json
https://ora.ai/.well-known/http-message-signatures-directory
https://ora.ai/
https://ora.ai/checkout_sessions
https://ora.ai/agentic_commerce/delegate_payment
https://ora.ai/discovery/resources
links.agent_auth
100.0% confidencelinks.docs_access
100.0% confidencelinks.llms
100.0% confidencelinks.public_api
100.0% confidencehttps://ora.ai/.well-known/agent-card.json
https://ora.ai/.well-known/mcp.json
https://ora.ai/about
https://ora.ai/agents.md
https://ora.ai/api/llms.txt
https://ora.ai/api/mcp
https://ora.ai/api/openapi.json
https://ora.ai/blog
https://ora.ai/api/ard
mcp.inspection
100.0% confidencehttps://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
nlweb.inspection
100.0% confidencehttps://ora.ai/ask
https://ora.ai/ask
graphql.inspection
100.0% confidencehttps://ora.ai/graphql
https://ora.ai/api/graphql
https://ora.ai/api/graphql
mcp_apps.inspection
100.0% confidencehttps://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
https://ora.ai/api/mcp
developer_tooling.inspection
100.0% confidencehttps://www.npmjs.com/robots.txt
https://www.npmjs.com/package/ax
repository.inspection
100.0% confidencemcp_registry.inspection
100.0% confidencehttps://registry.modelcontextprotocol.io/robots.txt
https://registry.modelcontextprotocol.io/v0.1/servers
wikimedia.inspection
100.0% confidencehttps://api.wikimedia.org/robots.txt
https://api.wikimedia.org/core/v1/wikidata/search/page
https://api.wikimedia.org/core/v1/wikidata/page/Q656774/html
skills_sh.inspection
100.0% confidencehttps://www.skills.sh/robots.txt
https://www.skills.sh/eralabs-ai
ranked_search.inspection
100.0% confidencehttp.semantics
100.0% confidenceresponse.semantics
100.0% confidencehtml.accessibility
90.0% confidenceStructured evidence was stored. This view has no safe summary for it yet.
html.content
100.0% confidencehtml.discovery
100.0% confidenceStructured evidence was stored. This view has no safe summary for it yet.
html.forms
100.0% confidencehtml.images
100.0% confidencehtml.links
100.0% confidencehtml.metadata
100.0% confidencehtml.structure
100.0% confidencehtml.structured_data
100.0% confidencehtml.web_mcp
90.0% confidenceImmutable scan identity
Versioned evidence first
A later criteria version can evaluate this same stored scan without changing what the scanner observed.
Open this exact snapshotShare this report, apply the relevant changes, then scan again to check the result.
Connection lost
Reconnecting
Server error
Reconnecting