Cloudflare Vendor Dev tools

Cloudflare Workers

Deploy + manage Cloudflare Workers + Pages + KV + R2 from inside an agent conversation.

4,458 stars 575 forks Last commit 2w ago Language TypeScript License Apache-2.0
Sign in to like, install, or save to a bundle → View on GitHub → Docs ↗

Install

npx @cloudflare/mcp-server-cloudflare init

Maintain this server? Add the badge

Show your README readers it's in a curated directory — and give them a one-click path to install docs and config.

Listed on Prismix ← links back here

Markdown

[![Listed on Prismix](https://prismix.dev/api/badge/mcp/cloudflare-workers.svg)](https://prismix.dev/mcp/cloudflare-workers)
Theme-aware version (auto dark/light on GitHub) →
<a href="https://prismix.dev/mcp/cloudflare-workers"><picture><source media="(prefers-color-scheme: dark)" srcset="https://prismix.dev/api/badge/mcp/cloudflare-workers.svg?theme=dark"><img alt="Listed on Prismix" src="https://prismix.dev/api/badge/mcp/cloudflare-workers.svg"></picture></a>

Claude Desktop / Cursor config

Drop into your claude_desktop_config.json or Cursor MCP settings. Replace the ${…} placeholders with your own values.

{
  "mcpServers": {
    "cloudflare": {
      "command": "npx",
      "args": ["-y", "@cloudflare/mcp-server-cloudflare"],
      "env": {
        "CLOUDFLARE_API_TOKEN": "${CF_TOKEN}",
        "CLOUDFLARE_ACCOUNT_ID": "${CF_ACCOUNT_ID}"
      }
    }
  }
}

About

Cloudflare's official MCP server. Surfaces the Cloudflare API for Workers (list, deploy, tail logs), Pages (project list, deployments, build triggers), KV (list namespaces, read/write keys), R2 (bucket listing, object operations), and DNS records. Auth via API token with the relevant scopes.

Recent releases (5)

All releases →
  • [email protected] Latest Oct 22, 2026
    ### Minor Changes
    
    - dfd49e5: Retire the `/sse` URL and upgrade to `@cloudflare/workers-oauth-provider` 1.2.4.
    
      - Every request to `/sse` now returns `410 Gone` with an `application/problem+json` body naming the server's `/mcp` URL, before any authentication. `/sse` used to serve Streamable HTTP as an alias of `/mcp`; clients configured with it must switch to `/mcp`. MCP SDK v1 and v2 clients show the message in their connection error. It is not a redirect, because OAuth clients that follow one reject the `/mcp` protected resource metadata with an error that never mentions `/mcp`.
      - The OAuth protected resource is now `<origin>/mcp`, and every token is bound to it. Grants bound to `/mcp` keep working. Grants bound to `/sse`, or to the bare origin that 0.x advertised at the root metadata URL, fail their next refresh with `invalid_grant` (workers-oauth-provider 1.2.4), and the client signs in again at `/mcp`.
      - The consent page uses the provider's consent helpers. The authorization request stays server-side and the page posts only a single-use handle bound to the browser. Cancel now sends `access_denied` back to the MCP client. The page shows the redirect URI, the publishing domain of a Client ID Metadata Document client, and a warning when the tokens go to a local app.
      - Cloudflare sign-in uses `beginUpstream()` / `finishUpstream()` in place of the hand-rolled KV state and session cookie. Two tabs can authorize at once, and declining at Cloudflare sends `access_denied` back to the MCP client.
      - Remembered consent uses `isConsentRemembered()`. Approvals made before this change aren't carried over, so each browser sees the consent page once more.
      - Direct Cloudflare API tokens are validated for the `/mcp` resource.
    
    ### Patch Changes
    
    - 0702829: A direct Cloudflare credential that Cloudflare rejects as expired or unknown (`403 9109: Invalid access token`) now gets `401 invalid_token`, as the MCP authorization spec requires for invalid or expired tokens. Before, it got `403 insufficient_scope`, which sends clients through a scope step-up instead of re-authenticating. A valid token that lacks access still gets `403 insufficient_scope`.
    - Updated dependencies [0702829]
    - Updated dependencies [dfd49e5]
      - @repo/[email protected]
    View on GitHub ↗
  • [email protected] Oct 22, 2026
    ### Minor Changes
    
    - dfd49e5: Retire the `/sse` URL and upgrade to `@cloudflare/workers-oauth-provider` 1.2.4.
    
      - Every request to `/sse` now returns `410 Gone` with an `application/problem+json` body naming the server's `/mcp` URL, before any authentication. `/sse` used to serve Streamable HTTP as an alias of `/mcp`; clients configured with it must switch to `/mcp`. MCP SDK v1 and v2 clients show the message in their connection error. It is not a redirect, because OAuth clients that follow one reject the `/mcp` protected resource metadata with an error that never mentions `/mcp`.
      - The OAuth protected resource is now `<origin>/mcp`, and every token is bound to it. Grants bound to `/mcp` keep working. Grants bound to `/sse`, or to the bare origin that 0.x advertised at the root metadata URL, fail their next refresh with `invalid_grant` (workers-oauth-provider 1.2.4), and the client signs in again at `/mcp`.
      - The consent page uses the provider's consent helpers. The authorization request stays server-side and the page posts only a single-use handle bound to the browser. Cancel now sends `access_denied` back to the MCP client. The page shows the redirect URI, the publishing domain of a Client ID Metadata Document client, and a warning when the tokens go to a local app.
      - Cloudflare sign-in uses `beginUpstream()` / `finishUpstream()` in place of the hand-rolled KV state and session cookie. Two tabs can authorize at once, and declining at Cloudflare sends `access_denied` back to the MCP client.
      - Remembered consent uses `isConsentRemembered()`. Approvals made before this change aren't carried over, so each browser sees the consent page once more.
      - Direct Cloudflare API tokens are validated for the `/mcp` resource.
    
    ### Patch Changes
    
    - 0702829: A direct Cloudflare credential that Cloudflare rejects as expired or unknown (`403 9109: Invalid access token`) now gets `401 invalid_token`, as the MCP authorization spec requires for invalid or expired tokens. Before, it got `403 insufficient_scope`, which sends clients through a scope step-up instead of re-authenticating. A valid token that lacks access still gets `403 insufficient_scope`.
    - Updated dependencies [0702829]
    - Updated dependencies [dfd49e5]
      - @repo/[email protected]
    View on GitHub ↗
  • [email protected] Oct 22, 2026
    ### Minor Changes
    
    - dfd49e5: Retire the `/sse` URL and upgrade to `@cloudflare/workers-oauth-provider` 1.2.4.
    
      - Every request to `/sse` now returns `410 Gone` with an `application/problem+json` body naming the server's `/mcp` URL, before any authentication. `/sse` used to serve Streamable HTTP as an alias of `/mcp`; clients configured with it must switch to `/mcp`. MCP SDK v1 and v2 clients show the message in their connection error. It is not a redirect, because OAuth clients that follow one reject the `/mcp` protected resource metadata with an error that never mentions `/mcp`.
      - The OAuth protected resource is now `<origin>/mcp`, and every token is bound to it. Grants bound to `/mcp` keep working. Grants bound to `/sse`, or to the bare origin that 0.x advertised at the root metadata URL, fail their next refresh with `invalid_grant` (workers-oauth-provider 1.2.4), and the client signs in again at `/mcp`.
      - The consent page uses the provider's consent helpers. The authorization request stays server-side and the page posts only a single-use handle bound to the browser. Cancel now sends `access_denied` back to the MCP client. The page shows the redirect URI, the publishing domain of a Client ID Metadata Document client, and a warning when the tokens go to a local app.
      - Cloudflare sign-in uses `beginUpstream()` / `finishUpstream()` in place of the hand-rolled KV state and session cookie. Two tabs can authorize at once, and declining at Cloudflare sends `access_denied` back to the MCP client.
      - Remembered consent uses `isConsentRemembered()`. Approvals made before this change aren't carried over, so each browser sees the consent page once more.
      - Direct Cloudflare API tokens are validated for the `/mcp` resource.
    
    ### Patch Changes
    
    - 0702829: A direct Cloudflare credential that Cloudflare rejects as expired or unknown (`403 9109: Invalid access token`) now gets `401 invalid_token`, as the MCP authorization spec requires for invalid or expired tokens. Before, it got `403 insufficient_scope`, which sends clients through a scope step-up instead of re-authenticating. A valid token that lacks access still gets `403 insufficient_scope`.
    - Updated dependencies [0702829]
    - Updated dependencies [dfd49e5]
      - @repo/[email protected]
    View on GitHub ↗
  • [email protected] Oct 22, 2026
    ### Minor Changes
    
    - dfd49e5: Retire the `/sse` URL and upgrade to `@cloudflare/workers-oauth-provider` 1.2.4.
    
      - Every request to `/sse` now returns `410 Gone` with an `application/problem+json` body naming the server's `/mcp` URL, before any authentication. `/sse` used to serve Streamable HTTP as an alias of `/mcp`; clients configured with it must switch to `/mcp`. MCP SDK v1 and v2 clients show the message in their connection error. It is not a redirect, because OAuth clients that follow one reject the `/mcp` protected resource metadata with an error that never mentions `/mcp`.
      - The OAuth protected resource is now `<origin>/mcp`, and every token is bound to it. Grants bound to `/mcp` keep working. Grants bound to `/sse`, or to the bare origin that 0.x advertised at the root metadata URL, fail their next refresh with `invalid_grant` (workers-oauth-provider 1.2.4), and the client signs in again at `/mcp`.
      - The consent page uses the provider's consent helpers. The authorization request stays server-side and the page posts only a single-use handle bound to the browser. Cancel now sends `access_denied` back to the MCP client. The page shows the redirect URI, the publishing domain of a Client ID Metadata Document client, and a warning when the tokens go to a local app.
      - Cloudflare sign-in uses `beginUpstream()` / `finishUpstream()` in place of the hand-rolled KV state and session cookie. Two tabs can authorize at once, and declining at Cloudflare sends `access_denied` back to the MCP client.
      - Remembered consent uses `isConsentRemembered()`. Approvals made before this change aren't carried over, so each browser sees the consent page once more.
      - Direct Cloudflare API tokens are validated for the `/mcp` resource.
    
    ### Patch Changes
    
    - 0702829: A direct Cloudflare credential that Cloudflare rejects as expired or unknown (`403 9109: Invalid access token`) now gets `401 invalid_token`, as the MCP authorization spec requires for invalid or expired tokens. Before, it got `403 insufficient_scope`, which sends clients through a scope step-up instead of re-authenticating. A valid token that lacks access still gets `403 insufficient_scope`.
    - Updated dependencies [0702829]
    - Updated dependencies [dfd49e5]
      - @repo/[email protected]
    View on GitHub ↗
  • [email protected] Oct 22, 2026
    ### Minor Changes
    
    - dfd49e5: Retire the `/sse` URL and upgrade to `@cloudflare/workers-oauth-provider` 1.2.4.
    
      - Every request to `/sse` now returns `410 Gone` with an `application/problem+json` body naming the server's `/mcp` URL, before any authentication. `/sse` used to serve Streamable HTTP as an alias of `/mcp`; clients configured with it must switch to `/mcp`. MCP SDK v1 and v2 clients show the message in their connection error. It is not a redirect, because OAuth clients that follow one reject the `/mcp` protected resource metadata with an error that never mentions `/mcp`.
      - The OAuth protected resource is now `<origin>/mcp`, and every token is bound to it. Grants bound to `/mcp` keep working. Grants bound to `/sse`, or to the bare origin that 0.x advertised at the root metadata URL, fail their next refresh with `invalid_grant` (workers-oauth-provider 1.2.4), and the client signs in again at `/mcp`.
      - The consent page uses the provider's consent helpers. The authorization request stays server-side and the page posts only a single-use handle bound to the browser. Cancel now sends `access_denied` back to the MCP client. The page shows the redirect URI, the publishing domain of a Client ID Metadata Document client, and a warning when the tokens go to a local app.
      - Cloudflare sign-in uses `beginUpstream()` / `finishUpstream()` in place of the hand-rolled KV state and session cookie. Two tabs can authorize at once, and declining at Cloudflare sends `access_denied` back to the MCP client.
      - Remembered consent uses `isConsentRemembered()`. Approvals made before this change aren't carried over, so each browser sees the consent page once more.
      - Direct Cloudflare API tokens are validated for the `/mcp` resource.
    
    ### Patch Changes
    
    - 0702829: A direct Cloudflare credential that Cloudflare rejects as expired or unknown (`403 9109: Invalid access token`) now gets `401 invalid_token`, as the MCP authorization spec requires for invalid or expired tokens. Before, it got `403 insufficient_scope`, which sends clients through a scope step-up instead of re-authenticating. A valid token that lacks access still gets `403 insufficient_scope`.
    - Updated dependencies [0702829]
    - Updated dependencies [dfd49e5]
      - @repo/[email protected]
    View on GitHub ↗

Discussion (0)

Sign in to comment →

No comments yet. Sign in to start the discussion.

More Dev tools servers