# Cloudflare Workers OAuth Provider vs Keycard

> Cloudflare Workers OAuth Provider scores 76.2 (BB) to Keycard's 49.3 (D) for oauth for agents. Prices, MCP, x402, uptime and agent notes side by side.

- Canonical: https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-keycard
- Markdown: https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-keycard.md (~4,650 tokens)
- Site index for agents: https://www.anchorterminal.com/llms.txt (the key docs and every listing in one file, at most 16 MB, about 4 million tokens: https://www.anchorterminal.com/llms-full.txt)
- API: https://www.anchorterminal.com/api/v1/index.json
- MCP: https://www.anchorterminal.com/mcp (the whole catalogue as tools, no key)
- DNS: dig +short TXT <slug>.grade.anchorterminal.com (the grade as a DNS TXT record, for a sandbox with no HTTP where names still resolve; also top., best.<category>. and <a>.vs.<b>. under the zone, and the same under grade.letme.dev)
- Licence: CC BY 4.0, credit Anchor Terminal and link this page (https://www.anchorterminal.com/terms/#data)
- Updated: 2026-11-07

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.

- Cloudflare Workers OAuth Provider: grade BB, 76.2/100, rank #47 of 1486. Markdown https://www.anchorterminal.com/tools/cloudflare-workers-oauth-provider.md · JSON https://www.anchorterminal.com/api/v1/tools/cloudflare-workers-oauth-provider.json
- Keycard: grade D, 49.3/100, rank #1089 of 1486. Markdown https://www.anchorterminal.com/tools/keycard.md · JSON https://www.anchorterminal.com/api/v1/tools/keycard.json
- Best auth and delegated access for AI agents: https://www.anchorterminal.com/best/agent-auth/index.md
- All 138 agent auth comparisons: https://www.anchorterminal.com/compare/agent-auth/index.md

## Which one, for what

### Cloudflare Workers OAuth Provider (BB)

Good 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)

Good 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

### 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 | Cloudflare Workers OAuth Provider | Keycard | Edge |
| --- | --- | --- | --- | --- |
| Reliability | 16% (20 this run) | 74 | 15 | Cloudflare Workers OAuth Provider +59 |
| Performance | 10%, pending | pending | pending | not scored in this run |
| Schema & documentation | 13% (16.2 this run) | 86 | 61 | Cloudflare Workers OAuth Provider +25 |
| Agent ergonomics | 13% (16.2 this run) | 74 | 60 | Cloudflare Workers OAuth Provider +14 |
| Security & auth | 14% (17.5 this run) | 80 | 86 | Keycard +6 |
| Payments & pricing | 10% (12.5 this run) | 50 | 30 | Cloudflare Workers OAuth Provider +20 |
| Task success | 10%, pending | pending | pending | not scored in this run |
| Maintenance & community | 7% (8.8 this run) | 87 | 79 | Cloudflare Workers OAuth Provider +8 |
| Transparency & trust | 7% (8.8 this run) | 86 | 45 | Cloudflare Workers OAuth Provider +41 |
| Negative events | ≤15 | 0 | -3 | |
| **Total** | | **76.2 · BB** | **49.3 · D** | |

## 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

### Cloudflare Workers OAuth Provider

No score change since it was listed.

### Keycard

- -7.0 on 4 November 2026 (C to D): new evidence, correction
- +0.1 on 27 October 2026: new evidence
- -0.1 on 8 October 2026: checklist

## 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.


## For agents

- This comparison as JSON: https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-keycard.json, and with the fewest tokens: https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-keycard.min.md
- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {"a": "cloudflare-workers-oauth-provider", "b": "keycard"}`. From a terminal: `anchor compare cloudflare-workers-oauth-provider keycard`
- Each listing in full: https://www.anchorterminal.com/api/v1/tools/cloudflare-workers-oauth-provider.json and https://www.anchorterminal.com/api/v1/tools/keycard.json

## Other comparisons with Cloudflare Workers OAuth Provider or Keycard

- [Aembit vs Cloudflare Workers OAuth Provider](https://www.anchorterminal.com/compare/aembit-vs-cloudflare-workers-oauth-provider.md)
- [Aembit vs Keycard](https://www.anchorterminal.com/compare/aembit-vs-keycard.md)
- [Amazon Bedrock AgentCore Identity vs Cloudflare Workers OAuth Provider](https://www.anchorterminal.com/compare/agentcore-identity-vs-cloudflare-workers-oauth-provider.md)
- [Amazon Bedrock AgentCore Identity vs Keycard](https://www.anchorterminal.com/compare/agentcore-identity-vs-keycard.md)
- [Arcade.dev vs Cloudflare Workers OAuth Provider](https://www.anchorterminal.com/compare/arcade-vs-cloudflare-workers-oauth-provider.md)
- [Arcade.dev vs Keycard](https://www.anchorterminal.com/compare/arcade-vs-keycard.md)
- [Auth0 for AI Agents (Token Vault) vs Cloudflare Workers OAuth Provider](https://www.anchorterminal.com/compare/auth0-ai-agents-vs-cloudflare-workers-oauth-provider.md)
- [Auth0 for AI Agents (Token Vault) vs Keycard](https://www.anchorterminal.com/compare/auth0-ai-agents-vs-keycard.md)
- [Cloudflare Workers OAuth Provider vs Descope Agentic Identity Hub](https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-descope-agentic-identity.md)
- [Cloudflare Workers OAuth Provider vs Microsoft Entra Agent ID](https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-microsoft-entra-agent-id.md)
- [Cloudflare Workers OAuth Provider vs Nango](https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-nango.md)
- [Cloudflare Workers OAuth Provider vs Scalekit AgentKit](https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-scalekit-agentkit.md)
- [Cloudflare Workers OAuth Provider vs Stytch Connected Apps](https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-stytch-connected-apps.md)
- [Cloudflare Workers OAuth Provider vs Vercel Connect](https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-vercel-connect.md)
- [Cloudflare Workers OAuth Provider vs WorkOS Pipes and Agents](https://www.anchorterminal.com/compare/cloudflare-workers-oauth-provider-vs-workos-pipes.md)
- [Descope Agentic Identity Hub vs Keycard](https://www.anchorterminal.com/compare/descope-agentic-identity-vs-keycard.md)
- [Keycard vs Microsoft Entra Agent ID](https://www.anchorterminal.com/compare/keycard-vs-microsoft-entra-agent-id.md)
- [Keycard vs Nango](https://www.anchorterminal.com/compare/keycard-vs-nango.md)
- [Keycard vs Scalekit AgentKit](https://www.anchorterminal.com/compare/keycard-vs-scalekit-agentkit.md)
- [Keycard vs Stytch Connected Apps](https://www.anchorterminal.com/compare/keycard-vs-stytch-connected-apps.md)
- [Keycard vs Vercel Connect](https://www.anchorterminal.com/compare/keycard-vs-vercel-connect.md)
- [Keycard vs WorkOS Pipes and Agents](https://www.anchorterminal.com/compare/keycard-vs-workos-pipes.md)

---

Query this catalogue directly over MCP: https://www.anchorterminal.com/mcp (Streamable HTTP, no key). How: https://www.anchorterminal.com/agents/#mcp
