Finalizing the report
Preparing the stored Is Agentic score
Preparing the stored Is Agentic score
www.asana.com
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.
Ready with gaps
Weighted across 17 applicable checks
Ready with gaps
Weighted across 9 applicable checks
Strong
Weighted across 3 applicable checks
Ready with gaps
Weighted across 1 applicable check
Critical access gaps come first, followed by other applicable readiness gaps.
Return a real HTTP 404 (or 410) status for nonexistent paths - never a 200 with your app shell, which makes agents believe every path exists. For full credit, give the 404 response a short markdown body pointing agents at your sitemap, llms.txt, or docs index. Verify with curl -s -o /dev/null -w "%{http_code}" https://yourdomain.com/some-path-that-does-not-exist - it must print 404.
Server-side render your homepage so AI crawlers see meaningful content without JavaScript. Ensure an H1 and 500+ chars of text in raw HTML.
Publish an OpenAPI (Swagger) specification at /openapi.json or /api/openapi.yaml. This is how agents understand your API surface automatically.
Ensure API endpoints have unique operation IDs, typed schemas, and descriptions compatible with LLM function-calling formats.
Reduce markup overhead so readable text is at least 5% of your HTML. Strip unused inline scripts/styles, server-render content instead of shipping large JSON hydration blobs, and keep wrapper nesting shallow.
Checks are grouped by relevance for Docs & content sites.
5827 chars with H1 but flat heading structure
How to pass
Server-side render your homepage so AI crawlers see meaningful content without JavaScript. Ensure an H1 and 500+ chars of text in raw HTML.
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)
No OpenAPI/Swagger specification found
How to pass
Publish an OpenAPI (Swagger) specification at /openapi.json or /api/openapi.yaml. This is how agents understand your API surface automatically.
Canonical URL serves text/markdown and text/html via Accept negotiation with Vary: Accept
OAuth authorization server metadata at https://mcp.asana.com (issuer=https://mcp.asana.com)
Scoped permissions documented at /developers
API returns JSON error responses (404 at https://api.asana.com/api/v1/orank-probe-test)
Nonexistent paths return a real HTTP 404. For full credit, include a short markdown body (site map links, where to look next) so agents can recover.
How to pass
Return a real HTTP 404 (or 410) status for nonexistent paths - never a 200 with your app shell, which makes agents believe every path exists. For full credit, give the 404 response a short markdown body pointing agents at your sitemap, llms.txt, or docs index. Verify with curl -s -o /dev/null -w "%{http_code}" https://yourdomain.com/some-path-that-does-not-exist - it must print 404.
Agent found developer resources by name including developer portal (5 relevant pages). Not searchable: MCP server. Not found via search: OpenAPI spec, auth docs
How to pass
Make your developer resources (API docs, OpenAPI spec, auth docs, webhooks, MCP server) discoverable by name. Publish them at predictable URLs, list them in llms.txt, and include your product name in page titles and headings so search engines surface them for name-based queries.
asana.com appears at position #2 in a clean brand-name search for "Asana productivity" (7 total matches)
Valid sitemap found at https://asana.com/sitemap-index.xml with multiple sitemaps entries
Very low content efficiency: 0.99% (8083 text chars in 797KB HTML) - agents must process excessive markup noise
How to pass
Reduce markup overhead so readable text is at least 5% of your HTML. Strip unused inline scripts/styles, server-render content instead of shipping large JSON hydration blobs, and keep wrapper nesting shallow.
Rich JSON-LD identity: Organization with name, description, url, and sameAs/logo/address (1 block)
Documentation site found at https://asana.com
When-to-use guidance found in llms.txt
All metadata signals present: canonical URL, lang="en", og:image, og:type
Organization schema found but missing: address
How to pass
Add Organization JSON-LD that includes both contactPoint (with email/phone and contactType) and address (PostalAddress). This lets AI verify your business legitimacy and answer contact queries.
All trust anchor pages verified: About, Contact, Privacy
All 8 measured pages fit an agent context budget (largest ~2K tokens)
Code fences balanced across 3 markdown documents
Developer portal found at /developers
REST API documentation found at https://developers.asana.com/docs/. GraphQL endpoint at https://api.asana.com/graphql is reachable; introspection requires authentication (API key / OAuth), which is expected for agent access. Best-of-protocols score: 7/7.
Low friction onboarding: free tier available, self-serve key generation, sandbox/test environment
Live MCP server at https://mcp.asana.com/mcp requires authentication (OAuth challenge at initialize) - properly scoped. Upgrade to public tool listing for full 6/6.
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.
The live API at https://developers.asana.com/ returns legacy x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset headers. Adopting the IETF RateLimit-* standard would earn full credit.
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.
CLI tool found on PyPI: asana-cli
GraphQL: schema details documented at https://developers.asana.com/docs/overview-of-app-components (introspection auth-gated)
No API spec found - function calling requires discoverable endpoints
How to pass
Ensure API endpoints have unique operation IDs, typed schemas, and descriptions compatible with LLM function-calling formats.
Verified in Smithery as asana via verified-curation - 94 agent uses, verified
NPM package found: asana - "This_is_the_interface_for_interacting_with_the__Asana_Platform_httpsdevelopers_asana_com__Our_API_reference_is_generated_from_our__OpenAPI_spec__httpsraw_githubusercontent_comAsanaopenapimasterdefsasana_oas_yaml_"
3 official skills published on skills.sh - 3 total installs (skills.sh/asana)
Found in ChatGPT app directory: "Asana"
Structured pricing.md found at /pricing.md (309 lines)
MCP server at https://mcp.asana.com/mcp - consider adding /.well-known/mcp for standard discovery
How to pass
Serve your MCP server at /.well-known/mcp, publish a server-card.json at /.well-known/mcp/server-card.json, or reference it in llms.txt so agents can discover it automatically without manual URL input.
Full markdown fallback support. Homepage (https://asana.com/index.md) and all 2 sampled content pages return markdown: https://asana.com/apps/zapier.md, https://asana.com/developers.md
100% of 500 sampled sitemap entries carry lastmod; newest is 1 day(s) old
Found the llms.txt at https://asana.com/llms.txt.
The llms.txt is well-formatted: 55 lines with markdown links, 5,691 characters in total.
Skills.sh presence exists but limited - 3 skills (goal: 5+), 3 installs (goal: 200+)
How to pass
Expand your skills.sh presence with multiple skill repos covering different use cases. Add descriptive skill names, clear SKILL.md files, and organize by capability area.
Entity linking to linkedin.com - add more authority profiles (Wikipedia, Wikidata, LinkedIn, GitHub)
How to pass
Add sameAs links in your JSON-LD structured data pointing to your Wikipedia page, Wikidata entry, GitHub org, and social profiles. This helps AI disambiguate your brand from similarly named entities.
Some extended schema types found: BreadcrumbList - 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://asana.com/index.md serves markdown
Path-suffix markdown docs served with text/markdown content-type: /developers.md, /index.md
product MCP requires authentication with OAuth metadata discovery
RFC 8414 OAuth metadata for product MCP: issuer=https://mcp.asana.com, auth and token endpoints present
OAuth metadata for product MCP supports PKCE S256 code challenge
RFC 9728 protected resource metadata found on MCP origin (resource=https://mcp.asana.com)
401 at https://mcp.asana.com at /mcp with spec-shaped WWW-Authenticate hint: Bearer realm="OAuth", resource_metadata="https://mcp.asana.com/.well-known/oauth-protected-resource", error="invalid_tok
SDK packages found across 3 ecosystems: npm, pypi, rubygems
234 native controls, 12 non-native div-soup affordances (95% native).
234/234 interactive elements have a computable accessible name (100%).
No hidden instruction text detected in accessibility-tree attributes or off-screen content.
What does www.asana.com 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 www.asana.com do and who is it for? Explain it back to me.