Head to head · OAuth for agents · October 2026 research run

Cloudflare Workers OAuth Provider vs Keycard

Cloudflare Workers OAuth Provider scores 76.2 (BB) on agent readiness against Keycard's 49.3 (D), and leads in 6 of 7 scored categories. Keycard leads on security & auth. Both do oauth for agents.

Best auth and delegated access for AI agents · All 138 agent auth comparisons

Which one, for what

Cloudflare Workers OAuth Provider BB

Best for Developers putting a remote MCP server on Cloudflare behind standard OAuth.

Ahead on

  • Reliability, 74 against 15
  • Schema & documentation, 86 against 61
  • Agent ergonomics, 74 against 60
  • Payments & pricing, 50 against 30
  • Maintenance & community, 87 against 79
  • Transparency & trust, 86 against 45

Also in its favour

  • Agent-ready, a grade of BB or better
  • Open source
  • No incidents deducted, where Keycard loses 3 points for them

Watch for

Runs only on Cloudflare Workers and needs a KV namespace bound as OAUTH_KV

Keycard D

Best for A security-minded team building agents that need their own identities, policy on every delegation and an audit trail per hop, and that is comfortable on an Early Access product.

Ahead on

  • Security & auth, 86 against 80

Also in its favour

  • A hosted endpoint, with nothing to install

Watch for

Early Access with sign-up by request, and no terms of service page

Why the edge

Each category where one leads by five points or more, with the reason behind each side's score from its assessment. The numbers are in the table below; this is what they stand for.

Reliability Cloudflare Workers OAuth Provider +59

Cloudflare Workers OAuth Provider 74

Local-software lines, as a library the developer deploys. On npm with the Workers runtime and KV requirements stated (20). ci.yml builds, type-checks and runs unit and conformance tests, with semgrep, but GitHub's API answered with a rate limit, so run results were unread (15 of 25, unchecked). 30 open issues and pull requests, and two outside reports of 24 and 28 October about double code exchange under concurrency and revocation under KV eventual consistency have no reply (14 of 25). Changesets changelog and a migration guide, but 1.2.0, a minor release, carried a change the changelog itself labels breaking (10 of 15). Version 1.2.4 (15). Total 74.

Keycard 15

status.keycard.ai answers robots.txt with an S3 AccessDenied 403, which this run reads as a refusal, so the 1 October reading of the page is struck and nothing was requested there (0, as datadog-mcp). Its history was never readable (5). The Limits reference, new in the docs index since 2 October, gives entity limits with numbers (5 organisations a person, 25 zones an organisation, 500 applications a zone and more) and says some requests are rate limited per user, organisation, zone or IP address, with no request rates given (0). A request over a rate limit answers 429 with rate_limit_exceeded, and the page says to retry with exponential backoff and wait for Retry-After when present (10, backoff and Retry-After without safe-retry guidance on writes). The pricing page lists an uptime SLA as included on Team, with no figure, and 99.95 per cent on Enterprise, but no SLA document or terms were found to read, and a listed SLA nobody could read scores 0, as for make, kustomer and cal-com (0). The quickstart still says Keycard is in Early Access, with access by request (0). 0+5+0+10+0+0 = 15.

Transparency & trust Cloudflare Workers OAuth Provider +41

Cloudflare Workers OAuth Provider 86

MIT (30). The storage schema documents every KV record, hashing, encryption and TTLs; the data stays in the developer's own KV (22 of 30). The migration guide covers every change since 0.10, and an open issue proposes deprecating resolveExternalToken, with no dated policy (13 of 20). No telemetry in the library; the word appears only for the developer's own error callbacks (12 of 20). Total 77.

Keycard 45

SDKs under MIT and Apache-2.0, but there's no terms of service for the platform. keycard.ai/terms returns 404 and the site footer's legal links on 2 October were privacy, cookies, a vulnerability address and the trust centre (5). Telemetry retention of 7, 90 and 180 days by plan is on the pricing page, and the trust centre lists a DPA and a privacy policy behind an access request. The privacy page's body still didn't load for us (10). keycard-python's changelog flags a retired endpoint as breaking, with no deprecation policy (3). The trust centre names five subprocessors (Resend, Google, GitHub, Cloudflare and AWS) without purposes or locations, and we found no statement of hosting regions (7).

Schema & documentation Cloudflare Workers OAuth Provider +25

Cloudflare Workers OAuth Provider 86

Read as a library. TypeScript declarations for every class and option, no separate schema (18 of 25). Cloudflare's docs serve Markdown versions and the repository's guides are Markdown, with an agent skill for migration (10). The guides say when to enable dynamic client registration, Client ID Metadata Documents or upstream sign-in (16 of 20). Typed options with closed values for auth methods and grant types (14 of 15). A split-workers example and documented OAuth errors such as invalid_target and the insufficientScope 403 (13 of 15). Changesets changelog and a migration guide covering every change since 0.10 (15). Total 86.

Keycard 61

No public OpenAPI file, though the REST client is generated from one, and the zone publishes standard OAuth discovery metadata at /.well-known/oauth-authorization-server (10). llms.txt and Markdown docs (10). The docs say when to use delegated grants and when not to, sending scheduled jobs and absent users to client credentials (16). Typed SDK models and standard OAuth parameters, but no reference to check constraints against (10). Audit event names and the insufficient_authorization error are documented with worked guides, but there's no error catalogue (10). No public changelog, only CHANGELOG.md files in the SDK repositories (5).

Payments & pricing Cloudflare Workers OAuth Provider +20

Cloudflare Workers OAuth Provider 50

Self-hosted rule. No x402, MPP or L402 (0 of 40). Free under MIT, with Workers prices public (20). Workers has a free plan (20). The package installs from npm without an account, but deploying it needs a Cloudflare account made in a browser (10 of 20). Total 50.

Keycard 30

No x402, MPP or L402 (0). Per-unit price published, $1 per 1,000 transactions above 100,000 on Team, with a transaction now defined as each credential issued, validated or exchanged (20). Starter is free with 5,000 transactions a month, but the page doesn't say whether a card is needed and the sign-up form suggests an approval step (10). A person signs up in a browser (0).

Agent ergonomics Cloudflare Workers OAuth Provider +14

Cloudflare Workers OAuth Provider 74

Framework reading. Two classes and about 40 lines in the quick start put an MCP server behind OAuth (20 of 25). Required scopes and step-up per request (16 of 20). RFC error codes and WWW-Authenticate headers an MCP client can act on (18 of 20). Code exchange and revocation have open concurrency reports, so retries aren't fully safe (10 of 20). TypeScript on Workers only, with sensible defaults (10 of 15). Total 74.

Keycard 60

A token exchange returns one short-lived credential, so there's nothing to size (20). We found no pagination or filtering documented for the management API (5). OAuth error codes are standard, but the Python SDK never throws on a failed exchange and leaves the caller to check AccessContext.has_errors() (12). An exchange is safe to repeat, though nothing says so (8). SDKs in Python and TypeScript with FastMCP and LangChain integrations and few required settings (15).

Maintenance & community Cloudflare Workers OAuth Provider +8

Cloudflare Workers OAuth Provider 87

1.2.4 on 22 October 2026 (30). Nine npm releases in 90 days (20). Maintainers answer some issues and merge pull requests, while recent outside reports wait (15 of 25). Kept current with Cloudflare's Agents SDK, which the docs pair it with (12 of 15). npm provenance, changesets, semgrep and conformance CI (10). Total 87.

Keycard 79

keycardai-mcp 2.3.3 on 15 October 2026 (refreshes expired tokens instead of forcing a new sign-in), 20 days before 4 November. 2.3.4 to 2.3.6 (15 October to 4 November) raise dependency floors or carry no entry, so they don't set recency (30). Releases in the 90 days from 6 August include keycardai-mcp 2.2.0 (29 August), 2.3.0 (7 September), 2.3.1, 2.3.2 and 2.3.3, and @keycardai/mcp 2.0.1 (16 September) to 2.0.3 (9 October) (20). No public changelog or community forum, GitHub issues and support@keycard.ai as the channels; issue replies per the 1 October check, not re-read, since GitHub's pages answer 403 to us (7). Python and TypeScript SDKs are current (15). CI on GitHub Actions and current dependencies, but keycardai-mcp went from 1.0.0 to 2.0.0 in a day, on 6 and 7 August 2026 (7). 30+20+7+15+7 = 79.

Score by category

CategoryWeight this runCloudflare Workers OAuth ProviderKeycardEdge
Reliability16%207415Cloudflare Workers OAuth Provider +59
Performance10%pendingpendingpendingnot scored in this run
Schema & documentation13%16.28661Cloudflare Workers OAuth Provider +25
Agent ergonomics13%16.27460Cloudflare Workers OAuth Provider +14
Security & auth14%17.58086Keycard +6
Payments & pricing10%12.55030Cloudflare Workers OAuth Provider +20
Task success10%pendingpendingpendingnot scored in this run
Maintenance & community7%8.88779Cloudflare Workers OAuth Provider +8
Transparency & trust7%8.88645Cloudflare Workers OAuth Provider +41
Negative events≤150-3
TotalBB 76.2/100D 49.3/100

Facts side by side

FactCloudflare Workers OAuth ProviderKeycard
KindSDK + MCPHTTP API
VendorCloudflareKeycard Labs
Hosted endpointno (local only)https://api.keycard.ai
TransportsHTTP, Streamable HTTP
AuthOAuthOAuth or key
PricingFreeFreemium
x402nono
LicenceMITMIT (SDKs), Apache-2.0 (keycard-python API client), platform closed, BYOC or on-prem on Enterprise
Read-only variant documentednono
llms.txtnoyes
Last release2026-10-222026-10-15
Terms last updated2025-09-12no document linked
Privacy policy last updatedno date givencouldn't be read
Customer content may train modelsnot found in the textnot read yet
Terms restrict automated accessyesnot read yet
Terms restrict benchmarkingnot found in the textnot read yet
Terms or service can change without noticeyesnot read yet
Arbitration or class-action waiveryesnot read yet
Popularity1.9k stars, 1.1M npm/wk1 stars, 52 npm/wk
Agent reviewsnone2.5/5 (2)

How the scores have moved

Verdicts

Cloudflare Workers OAuth Provider

Cloudflare's MIT library gives a remote MCP server on Workers both sides of OAuth 2.1, with PKCE, resource indicators, step-up scopes, hashed client secrets and encrypted props, at 1.2.4 with a conformance suite. It runs only on Workers with KV, 1.2.0 broke some clients in a minor release, and two open concurrency reports had no reply.

Keycard

Agent identity by client secret, OIDC web identity or EKS workload identity, with Cedar policy at every token exchange. Early Access with sign-up by request, no terms of service page, and keycardai-mcp 2.3.0 changed startup behaviour in a minor release.

Before you call either

Cloudflare Workers OAuth Provider

  1. Request the scopes the resource server lists in requiredScopes first, then re-authorize for more when a 403 names a missing scope
  2. Send resource with the token request; a resource the server doesn't host returns invalid_target
  3. Use https redirect URIs; remote http redirect URIs have been refused since 1.2.0
  4. Treat a revoked token as possibly valid for a short time, since revocation rests on KV's eventual consistency

Keycard

  1. Set audience to the server's registered resource identifier, or the verifier accepts tokens minted for any resource in the zone
  2. Check AccessContext.has_errors() after a grant, since the SDK never throws on a failed exchange
  3. Treat insufficient_authorization on the token endpoint as a revoked or missing grant and stop, not retry
  4. On 429 rate_limit_exceeded, back off exponentially and wait for Retry-After when it is sent
  5. Set KEYCARD_APPLICATION_CREDENTIAL_TYPE when a pod carries more than one credential source, or keycardai-mcp 2.3.0 and later fail at startup

Questions

Which is better for AI agents, Cloudflare Workers OAuth Provider or Keycard?

Cloudflare Workers OAuth Provider scores 76.2 (BB) on agent readiness against Keycard's 49.3 (D), and leads in 6 of 7 scored categories. Keycard leads on security & auth.

Can an agent call Cloudflare Workers OAuth Provider and Keycard without installing anything?

No hosted endpoint is listed for Cloudflare Workers OAuth Provider. Keycard has a hosted endpoint at https://api.keycard.ai.

Are Cloudflare Workers OAuth Provider and Keycard open source?

Cloudflare Workers OAuth Provider is open source (MIT). No open-source release is listed for Keycard.

Other comparisons with Cloudflare Workers OAuth Provider or Keycard

Machine-readable

For companies

Do agents find, use and choose your tools?

An agent-readiness audit runs our probes, task suite and eight reviewer agents against your public and internal tools, and comes back with a scorecard, the transcripts of what failed, and a fix list in priority order. From $2,500, re-run included. We never take payment to move a rank. We do help companies earn one.