cal.com/docs/api-reference/v2/introduction
Finalizing the report
Preparing the stored Is Agentic score
cal.com/docs/api-reference/v2/introduction
Preparing the stored Is Agentic score
cal.com/docs/api-reference/v2/introduction
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 12 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.
Keep the correct HTTP 404 status. The remaining requirement is a Markdown error body when agents request Accept: text/markdown. Include at least 20 characters explaining the error and a link to your docs, sitemap, or llms.txt. Verify with curl -sS -L -i -H 'Accept: text/markdown' https://yourdomain.com/some-path-that-does-not-exist. Check both the final 404 status and the Markdown body with Content-Type: text/markdown. Checking the status alone does not verify the missing requirement.
Serve at least 500 characters of meaningful homepage content in raw HTML. Add a clear H1, keep deeper heading levels sequential, and remove excessive non-content markup.
Add JSON-LD structured data to your homepage using the identity type that matches your site - SoftwareApplication for products, Organization or LocalBusiness for companies, Person for personal sites, Article for blogs - with name, description, url, and type-appropriate fields (offers, sameAs, author) so AI can parse your identity programmatically.
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.
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.
Checks are grouped by relevance for App sites.
4689 chars with H1, but first content heading is H3, not H1; 0.8% content ratio is below the 5% target
How to pass
Serve at least 500 characters of meaningful homepage content in raw HTML. Add a clear H1, keep deeper heading levels sequential, and remove excessive non-content markup.
Site accessible to 4 agent user-agents (ChatGPT-User, OAI-SearchBot, Claude-User, PerplexityBot).
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://cal.com/docs/api-reference/v2/openapi.json (version: 3.0.0)
Canonical URL serves text/markdown and text/html via Accept negotiation with Vary: Accept
OAuth authorization server metadata at https://mcp.cal.com (issuer=https://mcp.cal.com)
scopes_supported declares 57 scope(s) in RFC 9728 metadata (e.g. EVENT_TYPE_READ, EVENT_TYPE_WRITE, BOOKING_READ)
API returns JSON error responses (410 at https://api.cal.com/orank-probe-test)
The nonexistent path https://cal.com/__ora-404-probe-85f6a4h6 correctly returns HTTP 404. Partial credit: no Markdown error body was detected.
How to pass
Keep the correct HTTP 404 status. The remaining requirement is a Markdown error body when agents request Accept: text/markdown. Include at least 20 characters explaining the error and a link to your docs, sitemap, or llms.txt. Verify with curl -sS -L -i -H 'Accept: text/markdown' https://yourdomain.com/some-path-that-does-not-exist. Check both the final 404 status and the Markdown body with Content-Type: text/markdown. Checking the status alone does not verify the missing requirement.
Agent discovered 2 developer-resource types by name (API docs, auth docs) across 4 pages
cal.com ranks #1 for "cal appointment booking"
No noindex on the homepage: no robots, googlebot or bingbot meta tag and no X-Robots-Tag header hides it from search.
Valid sitemap found at https://cal.com/sitemap.xml with multiple sitemaps entries
No JSON-LD structured data found on homepage
How to pass
Add JSON-LD structured data to your homepage using the identity type that matches your site - SoftwareApplication for products, Organization or LocalBusiness for companies, Person for personal sites, Article for blogs - with name, description, url, and type-appropriate fields (offers, sameAs, author) so AI can parse your identity programmatically.
Pricing page found at /pricing
Documentation site found at https://cal.com
When-to-use guidance found in llms.txt
All metadata signals present: canonical URL, lang="en", og:image, og:type
No JSON-LD found - Organization schema missing
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.
About, Privacy pages verified - missing: Contact
How to pass
Publish real /about, /contact, and /privacy pages with at least 500 characters of content each. These are the pages AI agents check to verify your business is legitimate before recommending you.
All 7 measured pages fit an agent context budget (largest ~3K tokens)
Code fences balanced across 2 markdown documents
Developer portal found at /developers
REST API documentation found at https://cal.com/docs/api-reference/v2/introduction. Best-of-protocols score: 7/7.
Low friction onboarding verified live: free tier available, self-serve key generation, sandbox/test environment, zero-auth access, zero-friction self-serve registration at /api/v1/agents/register
MCP server detected at https://mcp.cal.com; it requires authentication. Presence is verified (5/6), but Ora could not inspect its tools or verify access scopes without credentials.
How to pass
Keep authentication enabled. Verify tool listing with an authorized MCP client. This unauthenticated scan cannot establish whether protected tools are missing or unusable.
The live API at https://api.cal.com/ returns legacy x-ratelimit-limit-default, x-ratelimit-remaining-default, x-ratelimit-reset-default 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.
Partial typed error model: error schema defined but not consistently referenced (or vice versa)
How to pass
Document your error responses in your OpenAPI spec: give 4xx and 5xx responses a typed error schema (or use RFC 9457 application/problem+json). A consistent error object with a machine-readable code and a human-readable message lets agents handle failures without guessing.
API versioning found (URL versioning (servers or paths)) but no deprecation or sunset policy detected - add Sunset/Deprecation headers or a deprecation policy page
How to pass
Declare a versioning policy agents can rely on: version your API (in the URL path or a version header) and publish how you signal deprecation (a Sunset/Deprecation header or a documented timeline). Agents avoid integrating against a surface that can change without warning.
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.
96% of operations define typed response schemas, 96% use application/json
REST: agent-friendly schema (418 operations, 100% with operationIds, 100% documented by description or summary)
Compatible: 418/418 ops with IDs, 418/418 with typed schemas
ARD catalog valid at /.well-known/ai-catalog.json (spec 1.0) - 3/3 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) - 3/3 entries
All 3 entries valid with domain-anchored urn:air identifiers (catalog at /.well-known/ai-catalog.json)
Wikidata Q134218991 (Cal.com) 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.
Verified in npm as @calcom/cal-mcp via package-owner - 14515 agent uses
NPM package found: @calcom/embed-react - "Embed Cal Link as a React Component"
Found in ChatGPT app directory: "Cal.com"
Agent Skills index (agentskills.io) found at /.well-known/agent-skills/index.json with 2 skill(s)
Index v0.2.0 conformant; verified SHA-256 of "cal-com-booking-api" (skill-md); 1 other skill present; not fetched
1 official skill published on skills.sh - 208 total installs (skills.sh/calcom)
MCP server discoverable via server-card.json at /.well-known/mcp/
Found the llms.txt at https://cal.com/llms.txt.
The llms.txt starts with a heading and has 153 lines, but it contains no markdown links.
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.
Skills.sh presence exists but limited - 1 skill (goal: 5+)
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.
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
product MCP requires authentication with OAuth metadata discovery
RFC 8414 OAuth metadata for product MCP: issuer=https://mcp.cal.com, 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
RFC 9728 metadata at https://mcp.cal.com: resource=https://mcp.cal.com/mcp, authorization_servers (1), bearer_methods_supported
auth.md at https://cal.com/auth.md served as text/markdown; charset=utf-8 (1980 chars)
auth.md at https://cal.com/auth.md - 2/8 walkthrough sections (found Discover and Use credential; missing Pick a method, Register, Claim, Exchange, Errors, and Revocation); anchors: oauth-protected-resource and oauth-authorization-server
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.
Static fallback: PRM + AS metadata both reachable but AS metadata lacks an agent_auth block; walkthrough cannot identify a registration template
How to pass
Make your published auth-discovery chain traversable end to end: an agent starting at /auth.md (or your protected-resource metadata) should be able to follow the links to your authorization-server metadata and registration endpoint without hitting a dead link. Test the whole path, not just each file in isolation.
PRM + AS metadata both present (PRM discovered at https://mcp.cal.com) (AS metadata fetched from advertised origin https://mcp.cal.com) but AS metadata has no agent_auth block
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://mcp.cal.com at /mcp with spec-shaped WWW-Authenticate hint: Bearer resource_metadata="https://mcp.cal.com/.well-known/oauth-protected-resource/mcp"
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 toolname forms do not count: the WebMCP specification does not define them, so register the same actions with registerTool(). 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.
Cursor-based pagination found in OpenAPI spec response schemas or query parameters
SDK package found only in npm
How to pass
Publish official SDK packages across multiple language ecosystems (npm, PyPI, Go modules, RubyGems). Auto-generate them from your OpenAPI spec using tools like openapi-generator. For each package set the project URL or homepage to your product domain (package.json repository/homepage, PyPI Home-Page or project_urls, RubyGems homepage_uri) - this is how agents verify the package is your official SDK.
Sandbox environment found at https://cal.com/sandbox
Batch/bulk operations mentioned at https://cal.com but no formal OpenAPI definition found
How to pass
Offer a batch endpoint that accepts an array of operations in one request, documented in your spec, so an agent acting on many items can do it in bulk instead of looping one call at a time.
49 native controls, 4 non-native div-soup affordances (92% native).
49/49 interactive elements have a computable accessible name (100%).
No hidden instruction text detected in accessibility-tree attributes or off-screen content.
What does cal.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 cal.com do and who is it for? Explain it back to me.
12 steps4 reasoning steps2 searches
The agent successfully assembled a comprehensive explanation of Cal.com by fetching the homepage, pricing page, features page, and about page directly from the site, then supplemented with third-party comparison content and blog posts from Cal.com itself. The site's marketing pages loaded but rendered key content (pricing details, feature lists) via JavaScript, forcing the agent to rely on third-party pricing guides and Cal.com's own blog comparisons to extract concrete details. The agent delivered a clear, structured answer covering what Cal.com does, its target users, pricing tiers, and competitive positioning, though some specifics (exact current pricing, Cal.ai details) remained opaque.