Server data from the Official MCP Registry
Cloudflare MCP Server — 84 tools for DNS, Tunnels, WAF, Zero Trust, R2, KV & Workers
Cloudflare MCP Server — 84 tools for DNS, Tunnels, WAF, Zero Trust, R2, KV & Workers
Valid MCP server (1 strong, 1 medium validity signals). 8 known CVEs in dependencies (1 critical, 5 high severity) Package registry verified. Imported from the Official MCP Registry.
5 files analyzed · 9 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Unverified package source
We couldn't verify that the installable package matches the reviewed source code. Proceed with caution.
Set these up before or after installing:
Environment variable: CLOUDFLARE_API_TOKEN
Environment variable: CLOUDFLARE_ACCOUNT_ID
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-itunified-io-cloudflare": {
"env": {
"CLOUDFLARE_API_TOKEN": "your-cloudflare-api-token-here",
"CLOUDFLARE_ACCOUNT_ID": "your-cloudflare-account-id-here"
},
"args": [
"-y",
"@itunified.io/mcp-cloudflare"
],
"command": "npx"
}
}
}From the project's GitHub README.
Slim Cloudflare MCP Server for managing DNS, zones, tunnels, WAF, Zero Trust, and security via Cloudflare API v4.
No SSH. No shell execution. API-only. 3 runtime dependencies.
75 tools across 11 domains:
npm install
cp .env.example .env # Edit with your Cloudflare API token
npm run build
node dist/index.js # stdio transport for MCP
mcp-cloudflare supports loading Cloudflare credentials from a central
HashiCorp Vault instance at startup via AppRole
authentication. This is optional — the server works fine with plain environment
variables alone.
On startup, if NAS_VAULT_ADDR is set the server performs an AppRole login,
fetches the KV v2 secret at <mount>/data/cloudflare/api, and injects the
values into the process environment before the MCP transport starts. The
loader is fully opportunistic:
NAS_VAULT_ADDR is unset, the loader is a silent no-op. No Vault
calls are made and the server behaves exactly as before.fetch (Node 20+) — no additional runtime dependencies.Explicit env vars (CLOUDFLARE_API_TOKEN etc.) > Vault > error (missing creds)
If you set CLOUDFLARE_API_TOKEN directly, the Vault loader will not
overwrite it. Vault only fills in credentials that are not already present in
the environment.
| Variable | Required | Description |
|---|---|---|
NAS_VAULT_ADDR | Yes* | Vault server address (e.g., https://vault.example.com:8200) |
NAS_VAULT_ROLE_ID | Yes* | AppRole role ID for this server |
NAS_VAULT_SECRET_ID | Yes* | AppRole secret ID for this server |
NAS_VAULT_KV_MOUNT | No | KV v2 mount path (default: kv) |
* Only required if using Vault. All three must be set together.
Write the Cloudflare credentials to the following path in Vault:
Path: kv/cloudflare/api
{
"api_token": "your-cloudflare-api-token",
"account_id": "your-account-id"
}
Key mapping:
| Vault key | Environment variable |
|---|---|
api_token | CLOUDFLARE_API_TOKEN |
account_id | CLOUDFLARE_ACCOUNT_ID |
1. Write credentials to KV v2:
vault kv put kv/cloudflare/api \
api_token="your-cloudflare-api-token" \
account_id="your-account-id"
2. Create a Vault policy:
# cloudflare-mcp-policy.hcl
path "kv/data/cloudflare/api" {
capabilities = ["read"]
}
vault policy write cloudflare-mcp cloudflare-mcp-policy.hcl
3. Enable AppRole auth and create a role:
vault auth enable approle
vault write auth/approle/role/cloudflare-mcp \
token_policies="cloudflare-mcp" \
token_ttl="1h" \
token_max_ttl="4h" \
secret_id_ttl="0" # 0 = no expiry; set a duration for rotation
4. Retrieve the role ID and secret ID:
vault read auth/approle/role/cloudflare-mcp/role-id
vault write -f auth/approle/role/cloudflare-mcp/secret-id
When using Vault, no Cloudflare credentials are needed in the MCP config — only the three Vault variables:
{
"mcpServers": {
"cloudflare": {
"command": "npx",
"args": ["@itunified.io/mcp-cloudflare"],
"env": {
"NAS_VAULT_ADDR": "https://vault.example.com:8200",
"NAS_VAULT_ROLE_ID": "your-role-id",
"NAS_VAULT_SECRET_ID": "your-secret-id"
}
}
}
}
NAS_VAULT_KV_MOUNT can be omitted if your KV engine is mounted at the
default path kv. The Cloudflare API token and account ID will be fetched
automatically at startup.
Add to .mcp.json in your project root:
{
"mcpServers": {
"cloudflare": {
"command": "node",
"args": ["/path/to/mcp-cloudflare/dist/index.js"],
"env": {
"CLOUDFLARE_API_TOKEN": "your-api-token-here",
"CLOUDFLARE_ACCOUNT_ID": "your-account-id"
}
}
}
}
| Variable | Required | Default | Description |
|---|---|---|---|
CLOUDFLARE_API_TOKEN | Yes | — | Cloudflare API Token (with appropriate permissions) |
CLOUDFLARE_ACCOUNT_ID | No | — | Cloudflare Account ID (required for account-level operations) |
CLOUDFLARE_TIMEOUT | No | 30000 | Request timeout in milliseconds |
NAS_VAULT_ADDR | No | — | HashiCorp Vault URL, enables Vault AppRole loading (see below) |
NAS_VAULT_ROLE_ID | No | — | Vault AppRole role_id |
NAS_VAULT_SECRET_ID | No | — | Vault AppRole secret_id |
NAS_VAULT_KV_MOUNT | No | kv | Vault KV v2 mount path |
If you run a central Vault instance, mcp-cloudflare can fetch its credentials
at startup via AppRole instead of passing them through the MCP config:
export NAS_VAULT_ADDR=https://vault.example.com
export NAS_VAULT_ROLE_ID=<role-id>
export NAS_VAULT_SECRET_ID=<secret-id>
# optional — defaults to "kv"
export NAS_VAULT_KV_MOUNT=kv
The loader reads KV v2 at <mount>/data/cloudflare/api and expects two keys:
api_token and account_id. Example Vault write:
vault kv put kv/cloudflare/api \
api_token=your-api-token-here \
account_id=00000000000000000000000000000000
Precedence: process.env (explicit) > Vault. If NAS_VAULT_ADDR is unset
the loader is a silent no-op — the server behaves exactly as before. On any
Vault error (network, auth, missing path), a single-line warning is written
to stderr and the server falls back to whatever env vars are already set.
Security: secret values are never logged. Only the KV path name and a
populated-count appear in stderr diagnostics. Uses the global fetch
(Node 20+) — no new runtime dependencies.
Create an API Token at dash.cloudflare.com/profile/api-tokens with the following permissions based on what you need:
All zone-scoped tools accept a zone_id parameter that can be either:
00000000000000000000000000000001) — used directlyexample.com) — resolved automatically via the Cloudflare APIThis allows managing multiple zones by name without needing to look up IDs manually.
Tools documentation is coming in v1 as tool modules are implemented. See docs/api-reference.md for the planned API endpoint mapping.
Claude Code skills compose MCP tools into higher-level workflows. See .claude/skills/README.md for detailed documentation.
| Skill | Slash Command | Description |
|---|---|---|
| cloudflare-health | /cf-health | Zone health dashboard — DNS, security, tunnels, WAF, DDoS status |
| cloudflare-live-test | /cf-test | Live integration test — read + safe writes with cleanup |
| cloudflare-dns-management | — | DNS record management — add, list, update, delete across zones |
| cloudflare-incident-response | — | DDoS/attack emergency response — detect, assess, mitigate, monitor |
| cloudflare-security-audit | — | Security posture audit — WAF, events, IP access, DDoS analytics |
| cloudflare-tunnel-management | — | Tunnel management — create, configure ingress, monitor connections |
| cloudflare-waf-management | — | WAF management — custom rules, rulesets, IP access, Under Attack |
| cloudflare-zero-trust | — | Zero Trust — access apps, policies, identity providers, gateway |
| cloudflare-kv-manage | — | Workers KV — namespace and key-value CRUD operations |
| cloudflare-worker-deploy | — | Workers — script deployment, routes, secrets, analytics |
| cloudflare-r2-manage | — | R2 Storage — bucket and object management, audit workflows |
npm run build # Compile TypeScript
npm test # Run unit tests (vitest)
npm run typecheck # Type check only (no emit)
See CONTRIBUTING.md for contribution guidelines.
This project is dual-licensed:
If you use mcp-cloudflare in a proprietary product or SaaS offering, a commercial license is required. Support development by sponsoring us on GitHub.
Be the first to review this server!
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.
by Taylorwilsdon · Productivity
Control Gmail, Calendar, Docs, Sheets, Drive, and more from your AI