Provider REST API

Infrastructure

Connect Claude to Cloudflare

Manage zones, DNS records, Workers, and analytics. Toolspoke puts 12 of its actions behind one MCP endpoint that Claude, Cursor, and Codex all speak.

Connection
Provider REST API
Authentication
API token
Actions exposed
12
Cost per call (typical)
1 credit
Adapter
Maintained by Toolspoke

Connected in three steps

  1. 1

    Install Cloudflare

    Open the marketplace in your workspace, add Cloudflare to the project your agents work in, and it appears on the gateway immediately.

  2. 2

    Connect the credential

    Authenticate with api token. Where to get one, and what it has to be able to reach, is the next section.

  3. 3

    Point your agent at the gateway

    Give your client one address, https://toolspoke.com/mcp. Claude Code takes it as a command, Claude and Claude Desktop add it as a custom connector, and Cursor, Codex and VS Code each read it from a config file of their own.

.mcp.json
{
  "mcpServers": {
    "toolspoke": {
      "type": "http",
      "url": "https://toolspoke.com/mcp"
    }
  }
}

One block covers every tool you have installed. Cloudflare shows up in the client as soon as your policy allows it, and so does everything else you install later.

Where the address goes, per client

Claude Code

Run it in your project, then /mcp to sign in

claude mcp add --transport http toolspoke https://toolspoke.com/mcp
Claude and Claude Desktop

Settings, then Connectors, then Add custom connector

https://toolspoke.com/mcp
Cursor

~/.cursor/mcp.json, or .cursor/mcp.json for one project

{ "mcpServers": { "toolspoke": { "url": "https://toolspoke.com/mcp" } } }
Codex

~/.codex/config.toml

[mcp_servers.toolspoke]
url = "https://toolspoke.com/mcp"
VS Code

.vscode/mcp.json, or the MCP: Add Server command

{ "servers": { "toolspoke": { "type": "http", "url": "https://toolspoke.com/mcp" } } }

What Cloudflare asks for

API token. You provide it once, when you install the connector. Toolspoke encrypts it at rest and decrypts it only for the length of a single call, and the gateway attaches it to the outbound request itself, so it is never part of the arguments an agent sends.

API tokenRequired
My Profile → API Tokens → Create Token. Include Zone:Read, DNS:Edit, Cache Purge, Zone Settings:Edit, Workers Scripts:Read, and Account Analytics:Read for the full action set.
v1.0-…
Account IDOptional
Dashboard → Workers & Pages → Account details. Only needed when the token can reach more than one account.

What Claude can do in Cloudflare

12 actions, each one declared and named by the connector rather than discovered at runtime. A workspace policy grants a person all of them, a hand-picked selection, everything on the read side, everything on the write side, or none.

Reads
7Reads
Writes
4Writes
Destructive
1Destructive

Reads

7

Fetches data and changes nothing.

  • list_zones

    List the zones (domains) this API token can see, with their status, plan, and nameservers. Call this first to find the zone id for the DNS, cache, and settings actions.

  • list_accounts

    List the Cloudflare accounts this API token can reach. Use it to find the account id for the Workers actions.

  • dns_records

    List DNS records for a zone, optionally filtered by name or record type. Returns the record id needed by update_dns_record and delete_dns_record.

  • zone_settings

    Read the zone's configuration settings (SSL mode, cache level, security level, always-online, HTTP/3, and so on) as id/value pairs. Use it to find the setting_id for update_zone_setting.

  • list_workers

    List the Worker scripts deployed in an account, with their last-modified time and usage model.

  • worker_status

    Check a Worker's health over a recent window: request, error, and subrequest counts broken down by invocation status, plus p50/p99 CPU time. Call this after a deploy or when a Worker is suspected of failing.

  • zone_analytics

    Daily traffic analytics for a zone from the GraphQL Analytics API: requests, bytes, cached share, unique visitors, threats, and page views per day. Use it to answer traffic, bandwidth, and cache-hit questions.

Writes

4

Creates or updates something on the other side.

  • create_dns_record

    Create a DNS record in a zone. Set proxied to true to route the hostname through Cloudflare's proxy (only valid for A, AAAA, and CNAME records).

  • update_dns_record

    Update fields on an existing DNS record. Only the fields you pass are changed; get the record_id from dns_records first.

  • purge_cache

    Purge Cloudflare's edge cache for a zone. Prefer files, tags, hosts, or prefixes; everything=true drops the whole cache and forces every request back to the origin, so use it sparingly.

  • update_zone_setting

    Change one zone setting, e.g. setting_id "ssl" with value "full", or "development_mode" with value "on". Read zone_settings first to see the current value and the accepted shape.

Destructive

1

Deletes or permanently alters something. Worth granting on purpose.

  • delete_dns_record

    DESTRUCTIVE: permanently removes one DNS record from a zone - the counterpart of create_dns_record. The zone itself is untouched, but the hostname stops resolving immediately. Confirm the record with dns_records before calling.

What it will not do

Enforced by the gateway rather than left to convention, which is why each of these can be stated flatly.

It cannot call anything else
The 12 actions above are the whole of it. A call to any other name is refused before it reaches Cloudflare rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time.
It reaches no further than your credential
Toolspoke holds no access to Cloudflare of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either.
It never hears from Cloudflare
Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in Cloudflare. An agent has to ask.
It does not smooth over provider limits
Toolspoke does not retry, queue or back off around Cloudflare's own rate limits. A call that Cloudflare refuses comes back to the agent as a failed call.

Before you connect it

What can Claude do in Cloudflare?

12 named actions: 7 that only read, 4 that write and 1 that delete or permanently alter something. They include list_zones, list_accounts and dns_records. Nothing outside that list is reachable: the connector declares each operation by name rather than proxying whatever an agent asks for.

What credentials does the Cloudflare connector need?

API token. The connector asks for api token, and optionally account id. Values are encrypted at rest and attached to the outbound request by the gateway, so they are never part of the arguments an agent sends and never reach the audit log.

Does the Cloudflare connector work with Cursor and Codex, or only Claude?

Any client that speaks MCP, and every one of them gets the same 12 actions. There is a single address, https://toolspoke.com/mcp. Claude Code adds it with claude mcp add --transport http, Claude and Claude Desktop take it as a custom connector in settings, Cursor reads it from .cursor/mcp.json, Codex from ~/.codex/config.toml, and VS Code from .vscode/mcp.json. Each of them signs in to the gateway itself, so there is no key to paste.

What does the Cloudflare connector not do?

The 12 actions above are the whole of it. A call to any other name is refused before it reaches Cloudflare rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time. Toolspoke holds no access to Cloudflare of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either. Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in Cloudflare. An agent has to ask. Toolspoke does not retry, queue or back off around Cloudflare's own rate limits. A call that Cloudflare refuses comes back to the agent as a failed call.

Can I limit which actions an agent can call?

Yes, in two places. The project switches Cloudflare's actions on and off one at a time, for everyone in the project at once, and the screen groups them by read, write and destructive so turning off everything that deletes is one click. An individual agent key can then be narrowed further, to particular toolkits in a project and to particular actions in a toolkit. Whatever it was granted, a key never reaches a project its owner cannot.

What gets recorded when an agent calls Cloudflare?

Every attempt, with the agent that made it and the person that agent belongs to, the full request payload, the response payload, the status, the duration, and the credits spent. Values whose key names a secret are masked out before the record is shown to anyone. An operation the connector marks as not retained never has its response body written at all, so the gateway keeps no second copy of what was read.