MCP server for managing Cloudflare DNS records and Cloudflare Tunnels
Cloudflare MCP has clear verb-noun naming (dns_list, tunnel_create) and all 9 tools have descriptions. However, descriptions are terse (avg ~50 chars, well below the 194-char baseline), parameter descriptions lack detail on constraints and formats, and output schemas are not documented. Input schemas use Zod but lack explicit type/description pairs for all parameters. Error handling is minimal, most failures return generic text without recovery guidance. The server follows basic tool registration patterns but lacks production-grade polish.
Create a new DNS record
Delete a DNS record by name
Get a DNS record by name
List all DNS records in the configured Cloudflare zone
Update an existing DNS record
Set the public-hostname ingress of a tunnel (hostname → local service). Adds a catch-all 404.
Create a remotely-managed cloudflared tunnel and return its run token. Idempotent by name.
Descriptions are terse (avg 50 chars vs 194-char baseline). Most lack context on WHEN to use the tool, prerequisites, or what it returns. E.g., 'List Cloudflare tunnels in the account' does not explain tunnel purpose or when to call it vs tunnel_token.
Output schemas are not documented. Callers cannot predict response structure. E.g., dns_list returns formatted text lines, not structured JSON with id/type/name/content fields. LLMs cannot extract data for downstream tool calls.
Parameter descriptions lack format/constraint details. E.g., 'name' in dns_get says 'Full record name, e.g. app.example.com' but does not specify if wildcards are allowed, max length, or required format. 'type' in dns_list lacks enum values in description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
List Cloudflare (cloudflared) tunnels in the account
Get the run token for an existing tunnel (by name)
Error handling is minimal. Most failures return plain text ('Record not found', 'No account id available') without recovery guidance. No distinction between retryable vs fatal errors. LLMs cannot determine next steps.
tunnel_configure has no input schema visible in source. Parameters are not documented. Cannot verify if it accepts hostname/service mappings or what structure is expected.