Cloudflare Tools

io.github.craft-agentPublished by GitHub account craft-agentv0.5.1Updated Nov 7, 2026

Cloudflare tools for coding agents: zones, DNS, analytics, Workers, Pages, storage and tunnels.

The publisher's own server: Cloudflare

Overview

AI-generated overview

Lets a coding agent inspect and change Cloudflare zones, DNS records, Workers, Pages, analytics and account settings through scoped API tokens.

What you can do
  • Read account details, token status and audit logs
  • List zones, view settings, SSL and DNSSEC status; change zone settings, purge cache, toggle DNSSEC
  • List, view, export and batch add, edit or delete DNS records
  • Read zone traffic, top paths, countries, statuses, security events and Workers analytics
  • List Workers, their deployments, versions, routes, domains, schedules and secret names; roll back a Worker
  • List Pages projects, deployments, build logs and custom domains; roll back production and add or remove domains
When to use it
Useful when an agent working in a repository also needs to look at or adjust the live Cloudflare setup behind it: checking DNS, purging cache, inspecting deployments or rolling back a Worker or Pages project without leaving the chat.
Requirements
Node.js 24 or later; runs locally over stdio, installed from npm or as a harness plugin. Cloudflare API tokens and account IDs are read from environment variables such as CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID, or labeled variants; a Global API Key is refused. Token scopes must cover the toolsets used. Analytics is off by default and enabled through the toolsets setting.
Before you install
Tokens grant real control over live DNS, cache, zone settings, Workers and Pages, so scope them narrowly. Write tools add, edit or delete DNS records, change zone settings, purge cache, toggle DNSSEC, roll back Workers and Pages, and add or remove custom domains; several always ask first, but some harnesses run writes unasked unless a permission rule is set. Read-only mode registers no write tools.

Installation

In SourceWeft

  1. Open Cloudflare Tools in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

cloudflare-tools

Cloudflare tools for coding agents: zones, DNS, analytics, Workers, Pages, storage and tunnels.

HarnessDeliveryPinned by
OpenCode V2native plugin (npm package, with skills)the version in the package
OpenCode V1native plugin (npm package, no skills)the version in the package
Claude Codeplugin: MCP server and skillsthe release tag, as the ref
Codexplugin: MCP server and skillsthe release tag, as the ref
Grok Buildplugin: MCP server and skillsthe release tag, as @ref
Antigravityplugin: MCP server and skillsthe release tag's tree URL
Hermes Agentnative plugin (Python, calls the command line)the release commit, as the SHA
other MCP hostMCP server from npmthe version in the package

The tools need Node.js 24 or later. docs/conventions.md describes how the tools are named and how they behave.

Install

Install from a release, never from the default branch: a release is a tag whose commit carries the built dist/, and the default branch does not. In the commands below, <version> is a release's version (1.2.3) and <sha> is the commit its tag names:

sh
gh api repos/craft-agent/cloudflare-tools/commits/v<version> --jq .sha

OpenCode

OpenCode V2 takes the package and its options in opencode.json:

json
{  "plugins": [{ "package": "@craftsamo/cloudflare-tools@<version>", "options": { "read_only": false } }],  "permissions": [{ "action": "cloudflare_*", "resource": "*", "effect": "ask" }]}

OpenCode V1 takes the package as a string, or as a pair with its options:

json
{  "plugin": [["@craftsamo/cloudflare-tools@<version>", { "read_only": false }]],  "permission": { "cloudflare_*": "ask" }}

OpenCode allows any action no rule names, so the plugin's request is granted silently unless a rule says ask. Read tools never ask, so the cloudflare_* glob is safe.

V1 registers no skills. Unpack the package and copy its skills/* folders into ~/.config/opencode/skills/:

sh
npm pack @craftsamo/cloudflare-tools@<version>tar -xzf craftsamo-cloudflare-tools-<version>.tgzmkdir -p ~/.config/opencode/skillscp -r package/skills/* ~/.config/opencode/skills/rm -rf package craftsamo-cloudflare-tools-<version>.tgz

Claude Code

sh
claude plugin marketplace add craft-agent/cloudflare-tools#v<version>claude plugin install cloudflare-tools@craft-agent

Codex

sh
codex plugin marketplace add craft-agent/cloudflare-tools --ref v<version>codex plugin add cloudflare-tools@craft-agent

Codex turns - into _ in server names, so it shows the tools as mcp__cloudflare_tools__cloudflare_*. It starts the MCP server in the plugin's install directory, which is never the caller's working tree.

Grok Build

sh
grok plugin install craft-agent/cloudflare-tools@v<version> --trust

Grok starts the MCP server in the session's working directory.

Antigravity

Install from the tree of the release tag, never from the default branch, which has no built dist/; Antigravity clones the tag into ~/.gemini/config/plugins/cloudflare-tools.

sh
agy plugin install https://github.com/craft-agent/cloudflare-tools/tree/v<version>

Hermes Agent

Hermes installs a commit, not a tag, and the plugin installs disabled:

sh
hermes plugins install craft-agent/cloudflare-tools --ref <sha>hermes plugins enable cloudflare-tools

If a Hermes gateway is already running, restart it (hermes gateway restart) to load the plugin.

Any other MCP host

Add the server to the host's MCP configuration. Flags go in args:

json
{  "mcpServers": {    "cloudflare-tools": {      "command": "npx",      "args": ["-y", "@craftsamo/cloudflare-tools@<version>", "--read-only"]    }  }}

Tools and skills

Each toolset comes with a skill that tells an agent how to use its tools.

Account (account)

Account credentials, token verification, and audit logs.

ToolWhat it doesClass
cloudflare_account_readview account details and token status, list configured accounts, or query audit logsread

The skill is cloudflare-account, shown as cloudflare-tools:cloudflare-account in Claude Code and cloudflare-tools:account in Hermes.

Zones (zones)

Zone lookup, settings (read and change), Universal SSL, certificates, and DNSSEC.

ToolWhat it doesClass
cloudflare_zone_readlist zones, view details, read settings, Universal ssl status, or dnssecread
cloudflare_zone_setting_editchange 1–20 zone settings in order; refuses a change that lowers protectionoverwrite
cloudflare_zone_setting_weakenchange zone settings in ways that lower a visitor's protection; always asks firstadministrative
cloudflare_zone_cache_purgepurge cached copies of up to 100 URLs, hosts, prefixes or tags in a zoneidempotent
cloudflare_zone_cache_purge_allpurge the whole cache of a zone; always asks firstadministrative
cloudflare_zone_dnssec_enableturn DNSSEC on for a zone; harmless until registrar publishes the DS recordidempotent
cloudflare_zone_dnssec_disableturn DNSSEC off for a zone; requires DS removed at registrar firstadministrative

The skill is cloudflare-zones, shown as cloudflare-tools:cloudflare-zones in Claude Code and cloudflare-tools:zones in Hermes.

DNS (dns)

DNS records: list, read one in full, export the zone file, add records, change them, and delete them.

ToolWhat it doesClass
cloudflare_dns_readlist records, view one in full, or export the zone file in BIND formread
cloudflare_dns_record_addadd 1–20 records of eight types in one all-or-nothing batchadd
cloudflare_dns_record_editchange 1–20 records by id in one all-or-nothing batch; never a record's typeoverwrite
cloudflare_dns_record_deletedelete 1–20 records by id, with replacements in the same batch; always asks firstadministrative

The skill is cloudflare-dns, shown as cloudflare-tools:cloudflare-dns in Claude Code and cloudflare-tools:dns in Hermes.

Analytics (analytics)

Analytics: read a zone's traffic per day (requests, bandwidth, cache hits, threats, page views and unique visitors), the most requested paths, client countries and response statuses, what the security features did (not on the Free plan) and the latest security events, and the account's Workers invocations, errors and CPU time, over a recent time range. This toolset is off by default; turn it on with the toolsets setting (see Settings).

ToolWhat it doesClass
cloudflare_analytics_readtraffic per UTC day; the top paths, countries and statuses; security and security_events; workersread

The token needs Zone → Analytics → Read, and Zone Read to look the zone up; workers needs Account → Account Analytics → Read instead.

The skill is cloudflare-analytics, shown as cloudflare-tools:cloudflare-analytics in Claude Code and cloudflare-tools:analytics in Hermes.

Workers (workers)

Workers: list them, read one's settings and bindings, deployments and versions, a zone's Worker routes, custom domains, cron triggers and secret names and types, and roll a Worker back to versions that served before. Building, uploading and deploying new code stay with Wrangler; routes, custom domains and cron triggers are read here and changed in wrangler.toml.

ToolWhat it doesClass
cloudflare_workers_readlist, view, deployments, versions, routes, domains, schedules, secrets (names only)read
cloudflare_workers_rollbackroll a Worker back to versions that served before; always asks firstadministrative

The token needs Workers Scripts Read; routes also needs Workers Routes Read; routes, and domains with zone, need Zone Read to look the zone up. The rollback needs Workers Scripts Write.

The skill is cloudflare-workers, shown as cloudflare-tools:cloudflare-workers in Claude Code and cloudflare-tools:workers in Hermes.

Pages (pages)

Pages: list projects, read their build settings, environment variable names and bindings, production and preview deployments, including which one is live, a build's logs, and custom domains; switch a project's production back or forward to a deployment that built successfully; and add or remove its custom domains. Building and deploying new code stay with Git and Wrangler; the DNS records of a custom domain stay with the DNS tools.

ToolWhat it doesClass
cloudflare_pages_readlist projects, view one, its deployments, a build's logs, custom domainsread
cloudflare_pages_rollbackswitch production to a deployment that built successfully; always asks firstadministrative
cloudflare_pages_domain_addadd a custom domain to a project, creating no DNS record; always asks firstadministrative
cloudflare_pages_domain_removeremove a custom domain from a project, deleting no DNS record; always asks firstadministrative

The token needs the Pages Read permission. The writes need Pages Write, and the DNS lookups of the domain tools need Zone Read and DNS Read.

The skill is cloudflare-pages, shown as cloudflare-tools:cloudflare-pages in Claude Code and cloudflare-tools:pages in Hermes.

Adding a tool

  1. Write the spec in src/core/<domain>/<verb>.ts with defineTool: an ID <prefix>_<domain>_<verb>, a title and description, the Zod argument and output schemas, its toolset and write class, and execute(args, context). A write tool also gives targets(args, context): what the call writes to, as a permission rule should name it.
  2. Test it beside the spec (<verb>.test.ts), calling it through invoke as the entry points do. A tool that runs a program is tested against a fake of that program on PATH; no test reaches a real service.
  3. List it in src/tools.ts. A new toolset goes into toolsets in src/project.ts (and defaultToolsets when it is on by default).
  4. Add or update the toolset's skill, skills/<prefix>-<toolset>/SKILL.md.
  5. Run pnpm run build && pnpm run manifests to list the tool in plugin.yaml, then describe it under "Tools and skills".

docs/conventions.md has the rules each step follows.

Reads and writes

Every read tool is named <prefix>_<domain>_read. Reads can run unasked; writes are confirmed by the harness.

HarnessReads without asking
OpenCodealways; the plugin asks only before a write
Claude Codethe rule mcp__plugin_cloudflare-tools_cloudflare-tools__*_read in permissions.allow of ~/.claude/settings.json
Codexalways; Codex runs tools that declare readOnlyHint unasked, as the read tools do
Grok Buildgrok --allow 'MCPTool(cloudflare-tools__*_read)' --allow 'MCPTool(cloudflare_*_read)' (both rules; see below)
Antigravitythe rule mcp(cloudflare-tools_cloudflare-tools/<tool id>) in permissions.allow, one for each read tool
Hermesalways; the plugin asks only before a write

Where a write is asked about, and where it is not:

  • OpenCode grants any action no rule names, so a write runs unasked unless a rule asks for it: add the cloudflare_* rule shown under OpenCode.
  • Codex under codex exec, and Grok Build under grok -p, refuse a write they cannot ask about, unless it is allowed beforehand.
  • Grok Build calls the plugin's tools through its use_tool tool, and the agent often names a tool without its server first. Grok checks the rules against the name as given, so the server-qualified rule alone does not match that first call. The second rule matches the short name; a write still matches neither.
  • Antigravity asks before any MCP tool no rule allows, reads included, and names the plugin's server cloudflare-tools_cloudflare-tools (plugin, then server). agy -p refuses a tool it cannot ask about.
  • Hermes hermes chat -q refuses a write it cannot ask about; hermes -z and --yolo skip approval, so writes then run unasked.

Settings

Every entry point takes the same settings. A flag wins over its environment variable, and an option or setting wins over the variable too.

SettingFlagVariableMeaning
toolsets--toolsetsCLOUDFLARE_TOOLS_TOOLSETSthe toolsets that are on, or all; default those src/project.ts names
read_only--read-onlyCLOUDFLARE_TOOLS_READ_ONLYregisters no tool that writes; wins over every other setting
tools--toolsCLOUDFLARE_TOOLS_TOOLSsingle tools to add by ID, whatever their toolset
exclude_tools--exclude-toolsCLOUDFLARE_TOOLS_EXCLUDE_TOOLSsingle tools to remove by ID; wins over tools and toolsets
confirm--confirmCLOUDFLARE_TOOLS_CONFIRMMCP server only: harness (default) or elicitation, as the conventions say

Lists are comma-separated in a flag or a variable. Where each harness reads them:

  • OpenCode takes the plugin options shown above, with lists as arrays and read_only as a boolean, and falls back to the variables.

  • Hermes takes plugins.entries.cloudflare-tools.settings in config.yaml:

    yaml
    plugins:  entries:    cloudflare-tools:      settings:        read_only: false        exclude_tools: []
  • Claude Code, Grok Build and Antigravity start the plugin's server without flags and pass it the client's environment, so set the variables in the environment the harness runs in.

  • Codex passes a plugin's MCP server only a few basic variables (such as PATH and HOME) and those the plugin's manifest names, which are the variables above: set them in the environment Codex runs in. To pass flags, add the server under [mcp_servers] in Codex's config.toml instead, with flags in args and the variables to forward in env_vars, as Credentials shows.

Where each harness takes the variables from, and when one needs a restart to see a change, is under Credentials.

Credentials

The tools call Cloudflare with API tokens read from the environment, never from a setting or an argument. Each token comes with the id of the one account it acts on:

VariablesPicked by
CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_IDaccount left out, or account: "default"
CLOUDFLARE_API_TOKEN_<LABEL>, CLOUDFLARE_ACCOUNT_ID_<LABEL>account: "<label>", the label in lowercase
  • The unlabeled pair has the names Wrangler reads. A label is 1 to 24 lowercase letters, digits and _, written in capitals in its variables (my_site → CLOUDFLARE_API_TOKEN_MY_SITE).
  • With account left out, a call takes the unlabeled pair, or the only label when there is no unlabeled pair; with several labels and no unlabeled pair it fails and lists them.
  • A CLOUDFLARE_API_TOKEN set without CLOUDFLARE_ACCOUNT_ID, as one exported for Wrangler may be, is still the unlabeled pair: a call that leaves account out fails, even when a complete labeled pair is set. Pass account, or unset the stray token.
  • Use an API token scoped to what the tools should do; a Global API Key is refused.

Set the variables where each harness starts the tools:

  • OpenCode V2 runs the plugin in its background service, which keeps the environment it started with: set them where the service starts, and restart it (opencode service restart) after setting or changing one. OpenCode V1 runs the plugin in its own process, so the environment it runs in is enough.

  • Claude Code, Antigravity and Grok Build pass the plugin's server the environment the harness runs in.

  • Hermes passes the environment it runs in, but a gateway already running keeps the one it started with: restart it (hermes gateway restart) after setting or changing one.

  • Codex passes a plugin's server only a few basic variables (such as PATH and HOME) and the settings' variables its manifest names, never the credentials. Add a server of the same name to ~/.codex/config.toml, which takes the plugin server's place (the plugin's skills stay), and name the variables to forward in env_vars. startup_timeout_sec gives npx time to fetch the package on the first start:

    toml
    [mcp_servers.cloudflare-tools]command = "npx"args = ["-y", "@craftsamo/cloudflare-tools@<version>"]env_vars = ["CLOUDFLARE_API_TOKEN_<LABEL>", "CLOUDFLARE_ACCOUNT_ID_<LABEL>"]startup_timeout_sec = 120
  • Any other MCP host takes them in the env of its server entry.

Layout

  • src/project.ts — the package's name, tool ID prefix, setting prefix and toolsets.
  • src/core/ — the tool contract and the tools, free of any harness and of the project's names.
  • src/tools.ts — the list of every tool, which each entry point registers.
  • src/mcp/ — the MCP server, built to dist/mcp.js and run by cloudflare-tools.
  • src/opencode/ — the OpenCode plugin, built to dist/opencode.js.
  • src/cli/ — the command line the Hermes plugin calls, built to dist/cli.js and run by cloudflare-tools-cli.
  • src/hermes/, plugin.yaml and __init__.py — the Hermes plugin.
  • skills/ — one skill per toolset, skills/<name>/SKILL.md, which every harness that takes skills loads from the package or plugin root.
  • .claude-plugin/, .codex-plugin/, .agents/plugins/, .mcp.json, .antigravity-plugin/ and mcp_config.json — the plugin manifests of the other harnesses. Codex reads .codex-plugin/plugin.json; a root plugin.json would make it load the plugin as an Agent Plugin, whose tool budget hides tools past a fixed size. The root .mcp.json is the configuration Grok Build reads (with ${CLAUDE_PLUGIN_ROOT}, the variable both Grok Build and Claude Code expand); when working on this repository in Claude Code, decline the project MCP server it offers from that file.

How a release is made is in RELEASING.md.

License

MIT

Source: README.md at commit c7a6ce8

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.5.1LatestNov 7, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Cloudflare integrations