Cloudflare DNS MCP server: manage zones, records, cache purge, and page rules.
Runs on your machine from its package; the steps are below.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx mcp-cloudflare-dns
MCP client config
{
"mcpServers": {
"mcp-cloudflare-dns": {
"command": "uvx",
"args": [
"mcp-cloudflare-dns"
]
}
}
}Cloudflare DNS MCP server for operators who need zone, record, cache, and page-rule control from an MCP client without opening the Cloudflare dashboard for every change.
Release posture: beta package, version 0.1.1 from pyproject.toml.
| You are... | Start here | Then |
|---|---|---|
| Installing the server in Claude/Codex/Cursor | docs/start-here.md | Quick start below |
| Verifying what the server can touch | Available tools | docs/architecture.md |
| Auditing packaging or release metadata | pyproject.toml | server.json |
flowchart TD
U[AI operator] --> C[MCP client]
C --> S[FastMCP server]
E[CF_API_TOKEN] --> S
S --> T[Tool handlers]
T --> R[Retry wrapper]
R --> A[Cloudflare API]
A --> R --> T --> C
flowchart TD
Q[Operator asks for a DNS change] --> H[Selected MCP tool]
H --> I[Load token and build client]
I --> J{Cloudflare call succeeds?}
J -- yes --> K[Return normalized JSON result]
J -- retryable --> L[Backoff and retry]
L --> J
J -- no --> M[Return error payload]
python -m pip install mcp-cloudflare-dns
export CF_API_TOKEN="your-cloudflare-api-token"
{
"mcpServers": {
"cloudflare-dns": {
"command": "uvx",
"args": ["mcp-cloudflare-dns"],
"env": {
"CF_API_TOKEN": "your-cloudflare-api-token"
}
}
}
}
| Tool group | Tools | Purpose |
|---|---|---|
| Zone inventory | list_zones, get_zone, get_zone_settings | Inspect available zones and key settings |
| DNS records | list_dns_records, get_dns_record, create_dns_record, update_dns_record, delete_dns_record | Read and mutate records |
| Edge actions | purge_cache, list_page_rules | Invalidate cached content and inspect page rules |
delete_dns_record and full-cache actions stay gated behind the destructive env flags described in
docs/start-here.md.
| Claim | Proof |
|---|---|
| Package entry point is stable | mcp-cloudflare-dns = "cf.server:main" in pyproject.toml |
| Server is MCP-specific, not a generic CLI | FastMCP("mcp-cloudflare-dns") in cf/server.py |
| Cloudflare failures are retried | _call() in cf/server.py |
| Release artifacts are built | dist/ wheel and tarball are checked into the repo |
| Path | Purpose |
|---|---|
cf/server.py | FastMCP tool surface, env loading, retry wrapper |
pyproject.toml | Package metadata, version, script entry point |
server.json | Registry-facing metadata for MCP discovery |
docs/start-here.md | Setup, env, validation, common failures |
docs/architecture.md | Component map and request lifecycle |
| Check | Command |
|---|---|
| Import compiles | python -m compileall cf |
| Package builds | python -m build |
| README links stay local | rg '\\]\\(([^)]+\\.md)\\)' README.md docs/ |
MIT
Read prompt.md, then INDEX.md, for project-specific decisions, task routes and current handoff. Historical examples do not select the current task.