stuntdouble.io
Finalizing the report
Preparing the stored Is Agentic score
stuntdouble.io
Preparing the stored Is Agentic score
stuntdouble.io
These checks describe whether an ordinary agent can enter, read, and operate the public site.
Agents can reach the site
Crawler access and bot defenses.
Core content is available
Useful content remains accessible without a fragile browser-only path.
Navigation fails safely
Redirects and missing pages give agents a recoverable path.
Controls are understandable
Forms and interactive controls expose usable names and structure.
The public website is always evaluated. Optional surfaces appear when the scan finds positive evidence that they apply.
Strong
Weighted across 16 applicable checks
Strong
Weighted across 12 applicable checks
Ready with gaps
Weighted across 3 applicable checks
Strong
Weighted across 3 applicable checks
Critical access gaps come first, followed by other applicable readiness gaps.
Publish an official CLI tool on npm, PyPI, or Homebrew. A CLI lets agents and developers script interactions with your product without building API integrations from scratch.
Offer a free tier or trial, self-serve API key generation, and a sandbox environment. Agents can't fill out 'contact sales' forms.
Ensure API endpoints have unique operation IDs, typed schemas, and descriptions compatible with LLM function-calling formats.
Checks are grouped by relevance for App sites.
5191 chars, semantic headings (1 H1 + 6 H2s + 7 H3s), 6.7% content ratio
Site accessible to 6 AI agent user-agents
No meta-refresh stubs, JavaScript-redirect stubs, or cross-domain hops across 6 checked pages
All 5 sampled pages are publicly readable (5 with substantive content)
OpenAPI spec found at https://stuntdouble.io/openapi.json (version: 3.1.0)
Canonical URL serves text/markdown and text/html via Accept negotiation with Vary: Accept
OAuth authorization server metadata at https://app.stuntdouble.io (issuer=https://app.stuntdouble.io)
OAuth security scheme "oauth2" declares 3 named scope(s) in the OpenAPI spec (e.g. mcp:read, mcp:write, mcp:run)
API returns JSON error responses (404 at https://stuntdouble.io/api/v1/orank-probe-test)
MCP server exposes 4 resource(s) via resources/list
Nonexistent paths return HTTP 404 with markdown guidance for agents - the strongest 404 contract
Valid sitemap found at https://www.stuntdouble.io/sitemap.xml with 128 entries
Rich JSON-LD identity: Organization with name, description, url, and sameAs/logo/address (4 blocks)
Pricing page found at /pricing
API/docs link found on homepage and resolves: /api/desktop/download
All metadata signals present: canonical URL, lang="en-US", og:image, og:type
Organization schema complete with contactPoint and address
All trust anchor pages verified: About, Contact, Privacy
All 8 measured pages fit an agent context budget (largest ~8K tokens)
REST API documentation found at https://www.stuntdouble.io/support/docs. Best-of-protocols score: 7/7.
Onboarding signals described but not verified live: self-serve key generation, sandbox/test environment, zero-auth access
How to pass
Offer a free tier or trial, self-serve API key generation, and a sandbox environment. Agents can't fill out 'contact sales' forms.
MCP server connected via Streamable HTTP - stunt-double-docs v1.0.0 (protocol 2025-11-25)
The live API at https://stuntdouble.io/api/v1 returns IETF RateLimit-* headers: ratelimit-policy.
OpenAPI defines a typed error schema in components.schemas and 4xx/5xx responses reference it
API versioning strategy found (header versioning) with deprecation policy documented at https://www.stuntdouble.io/openapi.json
No CLI tool found
How to pass
Publish an official CLI tool on npm, PyPI, or Homebrew. A CLI lets agents and developers script interactions with your product without building API integrations from scratch.
90% of operations define typed response schemas, 67% use application/json
REST: agent-friendly schema (21 operations, 100% with operationIds, 100% documented by description or summary)
Partial compatibility: 21/21 operationIds, 6/21 typed schemas
How to pass
Ensure API endpoints have unique operation IDs, typed schemas, and descriptions compatible with LLM function-calling formats.
4/4 resources read with valid mimeType and non-empty content
ARD catalog valid at /.well-known/ai-catalog.json (spec 1.0) - 2/2 entries - served at the legacy path; the canonical ARD path is /.well-known/ard.json (ARD v0.91)
Valid AI Catalog at /.well-known/ai-catalog.json (spec 1.0) - 2/2 entries
All 2 entries valid with domain-anchored urn:air identifiers (catalog at /.well-known/ai-catalog.json)
Agent discovered 1 developer-resource type by name (API docs) across 2 pages
stuntdouble.io ranks #2 for "Stunt Double AI testing"
Verified in 2 registries: Smithery (stuntdouble/stuntdouble-mcp) [entry-to-product], GitHub (stunt-double/stuntdouble-mcp) [product-to-entry]
Agent config found: github.com/stunt-double/stuntdouble-mcp/blob/main/CLAUDE.md
MCP manifest has name and description but no icon at /.well-known/mcp/server-card.json
How to pass
Give your MCP server-card (at /.well-known/mcp/server-card.json) a display name, an icon or logo, and a description - all three together are what reads as a complete, branded listing agents can present.
Agent Skills index (agentskills.io) found at /.well-known/agent-skills/index.json with 1 skill(s)
Index v0.2.0 conformant; verified SHA-256 of "stunt-double" (skill-md)
A2A Agent Card found: "Stunt Double docs agent"
14 official skills published on skills.sh (skills.sh/stunt-double)
MCP server discoverable via server-card.json at /.well-known/mcp/
RFC 8288 Link header advertises: describedby, service-desc, service-doc, api-catalog
Homepage markdown fallback works (https://stuntdouble.io/index.md). No additional same-host content pages were discovered to sample.
100% of 128 sampled sitemap entries carry lastmod; newest is 0 day(s) old
Found the llms.txt at https://stuntdouble.io/llms.txt.
The llms.txt is well-formatted: 100 lines with markdown links, 17,036 characters in total.
Agent instruction file at /.well-known/agent-skills/ but no explicit when-to-use guidance
How to pass
Tell agents when to reach for you: add a 'when to use this' section to your llms.txt (or a dedicated agent-instructions file) that names your best-fit use cases and how an agent should call you. Be specific about the jobs you are right for - generic marketing copy does not read as guidance.
14 installable skills with well-formed SKILL.md manifests (14/14 carry name + description). Agents can understand capabilities in depth
Strong entity linking via sameAs: github.com, linkedin.com
Some extended schema types found: ItemList - add FAQPage, Service, or AggregateRating for full coverage
How to pass
Expand your JSON-LD beyond Organization/WebSite. Add FAQPage for common questions, Service or Product for offerings, AggregateRating or Review for social proof, and BreadcrumbList for navigation context.
All 5 probed llms.txt links resolve to real content
Markdown alternate advertised and verified: https://www.stuntdouble.io/index.md serves markdown
Code fences balanced across 3 markdown documents
Developer portal found at /developers
api-catalog linkset[0] has no 'item' entries
How to pass
Publish an API catalog at /.well-known/api-catalog per RFC 9727. Serve it with Content-Type: application/linkset+json;profile="https://www.rfc-editor.org/info/rfc9727" and include a 'linkset' array with item entries pointing to your OpenAPI specs and service descriptions.
Path-suffix markdown docs served with text/markdown content-type: /auth.md, /index.md
docs MCP identifies as "stunt-double-docs" v1.0.0 with instructions
product MCP requires authentication with OAuth metadata discovery
RFC 8414 OAuth metadata for product MCP: issuer=https://app.stuntdouble.io, auth and token endpoints present; client registration: DCR endpoint only (RFC 7591, deprecated in favor of CIMD)
OAuth metadata for product MCP supports PKCE S256 code challenge
Web Bot Auth directory with 1 Ed25519 key(s), all with kid but missing nbf/exp lifetime fields on some keys
How to pass
Publish a Web Bot Auth directory at /.well-known/http-message-signatures-directory. Serve a JSON document with a 'keys' array of Ed25519 JWKs (kty=OKP, crv=Ed25519, kid, nbf, exp). This lets agents sign their requests per RFC 9421 so you can distinguish legitimate bots from spoofers.
RFC 9728 metadata at https://app.stuntdouble.io: resource=https://app.stuntdouble.io/api/mcp, authorization_servers (1), scopes_supported (3), bearer_methods_supported
auth.md at https://stuntdouble.io/auth.md served as text/markdown; charset=utf-8 (4260 chars)
WorkOS auth.md structure at https://stuntdouble.io/auth.md - 4/8 walkthrough sections (found Discover, Pick a method, Register, and Use credential); anchors: oauth-protected-resource, oauth-authorization-server, and agent_auth
Static fallback (deep check disabled): PRM + AS metadata both reachable with agent_auth.identity_endpoint (https://app.stuntdouble.io/oauth/register) (advertised under the pre-v0.2 register_uri key); walkthrough discoverable end-to-end
PRM + AS metadata present with agent_auth.identity_endpoint (https://app.stuntdouble.io/oauth/register) (advertised under the pre-v0.2 register_uri key) (PRM discovered at https://app.stuntdouble.io) (AS metadata fetched from advertised origin https://app.stuntdouble.io) but identity_types_supported [user_authorization] contains no spec-valid values (expected one of: anonymous, identity_assertion, service_auth; the assertion variant, the ID-JAG URN, lives in identity_assertion.assertion_types_supported)
How to pass
Publish RFC 9728 protected-resource metadata at /.well-known/oauth-protected-resource on your resource server (the host that actually serves the API, e.g. api.<apex>) with resource and authorization_servers. Publish RFC 8414 authorization-server metadata at /.well-known/oauth-authorization-server on the AS origin, and include the WorkOS auth.md agent_auth block with identity_endpoint, identity_types_supported drawn from the spec enum (anonymous, identity_assertion, service_auth - the assertion variant, the ID-JAG URN urn:ietf:params:oauth:token-type:id-jag, belongs inside identity_assertion.assertion_types_supported, not at the top level), and the identity_assertion.assertion_types_supported block when you advertise that type, so agents can check their assertion shape is accepted before minting. Cross-link by listing the AS origin in PRM authorization_servers, and point agent_auth.skill back at your published /auth.md. Spec: https://github.com/workos/auth.md.
401 at https://app.stuntdouble.io at /api/mcp with spec-shaped WWW-Authenticate hint: Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://app.stuntdouble.
agent_auth endpoints reachable (source: AS metadata agent_auth block) - identity_endpoint: HTTP 204, claim_endpoint: not advertised, events_endpoint: not advertised
docs MCP returns structured JSON-RPC errors with code and message
docs MCP uses modern Streamable HTTP transport
WebMCP mentioned in documentation at /docs but not implemented on homepage
How to pass
Expose in-page tools through WebMCP, a proposed web standard for browser agents. Register tools with document.modelContext.registerTool() and use navigator.modelContext only as a trailing compatibility fallback. Declarative forms with toolname and tooldescription provide server-rendered evidence, but remain a preview and should not be your only tool surface. Chrome's origin trial covers versions 149-156, with shipping currently targeted for 157. ChatGPT can discover and call WebMCP site tools in the desktop app's built-in browser when the feature is available.
202 Accepted responses found but no clear polling pattern (Location header, /jobs path, or job_id schema)
How to pass
For long-running operations, return 202 Accepted and point agents at where to poll for the result (a status/location reference plus a job identifier in the body), documented in your OpenAPI spec, so work that does not finish in one request is still followable.
No MCP server card found for https://www.stuntdouble.io/mcp (checked /.well-known/mcp/server-card.json, the site's ai-catalog.json, servers[].card in mcp.json, and <server>/server-card)
How to pass
Publish a server card for each MCP server (draft MCP server-card extension). List each card in /.well-known/ai-catalog.json, or serve it at <server URL>/server-card. /.well-known/mcp/server-card.json is still read for a site with one server, but the extension does not recommend it. Include name, description, and version, and put the server's exact address in remotes[].url (serverUrl is also read) so agents match each card to the right server before connecting. Follow the extension schema for full credit: $schema set to https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json, a reverse-DNS name such as com.example/mcp, and no tools[] (agents always trust the live tools/list). Keep the description to 100 characters or fewer, as the schema requires. A card without that $schema is still read, and then an optional tools[] list completes it.
You run both: a product MCP server (https://app.stuntdouble.io/api/mcp) for actions and a docs MCP server (https://www.stuntdouble.io/api/docs-mcp) for documentation.
Server HTML is a well-structured document (main=true, landmarks=4/4, h1=1, maxHeadingSkip=1).
58 native controls, 0 non-native div-soup affordances (100% native).
57/58 interactive elements have a computable accessible name (98%).
No hidden instruction text detected in accessibility-tree attributes or off-screen content.
What does stuntdouble.io do and who is it for? Explain it back to me.
Sign me up for Vercel product updates and marketing emails.
Unsubscribe anytime. Privacy Notice
Source: Ora API
What does stuntdouble.io do and who is it for? Explain it back to me.
6 steps1 reasoning step
The agent successfully gathered what Stunt Double does, its pricing, and key differentiators by directly fetching the homepage, pricing page, and about page. The site is moderately agent-friendly but incomplete—core information was present and accessible, but critical details like actor composition and comparative positioning required the agent to flag gaps rather than retrieve answers.