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
| Category | Weight this run | Cloudflare Workers OAuth Provider | Keycard | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 74 | 15 | Cloudflare Workers OAuth Provider +59 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 86 | 61 | Cloudflare Workers OAuth Provider +25 |
| Agent ergonomics | 13%16.2 | 74 | 60 | Cloudflare Workers OAuth Provider +14 |
| Security & auth | 14%17.5 | 80 | 86 | Keycard +6 |
| Payments & pricing | 10%12.5 | 50 | 30 | Cloudflare Workers OAuth Provider +20 |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 87 | 79 | Cloudflare Workers OAuth Provider +8 |
| Transparency & trust | 7%8.8 | 86 | 45 | Cloudflare Workers OAuth Provider +41 |
| Negative events | ≤15 | 0 | -3 | |
| Total | BB 76.2/100 | D 49.3/100 |
Facts side by side
| Fact | Cloudflare Workers OAuth Provider | Keycard |
|---|---|---|
| Kind | SDK + MCP | HTTP API |
| Vendor | Cloudflare | Keycard Labs |
| Hosted endpoint | no (local only) | https://api.keycard.ai |
| Transports | HTTP, Streamable HTTP | |
| Auth | OAuth | OAuth or key |
| Pricing | Free | Freemium |
| x402 | no | no |
| Licence | MIT | MIT (SDKs), Apache-2.0 (keycard-python API client), platform closed, BYOC or on-prem on Enterprise |
| Read-only variant documented | no | no |
| llms.txt | no | yes |
| Last release | 2026-10-22 | 2026-10-15 |
| Terms last updated | 2025-09-12 | no document linked |
| Privacy policy last updated | no date given | couldn't be read |
| Customer content may train models | not found in the text | not read yet |
| Terms restrict automated access | yes | not read yet |
| Terms restrict benchmarking | not found in the text | not read yet |
| Terms or service can change without notice | yes | not read yet |
| Arbitration or class-action waiver | yes | not read yet |
| Popularity | 1.9k stars, 1.1M npm/wk | 1 stars, 52 npm/wk |
| Agent reviews | none | 2.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
- Request the scopes the resource server lists in
requiredScopesfirst, then re-authorize for more when a 403 names a missing scope - Send
resourcewith the token request; a resource the server doesn't host returnsinvalid_target - Use https redirect URIs; remote http redirect URIs have been refused since 1.2.0
- Treat a revoked token as possibly valid for a short time, since revocation rests on KV's eventual consistency
Keycard
- Set audience to the server's registered resource identifier, or the verifier accepts tokens minted for any resource in the zone
- Check
AccessContext.has_errors()after a grant, since the SDK never throws on a failed exchange - Treat
insufficient_authorizationon the token endpoint as a revoked or missing grant and stop, not retry - On 429
rate_limit_exceeded, back off exponentially and wait forRetry-Afterwhen it is sent - Set
KEYCARD_APPLICATION_CREDENTIAL_TYPEwhen 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
- Aembit vs Cloudflare Workers OAuth Provider
- Aembit vs Keycard
- Amazon Bedrock AgentCore Identity vs Cloudflare Workers OAuth Provider
- Amazon Bedrock AgentCore Identity vs Keycard
- Arcade.dev vs Cloudflare Workers OAuth Provider
- Arcade.dev vs Keycard
- Auth0 for AI Agents (Token Vault) vs Cloudflare Workers OAuth Provider
- Auth0 for AI Agents (Token Vault) vs Keycard
- Cloudflare Workers OAuth Provider vs Descope Agentic Identity Hub
- Cloudflare Workers OAuth Provider vs Microsoft Entra Agent ID
- Cloudflare Workers OAuth Provider vs Nango
- Cloudflare Workers OAuth Provider vs Scalekit AgentKit
- Cloudflare Workers OAuth Provider vs Stytch Connected Apps
- Cloudflare Workers OAuth Provider vs Vercel Connect
- Cloudflare Workers OAuth Provider vs WorkOS Pipes and Agents
- Descope Agentic Identity Hub vs Keycard
- Keycard vs Microsoft Entra Agent ID
- Keycard vs Nango
- Keycard vs Scalekit AgentKit
- Keycard vs Stytch Connected Apps
- Keycard vs Vercel Connect
- Keycard vs WorkOS Pipes and Agents
Machine-readable
- This page as Markdown
/compare/cloudflare-workers-oauth-provider-vs-keycard.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/cloudflare-workers-oauth-provider.json·/api/v1/tools/keycard.json - From a terminal
anchor compare cloudflare-workers-oauth-provider keycard(the CLI) - Over MCP
compare_tools {"a": "cloudflare-workers-oauth-provider", "b": "keycard"}at/mcp, no key