fly.io
Finalizing the report
Preparing the stored Is Agentic score
fly.io
Preparing the stored Is Agentic score
fly.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
Needs work
Weighted across 3 applicable checks
Blocked
Weighted across 1 applicable check
Critical access gaps come first, followed by other applicable readiness gaps.
Declare scoped API permissions where machines can read them: named OAuth scopes in your OpenAPI security schemes, or scopes_supported in RFC 9728 protected-resource metadata. Prose descriptions of roles help humans, but agents need the machine-readable declaration to request least-privilege access.
Return standard rate-limit headers on your API responses (the RFC RateLimit headers, plus Retry-After on a 429) so agents can self-throttle in real time, and document the conventions alongside your API.
Build an MCP (Model Context Protocol) server exposing your API as tools. Use Streamable HTTP transport for full score. This lets Claude, ChatGPT, and other AI agents call your product natively.
Offer a free tier or trial, self-serve API key generation, and a sandbox environment. Agents can't fill out 'contact sales' forms.
Make your API spec self-describing: a unique operationId and a description on every operation, typed parameters, and response schemas. For GraphQL, a fully typed schema with a documented cost or rate limit reads best.
Checks are grouped by relevance for App sites.
4806 chars, semantic headings (1 H1 + 10 H2s + 13 H3s), 14.0% 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://fly.io/openapi.json (version: 3.1.0)
Canonical URL serves text/markdown and text/html via Accept negotiation with Vary: Accept
OAuth endpoint found at https://fly.io/oauth/authorize
OpenAPI declares security schemes but no named OAuth scopes - agents get all-or-nothing access. Declare per-scope grants (e.g. read:*, write:*) in the spec.
How to pass
Declare scoped API permissions where machines can read them: named OAuth scopes in your OpenAPI security schemes, or scopes_supported in RFC 9728 protected-resource metadata. Prose descriptions of roles help humans, but agents need the machine-readable declaration to request least-privilege access.
API returns JSON error responses (404 at https://fly.io/api/v1/orank-probe-test)
Nonexistent paths return HTTP 404 with markdown guidance for agents - the strongest 404 contract
Valid sitemap found at https://fly.io/sitemap.xml with multiple sitemaps entries
Rich JSON-LD identity: Organization with name, description, url, and sameAs/logo/address (7 blocks)
Pricing page found at /pricing
Documentation site found at https://docs.fly.io
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 ~17K tokens)
REST API documentation found at https://docs.fly.io/getting-started/index.md. GraphQL endpoint at https://api.fly.io/graphql is reachable and introspectable. Best-of-protocols score: 7/7.
Onboarding signals described but not verified live: free tier available, self-serve key generation, sandbox/test environment
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 redirects to an HTML page (https://docs.fly.io/model-context-protocol), not an MCP endpoint
How to pass
Build an MCP (Model Context Protocol) server exposing your API as tools. Use Streamable HTTP transport for full score. This lets Claude, ChatGPT, and other AI agents call your product natively.
No REST rate-limit headers found on probed endpoints (GraphQL signal: fail 0).
How to pass
Return standard rate-limit headers on your API responses (the RFC RateLimit headers, plus Retry-After on a 429) so agents can self-throttle in real time, and document the conventions alongside your API.
OpenAPI defines a typed error schema in components.schemas and 4xx/5xx responses reference it
API versioning strategy found (URL versioning) with sunset/deprecation markers documented
CLI package found on npm: @fly/cli
75% of operations define typed response schemas, 73% use application/json
GraphQL schema declares typed error model wired into a payload (AppCertificateValidationError, CertificateValidationErrorCodeEnum)
GraphQL schema declares @deprecated on at least one field
GraphQL schema exposes Relay-style Connection / PageInfo types
GraphQL schema exposes async-job mutation createCheckJob
REST: agent-friendly schema (100 operations, 100% with operationIds, 100% documented by description or summary) | GraphQL: schema reachable (396 types, 125 operations) but no cost/rate-limit directives | Combined score: 1.5/2
How to pass
Make your API spec self-describing: a unique operationId and a description on every operation, typed parameters, and response schemas. For GraphQL, a fully typed schema with a documented cost or rate limit reads best.
Compatible: 100/100 ops with IDs, 97/100 with typed schemas
ARD catalog valid at /.well-known/ard.json (spec 1.0) - 4/4 entries
Valid AI Catalog at /.well-known/ai-catalog.json (spec 1.0) - 4/4 entries
All 4 entries valid with domain-anchored urn:air identifiers (catalog at /.well-known/ard.json)
Agent discovered 2 developer-resource types by name (API docs, SDK documentation) across 6 pages
fly.io ranks #6 for "fly Cloud Platform"
How to pass
Make sure your own domain ranks in the top results when people search your brand together with your main product (for example "Acme payments API"). If it does not, your brand may be too generic, conflict with a more established term, or not yet indexed. Strengthen it by describing your main product clearly in your homepage title and headings, earning press mentions that link to your domain, and avoiding redirect chains that mask your main domain in search results.
Wikidata Q133943318 (Fly.io) verified - draft a Wikipedia page with cited references to complete knowledge graph coverage
How to pass
Establish a Wikipedia article and a Wikidata entity for your brand, with the domain set as the official website (Wikidata property P856) and a corresponding external link on Wikipedia. Wikipedia is the largest single source of citations in ChatGPT and a primary input to Knowledge Graphs across Google, Bing, and LLM training data. Earn third-party press coverage first to satisfy notability, then draft the article with cited references rather than self-promotion.
NPM package found: @fly/sprites - "JavaScript and TypeScript SDK for Fly.io Sprites: computers for agents. Node-style APIs for creating Sprites, running remote commands, moving files, and managing checkpoints."
Found in ChatGPT app directory: "Sprites"
Agent Skills index (agentskills.io) found at /.well-known/agent-skills/index.json with 2 skill(s)
Index $schema is "https://agentskills.io/schemas/v0.2.0/index.json" - unknown version, expected https://schemas.agentskills.io/discovery/0.2.0/schema.json
How to pass
Upgrade /.well-known/agent-skills/index.json to the v0.2.0 schema: add "$schema": "https://schemas.agentskills.io/discovery/0.2.0/schema.json", and give every entry a type (skill-md or archive), url, and digest. Use "digest": "sha256:<64 lowercase hex chars>" (e.g. "digest": "sha256:a3f1...") - a bare "sha256": "<hex>" field is also accepted. Compute the value from the artifact's raw bytes. For archives, hash the ZIP or tar.gz download itself; a separate skill-md entry is not required.
pricing.md found at /pricing.md but thin (142 lines) - add plan tiers, prices, and feature breakdowns
How to pass
Create a /pricing.md file with your pricing tiers, features, and limits in plain markdown. This lets AI agents compare costs and recommend plans without scraping HTML pricing pages.
RFC 8288 Link header advertises: describedby, service-doc, api-catalog
Full markdown fallback support. Homepage (https://fly.io/index.md) and all 1 sampled content pages return markdown: https://fly.io/blog/mcps-everywhere.md
100% of 500 sampled sitemap entries carry lastmod; newest is 0 day(s) old
Found the llms.txt at https://fly.io/llms.txt.
The llms.txt is well-formatted with markdown links, but at 82,005 characters it exceeds the 30,000-character recommendation for a navigation index.
How to pass
Format your llms.txt as a navigation index: start with a markdown heading, include markdown links to deeper resources, and keep it under 30,000 characters. If you have more to say, move long-form content into /llms-full.txt or per-section files (e.g. /docs/llms.txt, /api/llms.txt) and link to them from the main index.
Strong entity linking via sameAs: wikidata.org, github.com, linkedin.com
Some extended schema types found: Service - 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://fly.io/index.md serves markdown
Frontmatter with title + description on /index.md
Code fences balanced across 1 markdown document
Developer portal found at /docs
RFC 9727 api-catalog with 3 API link(s) and rfc9727 profile
Path-suffix markdown docs served with text/markdown content-type: /auth.md, /index.md
auth.md at https://fly.io/auth.md served as text/markdown; charset=utf-8 (5000 chars)
auth.md at https://fly.io/auth.md mentions one spec anchor (agent_auth) but lacks the prescribed walkthrough structure (0/8 walkthrough sections)
How to pass
Structure /auth.md as the WorkOS spec prescribes: sections for Discover, Pick a method, Register, Claim, Exchange, Use the access_token, Errors, and Revocation, with spec anchor keywords (agent_auth, identity_endpoint, identity_assertion, service_auth, id-jag, WWW-Authenticate). Reference https://github.com/workos/auth.md.
Imperative WebMCP API detected (document.modelContext.registerTool in script bundle /phx/assets/js/webmcp-b24f6115bfbb3751e7cc9d89d7e3139a.js).
Cursor-based pagination found in OpenAPI spec response schemas or query parameters
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.
SDK packages found across 4 ecosystems: npm, pypi, go, rubygems
Server HTML is a well-structured document (main=true, landmarks=4/4, h1=1, maxHeadingSkip=1).
80 native controls, 0 non-native div-soup affordances (100% native).
76/76 interactive elements have a computable accessible name (100%).
3/3 form controls have an associated label (100%).
No hidden instruction text detected in accessibility-tree attributes or off-screen content.
What does fly.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 fly.io do and who is it for? Explain it back to me.
14 steps3 reasoning steps6 searches
The agent successfully assembled a comprehensive explanation of Fly.io's purpose, target audience, pricing model, and competitive positioning by combining direct site fetches (homepage, pricing, docs, about) with heavy reliance on web search results and prior knowledge. The site's marketing-forward homepage and fragmented information architecture forced the agent to conduct 6 follow-up web searches to piece together coherent answers about what Fly.io actually does, who uses it, and how it's priced—indicating moderate navigability for agents seeking structured product understanding.