mcp-cloudflare-crunchtools
MCP Cloudflare CrunchTools
Ein sicherer MCP-Server (Model Context Protocol) für Cloudflare DNS, Transform Rules, Page Rules und Cache-Verwaltung.
Übersicht
Dieser MCP-Server wurde entwickelt, um:
Standardmäßig sicher – Umfassende Bedrohungsmodellierung, Eingabevalidierung und Token-Schutz
Keine Drittanbieter-Dienste – Läuft lokal über stdio, Ihr API-Token verlässt nie Ihren Rechner
Plattformübergreifend – Funktioniert unter Linux, macOS und Windows
Automatisch aktualisiert – GitHub Actions überwachen CVEs und aktualisieren Abhängigkeiten
Containerisiert – Verfügbar unter
quay.io/crunchtools/mcp-cloudflare, basierend auf dem Hummingbird Python-Basisimage
Related MCP server: cloudflare-dns-mcp-server
Namenskonvention
Komponente | Name |
GitHub-Repository | |
Container |
|
Python-Paket (PyPI) |
|
CLI-Befehl |
|
Modulimport |
|
Warum Hummingbird?
Das Container-Image basiert auf dem Hummingbird Python-Basisimage von Project Hummingbird, das Folgendes bietet:
Minimale CVE-Exposition – Hummingbird-Images werden mit einem minimalen Paketsatz erstellt, wodurch die Angriffsfläche im Vergleich zu Allzweck-Images drastisch reduziert wird
Regelmäßige Updates – Sicherheitspatches werden zeitnah angewendet, wodurch die CVE-Anzahl niedrig bleibt
Für Python optimiert – Vorkonfigurierte Python-Umgebung mit uv-Paketmanager für schnelle, reproduzierbare Builds
Produktionsreif – Entwickelt für Produktionsworkloads mit ordnungsgemäßer Signalverarbeitung und Nicht-Root-Benutzerstandards
Das bedeutet, dass Ihr MCP-Server in einer gehärteten Umgebung mit weniger Schwachstellen läuft als typische Python-Container-Images.
Funktionen
Zonenverwaltung (2 Tools)
list_zones– Listet alle Zonen auf, die für Ihr API-Token zugänglich sindget_zone– Ruft Zonendetails anhand von ID oder Domainname ab
DNS-Einträge (5 Tools)
list_dns_records– Listet DNS-Einträge mit Filterung aufget_dns_record– Ruft einen einzelnen DNS-Eintrag abcreate_dns_record– Erstellt A-, AAAA-, CNAME-, MX-, TXT-, NS-, SRV- und CAA-Einträgeupdate_dns_record– Aktualisiert vorhandene Einträgedelete_dns_record– Löscht Einträge
Transform Rules (6 Tools)
list_request_header_rules/set_request_header_rules– Ändert Anforderungsheaderlist_response_header_rules/set_response_header_rules– Ändert Antwortheaderlist_url_rewrite_rules/set_url_rewrite_rules– URL-Pfad-/Abfrage-Umschreibungen
Page Rules (4 Tools)
list_page_rules– Listet alle Page Rules aufcreate_page_rule– Erstellt Weiterleitungen, Cache-Einstellungen, SSL-Modiupdate_page_rule– Ändert vorhandene Regelndelete_page_rule– Entfernt Regeln
Cache-Verwaltung (1 Tool)
purge_cache– Leert nach URL, Tag, Host, Präfix oder alles
Installation
Mit uvx (empfohlen)
uvx mcp-cloudflare-crunchtoolsMit pip
pip install mcp-cloudflare-crunchtoolsMit Container
podman run -e CLOUDFLARE_API_TOKEN=your_token \
quay.io/crunchtools/mcp-cloudflareKonfiguration
Erstellen eines Cloudflare-API-Tokens
Navigieren Sie zu API-Tokens
Gehen Sie zu https://dash.cloudflare.com/profile/api-tokens
Klicken Sie auf "Create Token"
Klicken Sie neben "Create Custom Token" auf "Get started"
Token-Namen konfigurieren
Geben Sie ein:
mcp-cloudflare-crunchtools
Berechtigungen konfigurieren
Der Abschnitt "Permissions" hat drei Dropdowns pro Zeile:
Erstes Dropdown: Ressourcentyp (
AccountoderZone)Zweites Dropdown: Spezifische Berechtigungskategorie
Drittes Dropdown: Zugriffsstufe (
ReadoderEdit)
Klicken Sie auf "+ Add more", um jede Berechtigungszeile hinzuzufügen. Für die vollständige Verwaltung fügen Sie hinzu:
Ressource
Berechtigung
Zugriff
Zone
Zone
Read
Zone
DNS
Edit
Zone
Page Rules
Edit
Zone
Transform Rules
Edit
Zone
Cache Purge
Purge
Zonenressourcen konfigurieren
Erstes Dropdown: Wählen Sie "Include"
Zweites Dropdown: Wählen Sie "All zones" oder "Specific zone"
Client-IP-Adressfilterung konfigurieren (optional)
Klicken Sie auf die Schaltfläche "Use my IP", um das Token auf Ihre aktuelle IP zu beschränken
Token erstellen und kopieren
Klicken Sie auf "Continue to summary" → "Create Token"
WICHTIG: Kopieren Sie das Token sofort – es wird nur einmal angezeigt!
Zu Claude Code hinzufügen
claude mcp add mcp-cloudflare-crunchtools \
--env CLOUDFLARE_API_TOKEN=your_token_here \
-- uvx mcp-cloudflare-crunchtoolsOder für die Container-Version:
claude mcp add mcp-cloudflare-crunchtools \
--env CLOUDFLARE_API_TOKEN=your_token_here \
-- podman run -i --rm -e CLOUDFLARE_API_TOKEN quay.io/crunchtools/mcp-cloudflareBerechtigungssätze nach Anwendungsfall
Schreibgeschützt (nur Anzeigen)
Ressource | Berechtigung | Zugriff |
Zone | Zone | Read |
Zone | DNS | Read |
Nur DNS-Verwaltung
Ressource | Berechtigung | Zugriff |
Zone | Zone | Read |
Zone | DNS | Edit |
Vollständige Verwaltung (alle Funktionen)
Ressource | Berechtigung | Zugriff |
Zone | Zone | Read |
Zone | DNS | Edit |
Zone | Page Rules | Edit |
Zone | Transform Rules | Edit |
Zone | Cache Purge | Purge |
Anwendungsbeispiele
Ihre Zonen auflisten
User: List my Cloudflare zones
Assistant: [calls list_zones]Einen DNS-Eintrag erstellen
User: Create an A record for www.example.com pointing to 192.168.1.1
Assistant: [calls create_dns_record with type=A, name=www, content=192.168.1.1]Sicherheitsheader hinzufügen
User: Add X-Content-Type-Options: nosniff to all responses for zone abc123...
Assistant: [calls set_response_header_rules with appropriate rule]Cache leeren
User: Purge the cache for https://example.com/styles.css
Assistant: [calls purge_cache with files=["https://example.com/styles.css"]]Sicherheit
Dieser Server wurde mit Sicherheit als Hauptanliegen entwickelt. Siehe SECURITY.md für:
Bedrohungsmodell und Angriffsvektoren
Defense-in-Depth-Architektur
Best Practices für die Token-Behandlung
Regeln für die Eingabevalidierung
Audit-Protokollierung
Wichtige Sicherheitsfunktionen
Token-Schutz
Gespeichert als SecretStr (wird nie versehentlich protokolliert)
Nur als Umgebungsvariable (nie in Dateien oder Argumenten)
Aus allen Fehlermeldungen bereinigt
Eingabevalidierung
Pydantic-Modelle für alle Eingaben
Whitelist für Eintragstypen und Aktionen
Strenge Formatvalidierung für IDs
API-Härtung
Fest codierte API-Basis-URL (verhindert SSRF)
TLS-Zertifikatsvalidierung
Anforderungs-Timeouts
Antwortgrößenbegrenzungen
Automatisiertes CVE-Scannen
GitHub Actions scannen Abhängigkeiten wöchentlich
Automatische PRs für Sicherheitsupdates
Dependabot-Warnungen aktiviert
Entwicklung
Einrichtung
git clone https://github.com/crunchtools/mcp-cloudflare.git
cd mcp-cloudflare
uv syncTests ausführen
uv run pytestLint und Typprüfung
uv run ruff check src tests
uv run mypy srcContainer erstellen
podman build -t mcp-cloudflare .Lizenz
AGPL-3.0-or-later
Mitwirken
Beiträge sind willkommen! Bitte lesen Sie SECURITY.md, bevor Sie sicherheitsrelevante Änderungen einreichen.
Links
Available Tools
26 toolscreate_dns_record_toolA
Create a new DNS record.
Args: zone_id: Zone ID (32-character hex string) type: Record type (A, AAAA, CNAME, MX, TXT, NS, SRV, CAA) name: Record name (e.g., www, @, subdomain.example.com) content: Record content (IP address, target domain, etc.) ttl: TTL in seconds, 1 = auto (default: 1) proxied: Proxy through Cloudflare (default: false) priority: Priority for MX/SRV records comment: Optional comment
Returns: Created DNS record details
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | ||
| name | Yes | ||
| type | Yes | ||
| comment | No | ||
| content | Yes | ||
| proxied | No | ||
| zone_id | Yes | ||
| priority | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It reveals that TTL 1 means auto and that records can be proxied, but says nothing about required permissions, whether creation fails or overwrites on duplicate names, or side effects on live traffic — significant gaps for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The args-style layout is front-loaded with the purpose and scannable per-parameter. It is slightly verbose (the return line is redundant given the output schema) but nothing is misplaced.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool, the parameter space is fully covered and the output schema covers returns. The only missing piece is behavioral context (auth/permissions, failure modes) that would matter for a write operation with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents all 8 parameters with formats, valid values, and defaults: hex zone_id, the full record-type enum, name examples, TTL auto meaning, and MX/SRV-specific priority. This compensates fully for the empty schema and would be hard to call correctly without it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new DNS record') with no ambiguity. Against siblings like list_dns_records_tool, get_dns_record_tool, update_dns_record_tool, and delete_dns_record_tool, the create operation is immediately distinguishable by both name and description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as update_dns_record_tool for modifying an existing record. Usage context is only weakly implied by the verb 'Create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_page_rule_toolB
Create a new page rule.
Args: zone_id: Zone ID (32-character hex string) targets: URL pattern targets actions: Page rule actions priority: Rule priority 1-1000 (default: 1) status: active or disabled (default: active)
Returns: Created page rule details
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | active | |
| actions | Yes | ||
| targets | Yes | ||
| zone_id | Yes | ||
| priority | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses little behavior beyond a mutation. It does not mention required permissions, whether creation conflicts with existing matching rules, idempotency, or zone-scoping constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded with the purpose sentence, then a clean Args/Returns layout with one line per parameter. Every line earns its place, though the Returns section is partly redundant given the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema means return values need not be explained, and the Args block covers the 0%-coverage schema reasonably. Still, for an unannotated mutation tool it omits permission requirements, conflict behavior with existing rules, and error/rollback characteristics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it documents all five parameters, including the 32-character hex format for zone_id and the semantic role of targets (URL patterns) and actions. The defaults for priority and status duplicate the schema, but the format and meaning details are genuinely additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a new page rule'), which cleanly distinguishes it from update_page_rule_tool and delete_page_rule_tool by operation. However, it does not differentiate scope or behavior from siblings like list_page_rules_tool beyond the verb itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The only implicit usage signal is the verb 'Create', which the name already supplies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_waf_rule_toolA
Create a new WAF custom rule.
Free plans support up to 5 custom rules. Provide either zone_id or zone_name, not both.
Args: zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com) expression: Cloudflare filter expression (e.g., '(http.request.uri.path contains "xmlrpc.php")') action: Action to take (managed_challenge, block, js_challenge, challenge, skip, log) description: Human-readable description of the rule enabled: Whether the rule is enabled (default: true)
Returns: Created rule details
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | managed_challenge | |
| enabled | No | ||
| zone_id | No | ||
| zone_name | No | ||
| expression | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the free-plan rule cap, the either/or zone identifier constraint, and the enabled default, which is meaningful context. However, it omits permission requirements, whether the rule is created enabled/attached immediately, and validation failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then constraints, then a clean Args list. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with an output schema (so return values need not be described), it covers purpose, limits, and all parameters adequately. The main gap is auth/permission context and post-creation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents all six parameters including zone_id format (32-char hex), zone_name format (domain), the action enum values, the enabled default, and an example filter expression. It adds real value beyond the bare schema, though it could cover expression syntax more fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new WAF custom rule'), which cleanly distinguishes it from the sibling update_waf_rule_tool, delete_waf_rule_tool, and list_waf_rules_tool. An agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides useful operational constraints — the free-plan limit of 5 custom rules and the mutual exclusivity of zone_id vs zone_name — but never says when to prefer this over the sibling update/delete tools or what prerequisites (plan tier, permissions) are needed. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dns_record_toolB
Delete a DNS record.
Args: zone_id: Zone ID (32-character hex string) record_id: DNS record ID (32-character hex string)
Returns: Deletion confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | ||
| record_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden for a destructive operation. It mentions a 'Deletion confirmation' return but says nothing about irreversibility, required permissions, or whether the deletion is immediate versus propagated — critical for a delete tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then compact Args and Returns blocks. No filler, though the Args/Returns scaffolding is slightly verbose relative to the tiny content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so the return explanation is not needed and the 'Deletion confirmation' line is redundant but harmless. However, for a destructive tool with zero annotations, the description should disclose irreversibility or auth expectations, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: both zone_id and record_id are documented as 32-character hex strings, a format constraint absent from the schema. This adds genuine caller value, though it omits payload/query placement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a DNS record'), which distinguishes it from the many sibling delete_* tools on other resources. It does not explicitly name which sibling it complements (e.g., create_dns_record_tool / update_dns_record_tool), but the resource-specific verb is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_dns_record_tool or delete_waf_rule_tool, no prerequisites, and no mention that the record must already exist. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_page_rule_toolC
Delete a page rule.
Args: zone_id: Zone ID (32-character hex string) rule_id: Page rule ID (32-character hex string)
Returns: Deletion confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | ||
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden of behavioral disclosure for a destructive mutation. It says nothing about irreversibility, required permissions/API token scopes, idempotency, or error behavior when the rule_id is unknown. 'Deletion confirmation' is the only behavioral hint and it is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation in the first sentence, then parameter formats and return value. The Args/Returns scaffolding is boilerplate, but nothing is padded and it reads quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity (2 required params, no nesting) and an output schema exists, so return values need not be explained. The missing safety and permission context for an irreversible delete keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does partially by documenting both params and their 32-character hex format. It adds no meaning about how ids are obtained (e.g., from list_page_rules_tool) or whether zone_id and rule_id must belong to the same account.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (page rule), which cleanly separates it from create_page_rule_tool, update_page_rule_tool, and list_page_rules_tool. It does not, however, explicitly reference any sibling or scoping condition, so it sits at clear-but-undifferentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus updating or listing page rules, no prerequisite checks, and no note that the rule must already exist. An agent must infer everything from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_waf_rule_toolB
Delete a WAF custom rule.
Provide either zone_id or zone_name, not both.
Args: rule_id: Rule ID (32-character hex string) zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com)
Returns: Deletion confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | ||
| zone_id | No | ||
| zone_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only a terse "Deletion confirmation" return and stays silent on whether the deletion is permanent/irreversible, what permissions or authorization are needed, and whether the rule stops enforcing traffic immediately. For a destructive operation with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then the exclusivity constraint, then Args and Returns blocks. Each section is short and earns its place; the Args/Returns scaffolding is slightly formulaic but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so explaining return values is not required, yet the description still notes "Deletion confirmation" (harmless). The main deficiency is behavioral: for a destructive, annotation-free tool the description should at minimum signal permanence or required permissions. Parameter and identity handling are otherwise adequately covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: rule_id and zone_id are described as 32-character hex strings and zone_name as a domain like example.com, plus the mutual-exclusivity rule between zone_id and zone_name. It omits whether zone_id/zone_name are optional when a rule_id uniquely resolves, but the formats are genuinely additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Delete a WAF custom rule") that clearly distinguishes it from the delete_page_rule_tool/delete_dns_record_tool siblings and from its WAF counterparts create_waf_rule_tool/update_waf_rule_tool/list_waf_rules_tool. It does not name an alternative sibling explicitly, but the WAF-rule scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line "Provide either zone_id or zone_name, not both" is a genuine invocation constraint the agent needs. However, there is no guidance on when to reach for this tool versus list_waf_rules_tool or update_waf_rule_tool, nor any preconditions. Usage is implied by the destroy verb rather than explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_record_toolB
Get a single DNS record by ID.
Args: zone_id: Zone ID (32-character hex string) record_id: DNS record ID (32-character hex string)
Returns: DNS record details
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | ||
| record_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. 'Get' clearly implies a non-mutating read, and it notes that DNS record details are returned, but it says nothing about auth/permission requirements, error behavior for an unknown ID, or read consistency. Adequate for a simple read, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by a tidy Args/Returns block; every line carries information. Slightly formulaic structure but no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description reasonably omits return-field detail. Both required params are documented with formats, which is what an agent needs to invoke it. The only gap is guidance on choosing this tool over list_dns_records_tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description is the only source of parameter meaning – and it documents both params with a format constraint ('32-character hex string') that the schema itself lacks. That is real value beyond the schema, though it stops short of distinguishing zone_id from record_id scoping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a single DNS record by ID'), which clearly separates it from list_dns_records_tool and the create/update/delete DNS siblings. It does not, however, name an alternative or scope condition, so differentiation is implied via the name rather than spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance. An agent must infer that this tool is for fetching one record when it already holds a record_id, versus list_dns_records_tool when it does not. Nothing in the description states prerequisites or routing logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_security_events_toolA
Get security/firewall events grouped by action and source.
Provide either zone_id or zone_name, not both.
Args: zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com) since: Start date ISO format (default: 30 days ago) until: End date ISO format (default: today) limit: Number of results (default: 20)
Returns: Security events with action, country, source, and count
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| until | No | ||
| zone_id | No | ||
| zone_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses defaults (30 days ago, today, limit 20) and the grouping behavior, which is helpful, but says nothing about whether the call is read-only, permission requirements, or rate limits. Adequate but with clear gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then a compact constraint, then Args and Returns blocks. Every line is relevant; the Args listing slightly restates schema field names but adds type/default meaning. Well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, zero-annotation read tool, the definition covers purpose, exclusivity constraint, parameter meaning, defaults, and return shape. The Returns section is partly redundant given the output schema exists, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it documents all five parameters with type hints (32-char hex zone ID, domain-style zone name, ISO dates) and defaults. Enum/format nuances (e.g., accepted ISO variants) are not covered, but the semantics added are substantial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (security/firewall events) plus the aggregation dimension (grouped by action and source). This distinguishes it from analytics siblings like get_zone_analytics_tool and get_traffic_by_country_tool, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides one clear constraint — 'Provide either zone_id or zone_name, not both' — which is genuinely useful invocation guidance. However, it gives no guidance on when to choose this tool over sibling analytics/reporting tools, so usage context is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_pages_toolA
Get top pages by request count.
Provide either zone_id or zone_name, not both.
Args: zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com) since: Start date ISO format (default: 30 days ago) until: End date ISO format (default: today) limit: Number of results (default: 15)
Returns: Top pages with request counts and bandwidth
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| until | No | ||
| zone_id | No | ||
| zone_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the mutual-exclusion rule and the default retention window (30 days), which is useful. It stops short of stating auth requirements, rate limits, or error behavior when both or neither zone identifier is passed, so it only partially covers the gap left by absent annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then the key constraint, then structured Args and Returns sections. The parameter lines duplicate defaults already present in the schema, but since the schema has zero descriptions this repetition is justified rather than wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the agent does not need return values spelled out, and the description provides a brief one anyway. It covers all parameters, defaults, and the exclusivity constraint; only edge-case behavior (neither identifier, invalid format) is unaddressed, which is a minor shortfall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it documents all five parameters with formats (32-char hex zone ID, domain-style zone name, ISO dates) and defaults. The one gap is that 'limit' is only described as 'Number of results' with no bounds or max, but overall this adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get top pages by request count'), which cleanly distinguishes it from analytics siblings like get_zone_analytics_tool and get_traffic_by_country_tool. It does not, however, explicitly name or contrast against any sibling, which holds it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Provide either zone_id or zone_name, not both' constraint is genuine usage guidance about parameter exclusivity. However, it gives no guidance on when to prefer this tool over get_zone_analytics_tool or get_traffic_by_country_tool, and does not say what happens if neither identifier is supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_traffic_by_country_toolA
Get traffic breakdown by country.
Provide either zone_id or zone_name, not both.
Args: zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com) since: Start date ISO format (default: 30 days ago) until: End date ISO format (default: today) limit: Number of countries (default: 20)
Returns: Country breakdown with request counts and bandwidth
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| until | No | ||
| zone_id | No | ||
| zone_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read via "Get" and usefully documents defaults (30 days ago, today, 20 countries) and the mutual exclusivity of zone_id/zone_name, but says nothing about permissions, rate limits, pagination of country results, or ordering. Adequate but thin for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then the mutual-exclusivity rule, then structured Args/Returns blocks. Every line is scannable and earns its place; minor redundancy between "default: 30 days ago" prose and the schema defaults, but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief Returns note is sufficient rather than required. For a parameterless-required, read-only analytics query the description covers invocation adequately; the only real gap is sibling/alternative guidance and any pagination or rate-limit behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has to compensate and does: it documents every one of the five parameters including type hints (32-character hex zone ID, domain zone name, ISO date format) and the defaults for since/until/limit. This is meaningfully more than the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Get traffic breakdown by country") that distinguishes it from analytics siblings like get_top_pages_tool and get_zone_analytics_tool by naming the grouping dimension. However, it never explicitly contrasts itself with get_zone_analytics_tool, so the differentiation is inferential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage rule — "Provide either zone_id or zone_name, not both" — which prevents a real invocation error. It does not, however, say when to prefer this tool over get_zone_analytics_tool or get_top_pages_tool, so alternative routing is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_zone_analytics_toolA
Get zone traffic analytics summary.
Returns total requests, unique visitors, bandwidth, cache ratio, and status code breakdown for the given date range.
Provide either zone_id or zone_name, not both.
Args: zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com) since: Start date ISO format (default: 30 days ago) until: End date ISO format (default: today)
Returns: Analytics summary with requests, bandwidth, visitors, and status codes
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ||
| until | No | ||
| zone_id | No | ||
| zone_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the default date range behavior (30 days ago / today), which an agent needs to know, but never states that this is a read-only, non-mutating operation, nor any auth or rate-limit characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and efficiently structured with Args/Returns sections. The final 'Returns:' block largely restates the opening paragraph, which is mild redundancy rather than harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description need not explain return shape, yet it still lists metrics, and it covers all parameters and defaults. The only real gap is the absence of any read-only/side-effect statement to substitute for missing annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it documents all four parameters with formats (32-character hex string, domain like example.com, ISO date format) and default values, plus the either/or constraint that the schema does not express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get zone traffic analytics summary') and enumerates the exact metrics returned (requests, visitors, bandwidth, cache ratio, status codes). This clearly separates it from analytics siblings like get_top_pages_tool and get_traffic_by_country_tool, which cover different dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the mutual-exclusivity rule ('either zone_id or zone_name, not both') and documents the default date window. It gives clear context for calling the tool but does not name when to prefer alternative analytics siblings or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_zone_toolA
Get Cloudflare zone details by ID or name.
Provide either zone_id or zone_name, not both.
Args: zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com)
Returns: Zone details
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | No | ||
| zone_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; 'Get' implies a safe read, and the exclusivity rule is useful behavioral context. It says nothing about permissions, error behavior when neither/both args are supplied, or rate limits, but the read nature is unambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the key constraint, then compact Args entries — nothing padded. The 'Returns: Zone details' line is largely redundant given an output schema exists, but the overall size is well matched to a simple two-parameter lookup.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with an output schema, an agent has enough: which identifier to pass, that only one may be passed, and the accepted formats. Sibling routing and failure-mode behavior are the only real omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it states that zone_id is a 32-character hex string and zone_name is a domain like example.com, plus the either/or rule. Only the nullability/defaults remain undocumented, which is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get Cloudflare zone details') plus the two lookup keys, so the agent knows exactly what it retrieves. It does not, however, explicitly differentiate itself from nearby siblings like list_zones_tool or get_zone_analytics_tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mutual-exclusion rule ('Provide either zone_id or zone_name, not both') is a real usage constraint that prevents a bad call. But there is no guidance on when to prefer this tool over list_zones_tool (enumeration) or get_zone_analytics_tool (metrics), leaving sibling selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_records_toolB
List DNS records for a Cloudflare zone.
Args: zone_id: Zone ID (32-character hex string) type: Filter by record type (A, AAAA, CNAME, MX, TXT, etc.) name: Filter by record name content: Filter by record content page: Page number (default: 1) per_page: Results per page, max 100 (default: 100)
Returns: List of DNS records with pagination info
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| page | No | ||
| type | No | ||
| content | No | ||
| zone_id | Yes | ||
| per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses pagination behavior, the per_page ceiling of 100, and the default page size, which is real operational context. However it says nothing about authentication requirements, rate limits, or whether results are eventually consistent, leaving gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Args/Returns layout is front-loaded with the one-line purpose followed by scannable parameter lines. It is appropriately sized for a six-parameter tool, with only minor redundancy between the filter parameters and the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the description correctly just notes the list-with-pagination shape. Combined with complete parameter documentation, the definition is nearly sufficient, with the missing usage guidance and auth context being the only notable residue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning and it delivers for all six: zone_id as a 32-character hex string, type with concrete enum-like examples (A, AAAA, CNAME, MX, TXT), name and content filters, page default 1, and per_page max 100. It does not clarify filter combination or matching semantics (exact vs substring), which keeps it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List DNS records for a Cloudflare zone.' This cleanly separates it from single-record siblings like get_dns_record_tool, but it never names those alternatives explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of what this tool does versus get_dns_record_tool or list_zones_tool, and no preconditions such as required API token scopes. A user must infer from the filters that this is the broad enumeration call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_page_rules_toolB
List all page rules for a zone.
Args: zone_id: Zone ID (32-character hex string) status: Filter by status (active, disabled) order: Sort order (status, priority)
Returns: List of page rules
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | priority | |
| status | No | ||
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does relatively little: it implies a read via 'List' but never states read-only safety, required permissions, pagination/limit behavior, or rate limits. For a list endpoint in a large API surface with zero annotation coverage, those omissions are material.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by compact Args/Returns blocks with no filler. The structure is scannable and appropriately sized for a three-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and parameters are covered. What is missing is behavioral context an agent would want: pagination behavior for a potentially large list, ordering defaults, and any read-safety signal absent from annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it names each of the three parameters and supplies the enum-ish values the schema lacks (status: active/disabled; order: status/priority) plus the zone_id format (32-character hex string). The only gap is not stating which parameter is required or the default sort behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List all page rules for a zone.' The resource is distinct from siblings like list_response_header_rules_tool and list_url_rewrite_rules_tool, so an agent can identify it as the page-rules lister. However, it never explicitly contrasts itself with those sibling list tools, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many sibling list tools (response header rules, request header rules, URL rewrite rules). Usage is only implied by the verb 'List.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_request_header_rules_toolB
List request header modification rules.
Args: zone_id: Zone ID (32-character hex string)
Returns: Ruleset with request header modification rules
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden; 'List' reasonably implies a non-destructive read, and it does disclose the return shape. However, it says nothing about permissions, rate limits, or pagination, which is a gap for a listing tool whose safety profile is only implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then a compact Args/Returns structure. Slightly verbose section headers for a single-parameter tool, but every line is informative and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema already present, the description covers the parameter and the general return nature. The main omission is any usage/alternative framing, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the schema only declares type string), so the description must compensate, and it does by documenting the single parameter as a 'Zone ID (32-character hex string)', adding format constraints the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('request header modification rules'), which is unambiguous. It does not explicitly name the write counterpart (set_request_header_rules_tool) or the sibling list_response_header_rules_tool, so it differentiates only implicitly through the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus set_request_header_rules_tool or list_response_header_rules_tool. There is no mention of prerequisites, scope, or when a list is preferable to a get/set call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_response_header_rules_toolB
List response header modification rules.
Args: zone_id: Zone ID (32-character hex string)
Returns: Ruleset with response header modification rules
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It mentions the return payload type but omits read-only safety, authentication requirements, pagination behavior, and rate limits; only 'List' weakly implies a non-destructive read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very brief and front-loaded: it states the action first, then input and output details in compact Args/Returns sections. Every sentence earns its place and there is no redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with an output schema, the description covers the input format and return type. But with no annotations and many related header-rule siblings, it omits routing guidance such as list vs. set vs. request-header variants, leaving a selection gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter is documented only as type string. The description adds the important format constraint '32-character hex string' and identifies it as a Zone ID, which meaningfully compensates for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('response header modification rules'), and the 'response' qualifier implicitly separates it from the sibling list_request_header_rules_tool. However, it does not explicitly name or contrast siblings, and the phrasing largely restates the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives, and no prerequisites are provided. 'List' implies a read operation, but the description does not say when to choose this over list_request_header_rules_tool or set_response_header_rules_tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_url_rewrite_rules_toolC
List URL rewrite rules.
Args: zone_id: Zone ID (32-character hex string)
Returns: Ruleset with URL rewrite rules
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses only the return shape ('Ruleset with URL rewrite rules') and implies a safe read via 'List'; it says nothing about permissions, pagination, or whether an empty result is possible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, followed by tight Args/Returns sections and no filler. It is appropriately sized for a one-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not detail return values, and it correctly avoids doing so. What is missing is behavior the schema cannot express: auth requirements, pagination, and the relationship to the set/update siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does add real value by specifying zone_id as a '32-character hex string'. However, that is the entirety of the parameter documentation, leaving format errors and constraints to be discovered by trial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List URL rewrite rules'), which clearly separates it from the sibling set_url_rewrite_rules_tool. It stops short of explicitly naming that sibling or the resource scope (zone-level), so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of the alternative set_url_rewrite_rules_tool for modifying rules, and no prerequisites. A reader can infer from the name that this is the read counterpart, but the description supplies nothing explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_waf_rules_toolA
List all WAF custom rules for a zone.
Provide either zone_id or zone_name, not both.
Args: zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com)
Returns: List of WAF rules with their expressions, actions, and status
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | No | ||
| zone_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It discloses the read-only nature ("List"), the zone-scoping, the parameter exclusivity rule, and the shape of the returned data (expressions, actions, status). It says nothing about pagination, permissions, or rate limits, which are the remaining gaps for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first line before the Args/Returns details, and the whole thing is short. The Args block partially restates the schema's property names, which is mild redundancy, but it adds value since the schema has no descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema present, the description covers purpose, parameter semantics, and mutual exclusivity adequately. The only left-open items are error behavior when both/neither zone argument is given and whether results are paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: it documents both parameters with concrete format hints (32-character hex ID, domain like example.com) and states that they are mutually exclusive. It stops short of saying what happens if both or neither are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("List"), a specific resource ("WAF custom rules"), and the scope ("for a zone"). The resource is narrow enough to separate it from the other list_* siblings (page rules, header rules, DNS records) without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a real usage constraint — "Provide either zone_id or zone_name, not both" — but never says when to prefer this tool over alternatives or when listing is the wrong operation. Usage is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_zones_toolA
List all Cloudflare zones accessible by the API token.
Args: name: Filter by zone name (domain) status: Filter by status (active, pending, initializing, moved, deleted) page: Page number for pagination (default: 1) per_page: Results per page, max 50 (default: 50)
Returns: List of zones with pagination info
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| page | No | ||
| status | No | ||
| per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It usefully discloses token-scoped visibility and pagination bounds (max 50, default per_page), but says nothing about read-only safety, rate limits, or how pagination interacts with filters. Adequate but thin for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one sentence, then Args and Returns blocks. The Returns block partially duplicates the output schema, but the overall structure is tight and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the Returns note is optional rather than required, and all four parameters are covered. Combined with the front-loaded scoping, an agent has enough to invoke this correctly; only deeper auth/rate-limit behavior is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: each of the four parameters is documented, including the meaningful status enum values (active, pending, initializing, moved, deleted) and the per_page max of 50 that the bare schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all Cloudflare zones') and scopes it to what the API token can access. It doesn't explicitly distinguish itself from the sibling get_zone_tool (singular retrieval), though the listing scope is implicit in the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the list/collection framing and the filter parameters, but the description never says when to reach for this versus get_zone_tool or the various rule-listing siblings. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purge_cache_toolA
Purge cached content from Cloudflare's edge.
Use one of: purge_everything, files, tags, hosts, or prefixes. tags, hosts, and prefixes require Enterprise plan.
Args: zone_id: Zone ID (32-character hex string) purge_everything: Purge all cached content files: URLs to purge (max 30) tags: Cache tags to purge (Enterprise) hosts: Hostnames to purge (Enterprise) prefixes: URL prefixes to purge (Enterprise)
Returns: Purge operation result
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| files | No | ||
| hosts | No | ||
| zone_id | Yes | ||
| prefixes | No | ||
| purge_everything | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses plan gating (tags/hosts/prefixes require Enterprise) and a limit (files max 30), which is real behavioral context. However, it omits the most important trait for a purge operation: that it is destructive/irreversible and may require specific cache-purge permissions or hit rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one sentence, followed by a compact modal-selection rule, then Args/Returns blocks. Every line carries information; the only mild redundancy is repeating '(Enterprise)' on three lines.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description covers selection modes, plan constraints, and per-parameter meaning. The notable gap for a mutation tool with zero annotations is the absence of a destructiveness/permanence warning, which an agent needs before invoking a purge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: each of the 6 parameters gets a one-line explanation, plus constraints like the 32-char hex format for zone_id and the max-30 limit for files. Only default/null behavior and whether modes can be combined are left unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Purge cached content from Cloudflare's edge'), which is concrete and immediately distinguishable from the unrelated siblings (WAF rules, DNS records, page rules). No ambiguity about what the tool operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use one of: purge_everything, files, tags, hosts, or prefixes' tells the agent the purge modes are mutually exclusive alternatives, and the Enterprise-plan note tells it which modes are gated. It stops short of stating explicit when-not-to-use conditions or prerequisites beyond plan tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_request_header_rules_toolA
Set request header modification rules (replaces all existing rules).
Each rule should have:
expression: Filter expression (e.g., "true" for all requests)
description: Human-readable description
action: "rewrite"
action_parameters: {"headers": {"Header-Name": {...}}}
Args: zone_id: Zone ID (32-character hex string) rules: List of rule definitions
Returns: Updated ruleset
| Name | Required | Description | Default |
|---|---|---|---|
| rules | Yes | ||
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden — and it does disclose the critical destructive trait that all existing rules are replaced. It also sketches the per-rule structure (expression, description, action, action_parameters). It stops short of covering permissions, failure behavior, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its replace semantics, followed by structured rule anatomy. Some redundancy with the schema (and the 'Returns: Updated ruleset' line, given an output schema exists), but nothing seriously wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and an output schema present, the description supplies the destructive-replace warning and the rule object shape an agent needs. Remaining gaps (auth, error modes) are modest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: zone_id is documented as a 32-character hex string and the rules array is expanded into its four expected fields. This meaningfully exceeds the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Set request header modification rules') and adds a crucial scope qualifier ('replaces all existing rules'). It implicitly distinguishes itself from the response-header sibling, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the 'replaces all existing rules' note tells the agent this is the write/replace path versus list_request_header_rules_tool, but there is no explicit when-to-use, when-not, or prerequisite guidance. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_response_header_rules_toolA
Set response header modification rules (replaces all existing rules).
Each rule should have:
expression: Filter expression (e.g., "true" for all responses)
description: Human-readable description
action: "rewrite"
action_parameters: {"headers": {"Header-Name": {...}}}
Args: zone_id: Zone ID (32-character hex string) rules: List of rule definitions
Returns: Updated ruleset
| Name | Required | Description | Default |
|---|---|---|---|
| rules | Yes | ||
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses the critical destructive trait that this call replaces ALL existing rules. It does not cover auth requirements, rate limits, or partial-failure semantics, but the disclosure of full overwrite is the most important behavioral fact here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and the destructive replace note; the rule-shape bullets are dense and useful. The 'Args:'/'Returns: Updated ruleset' scaffolding is mildly redundant given the output schema exists, but overall the text is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter set tool with an output schema (so return values need not be described), the description covers the rule shape and the overwrite behavior adequately. It is only missing alternative-tool routing and auth prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it gives zone_id as a '32-character hex string' and enumerates the rule object fields (expression, description, action, action_parameters). The action_parameters shape is left as '{...}', which is the only gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Set) and resource (response header modification rules), and the parenthetical '(replaces all existing rules)' clarifies the operation's semantics. The resource word 'response header' distinguishes it from the sibling set_request_header_rules_tool and from list_response_header_rules_tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit guidance on when to use this tool versus alternatives such as list_response_header_rules_tool or set_request_header_rules_tool. The replacement note is a behavioral fact, not usage routing, so an agent gains no when-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_url_rewrite_rules_toolA
Set URL rewrite rules (replaces all existing rules).
Each rule should have:
expression: Filter expression
description: Human-readable description
action: "rewrite"
action_parameters: {"uri": {"path": {"value": "..."}, "query": {"value": "..."}}}
Args: zone_id: Zone ID (32-character hex string) rules: List of rule definitions
Returns: Updated ruleset
| Name | Required | Description | Default |
|---|---|---|---|
| rules | Yes | ||
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the destructive bulk-replace semantics, which is the key behavioral trait, but omits permission requirements, reversibility, and failure modes. Partial disclosure for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the destructive replacement note, then documents rule shape and arguments compactly. Slightly verbose in the rule example, but every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with an output schema and no annotations, the description supplies the replacement behavior, the rule object structure, and the zone_id format. It leaves auth/permission context unstated, which is a minor gap given no annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the rules parameter is an opaque array of generic objects, yet the description enumerates the expected rule fields (expression, description, action, action_parameters) with a nested example, and documents zone_id as a 32-character hex string. This adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set URL rewrite rules') and immediately clarifies the operation is a full replacement ('replaces all existing rules'). This distinguishes it from list_url_rewrite_rules_tool, though it does not explicitly name or contrast with sibling set_*_rules tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'replaces all existing rules' implies when this is appropriate versus incremental edits, but there is no explicit when-to-use guidance, no exclusions, and no reference to the sibling list or header-rule tools. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dns_record_toolC
Update an existing DNS record.
Args: zone_id: Zone ID (32-character hex string) record_id: DNS record ID (32-character hex string) type: Record type (optional) name: Record name (optional) content: Record content (optional) ttl: TTL in seconds (optional) proxied: Proxy through Cloudflare (optional) priority: Priority (optional) comment: Comment (optional)
Returns: Updated DNS record details
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | ||
| name | No | ||
| type | No | ||
| comment | No | ||
| content | No | ||
| proxied | No | ||
| zone_id | Yes | ||
| priority | No | ||
| record_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden for a mutation tool. It never states whether this is a partial or full replace, whether omitted optional fields are left untouched or cleared, what permissions are required, or whether the change is reversible. 'Returns: Updated DNS record details' adds nothing beyond the existing output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose, followed by a compact Args list and a Returns line. Given the 0% schema coverage, enumerating the parameters earns its space, though a few entries are pure name restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no annotations, the definition covers the argument inventory and return shape (which is also covered by the output schema) but omits update semantics, permission requirements, and failure modes. It is minimally usable but leaves meaningful gaps for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the arg list in the description is doing real work: it flags zone_id/record_id as 32-character hex strings, marks ttl as seconds, and identifies which fields are optional. However, entries like 'type: Record type (optional)' and 'priority: Priority (optional)' merely restate the parameter name and add no value over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Update an existing DNS record.' An agent can distinguish it from create_dns_record_tool and delete_dns_record_tool by the verb alone. It does not explicitly name alternatives, but the CRUD sibling set makes the role obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus get_dns_record_tool, list_dns_records_tool, or create_dns_record_tool, nor any prerequisite or conflict conditions. The only cue is the domain-implied 'update', which the agent infers from the name rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_page_rule_toolC
Update an existing page rule.
Args: zone_id: Zone ID (32-character hex string) rule_id: Page rule ID (32-character hex string) targets: URL patterns (optional) actions: Actions (optional) priority: Priority (optional) status: Status (optional)
Returns: Updated page rule details
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| actions | No | ||
| rule_id | Yes | ||
| targets | No | ||
| zone_id | Yes | ||
| priority | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does not state whether the update is partial or full replacement, what happens to omitted fields, what permissions are required, or whether the operation is destructive. Only the return type is mentioned, and an output schema already exists for that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then organized into Args and Returns sections. It is appropriately sized, though the Returns line is redundant given the existing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with six parameters, no annotations, and zero schema description coverage, the description is insufficient. It omits update semantics, permission requirements, and detailed parameter structure, leaving an agent without enough context to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all six parameters and adds format hints for zone_id and rule_id (32-character hex strings), but the complex array-of-object parameters 'targets' and 'actions' are described only as 'URL patterns' and 'Actions' with no structural guidance. It adds partial value over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Update an existing page rule'), which clearly differentiates it from sibling create/delete/list page rule tools. There is no explicit naming of alternatives, but the 'existing' qualifier distinguishes it adequately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It only says 'Update an existing page rule' with no when-to-use guidance, prerequisites, or conditions under which one should choose this over create_page_rule_tool or delete_page_rule_tool. Usage context is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_waf_rule_toolA
Update an existing WAF custom rule.
Provide either zone_id or zone_name, not both.
Args: rule_id: Rule ID (32-character hex string) zone_id: Zone ID (32-character hex string) zone_name: Zone name (domain like example.com) expression: New filter expression (optional) action: New action (optional) description: New description (optional) enabled: Enable or disable the rule (optional)
Returns: Updated rule details
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | ||
| enabled | No | ||
| rule_id | Yes | ||
| zone_id | No | ||
| zone_name | No | ||
| expression | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully clarifies that updates are partial (only supplied fields change), but says nothing about permission/auth requirements, reversibility of changes, or side effects on an active WAF rule. The output schema covers the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose plus mutually exclusive constraint is front-loaded, followed by a clean Args list. No wasted prose, though the Args block largely restates the schema structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema covering return values, the description only needs to cover invocation semantics, which it does for all parameters plus the zone constraint. It is missing only the permission/side-effect context an agent would want for a mutation tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all seven parameters are enumerated, ID formats are given (32-character hex for rule_id/zone_id, domain form for zone_name), and the zone_id/zone_name mutual exclusion is stated. The action/expression/enabled params get only 'New X (optional)', so it is not fully complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing WAF custom rule'), which cleanly separates it from siblings like create_waf_rule_tool, delete_waf_rule_tool, and list_waf_rules_tool. It stops short of explicitly naming those siblings, so it stays just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Provide either zone_id or zone_name, not both' line gives real usage guidance for parameter selection, and the '(optional)' tags imply partial-update intent. However, there is no guidance on when to prefer this tool over alternatives or any prerequisites, leaving usage only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
26 tool updates
v0.5.1- Changed
create_dns_record_tool9 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / comment / descriptionRemoved value: -"Optional comment" - removed
Input schema / properties / content / descriptionRemoved value: -"Record content (IP address, target domain, etc.)" - removed
Input schema / properties / name / descriptionRemoved value: -"Record name (e.g., www, @, subdomain.example.com)" - removed
Input schema / properties / priority / descriptionRemoved value: -"Priority for MX/SRV records" - removed
Input schema / properties / proxied / descriptionRemoved value: -"Proxy through Cloudflare (default: false)" - removed
Input schema / properties / ttl / descriptionRemoved value: -"TTL in seconds, 1 = auto (default: 1)" - removed
Input schema / properties / type / descriptionRemoved value: -"Record type (A, AAAA, CNAME, MX, TXT, NS, SRV, CAA)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
create_page_rule_tool6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / actions / descriptionRemoved value: -"Page rule actions" - removed
Input schema / properties / priority / descriptionRemoved value: -"Rule priority 1-1000 (default: 1)" - removed
Input schema / properties / status / descriptionRemoved value: -"active or disabled (default: active)" - removed
Input schema / properties / targets / descriptionRemoved value: -"URL pattern targets" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
create_waf_rule_tool7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / action / descriptionRemoved value: -"Action to take (managed_challenge, block, js_challenge,\nchallenge, skip, log)" - removed
Input schema / properties / description / descriptionRemoved value: -"Human-readable description of the rule" - removed
Input schema / properties / enabled / descriptionRemoved value: -"Whether the rule is enabled (default: true)" - removed
Input schema / properties / expression / descriptionRemoved value: -"Cloudflare filter expression\n(e.g., '(http.request.uri.path contains \"xmlrpc.php\")')" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
- Changed
delete_dns_record_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / record_id / descriptionRemoved value: -"DNS record ID (32-character hex string)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
delete_page_rule_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / rule_id / descriptionRemoved value: -"Page rule ID (32-character hex string)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
delete_waf_rule_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / rule_id / descriptionRemoved value: -"Rule ID (32-character hex string)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
- Changed
get_dns_record_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / record_id / descriptionRemoved value: -"DNS record ID (32-character hex string)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
get_security_events_tool6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / limit / descriptionRemoved value: -"Number of results (default: 20)" - removed
Input schema / properties / since / descriptionRemoved value: -"Start date ISO format (default: 30 days ago)" - removed
Input schema / properties / until / descriptionRemoved value: -"End date ISO format (default: today)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
- Changed
get_top_pages_tool6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / limit / descriptionRemoved value: -"Number of results (default: 15)" - removed
Input schema / properties / since / descriptionRemoved value: -"Start date ISO format (default: 30 days ago)" - removed
Input schema / properties / until / descriptionRemoved value: -"End date ISO format (default: today)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
- Changed
get_traffic_by_country_tool6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / limit / descriptionRemoved value: -"Number of countries (default: 20)" - removed
Input schema / properties / since / descriptionRemoved value: -"Start date ISO format (default: 30 days ago)" - removed
Input schema / properties / until / descriptionRemoved value: -"End date ISO format (default: today)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
- Changed
get_zone_analytics_tool5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / since / descriptionRemoved value: -"Start date ISO format (default: 30 days ago)" - removed
Input schema / properties / until / descriptionRemoved value: -"End date ISO format (default: today)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
- Changed
get_zone_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
- Changed
list_dns_records_tool7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / content / descriptionRemoved value: -"Filter by record content" - removed
Input schema / properties / name / descriptionRemoved value: -"Filter by record name" - removed
Input schema / properties / page / descriptionRemoved value: -"Page number (default: 1)" - removed
Input schema / properties / per_page / descriptionRemoved value: -"Results per page, max 100 (default: 100)" - removed
Input schema / properties / type / descriptionRemoved value: -"Filter by record type (A, AAAA, CNAME, MX, TXT, etc.)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
list_page_rules_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / order / descriptionRemoved value: -"Sort order (status, priority)" - removed
Input schema / properties / status / descriptionRemoved value: -"Filter by status (active, disabled)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
list_request_header_rules_tool2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
list_response_header_rules_tool2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
list_url_rewrite_rules_tool2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
list_waf_rules_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
- Changed
list_zones_tool5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / name / descriptionRemoved value: -"Filter by zone name (domain)" - removed
Input schema / properties / page / descriptionRemoved value: -"Page number for pagination (default: 1)" - removed
Input schema / properties / per_page / descriptionRemoved value: -"Results per page, max 50 (default: 50)" - removed
Input schema / properties / status / descriptionRemoved value: -"Filter by status (active, pending, initializing, moved, deleted)"
- Changed
purge_cache_tool7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / files / descriptionRemoved value: -"URLs to purge (max 30)" - removed
Input schema / properties / hosts / descriptionRemoved value: -"Hostnames to purge (Enterprise)" - removed
Input schema / properties / prefixes / descriptionRemoved value: -"URL prefixes to purge (Enterprise)" - removed
Input schema / properties / purge_everything / descriptionRemoved value: -"Purge all cached content" - removed
Input schema / properties / tags / descriptionRemoved value: -"Cache tags to purge (Enterprise)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
set_request_header_rules_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / rules / descriptionRemoved value: -"List of rule definitions" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
set_response_header_rules_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / rules / descriptionRemoved value: -"List of rule definitions" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
set_url_rewrite_rules_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / rules / descriptionRemoved value: -"List of rule definitions" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
update_dns_record_tool10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / comment / descriptionRemoved value: -"Comment (optional)" - removed
Input schema / properties / content / descriptionRemoved value: -"Record content (optional)" - removed
Input schema / properties / name / descriptionRemoved value: -"Record name (optional)" - removed
Input schema / properties / priority / descriptionRemoved value: -"Priority (optional)" - removed
Input schema / properties / proxied / descriptionRemoved value: -"Proxy through Cloudflare (optional)" - removed
Input schema / properties / record_id / descriptionRemoved value: -"DNS record ID (32-character hex string)" - removed
Input schema / properties / ttl / descriptionRemoved value: -"TTL in seconds (optional)" - removed
Input schema / properties / type / descriptionRemoved value: -"Record type (optional)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
update_page_rule_tool7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / actions / descriptionRemoved value: -"Actions (optional)" - removed
Input schema / properties / priority / descriptionRemoved value: -"Priority (optional)" - removed
Input schema / properties / rule_id / descriptionRemoved value: -"Page rule ID (32-character hex string)" - removed
Input schema / properties / status / descriptionRemoved value: -"Status (optional)" - removed
Input schema / properties / targets / descriptionRemoved value: -"URL patterns (optional)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)"
- Changed
update_waf_rule_tool8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / action / descriptionRemoved value: -"New action (optional)" - removed
Input schema / properties / description / descriptionRemoved value: -"New description (optional)" - removed
Input schema / properties / enabled / descriptionRemoved value: -"Enable or disable the rule (optional)" - removed
Input schema / properties / expression / descriptionRemoved value: -"New filter expression (optional)" - removed
Input schema / properties / rule_id / descriptionRemoved value: -"Rule ID (32-character hex string)" - removed
Input schema / properties / zone_id / descriptionRemoved value: -"Zone ID (32-character hex string)" - removed
Input schema / properties / zone_name / descriptionRemoved value: -"Zone name (domain like example.com)"
26 tool updates
v0.5.0- First observed
create_dns_record_tool - First observed
create_page_rule_tool - First observed
create_waf_rule_tool - First observed
delete_dns_record_tool - First observed
delete_page_rule_tool - First observed
delete_waf_rule_tool - First observed
get_dns_record_tool - First observed
get_security_events_tool - First observed
get_top_pages_tool - First observed
get_traffic_by_country_tool - First observed
get_zone_analytics_tool - First observed
get_zone_tool - First observed
list_dns_records_tool - First observed
list_page_rules_tool - First observed
list_request_header_rules_tool - First observed
list_response_header_rules_tool - First observed
list_url_rewrite_rules_tool - First observed
list_waf_rules_tool - First observed
list_zones_tool - First observed
purge_cache_tool - First observed
set_request_header_rules_tool - First observed
set_response_header_rules_tool - First observed
set_url_rewrite_rules_tool - First observed
update_dns_record_tool - First observed
update_page_rule_tool - First observed
update_waf_rule_tool
TDQS
Scored across 26 tools
Each tool targets a distinct resource+action (DNS, WAF, page rules, header rules, analytics, zones), so an agent can generally pick correctly. However, the many '..._rules_tool' variants (page rules, WAF rules, request/response header rules, URL rewrite rules) share similar verbs and require careful reading of the resource noun to avoid misselection.
Every tool follows the exact same verb_noun_tool convention (create_dns_record_tool, list_waf_rules_tool, purge_cache_tool), with predictable verbs like create/get/list/update/delete/set/purge. No mixing of conventions.
26 tools is slightly heavy but justified by the breadth of the Cloudflare domain (DNS, WAF, page rules, header/URL rewrite rules, analytics, zones, cache). Each tool earns its place with no obvious redundancy, though it sits just above the comfortable range.
DNS, WAF, and page rules all have full CRUD, and analytics/zones have appropriate read operations. Minor gaps exist: header and URL rewrite rules only expose list+set (no single-get or delete), and there is no page-rule get-by-id, but these are workable given 'set' replaces the whole ruleset.
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Cloudflare Workers MCP server: ai-guardrails
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Cloudflare Workers MCP server: ai-token-counter
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceA lightweight MCP server for managing DNS records, purging cache, and interacting with the Cloudflare API through natural language commands.24-
- AlicenseNot gradedqualityNot gradedmaintenanceA token-efficient MCP server for managing Cloudflare DNS zones and records with full CRUD support and bulk operations. It can be deployed locally via stdio or as a Cloudflare Worker for remote HTTP access.-
- AlicenseNot gradedqualityDmaintenanceMCP server for managing Cloudflare DNS across multiple zones from a single API token, enabling bulk operations like toggling proxy, listing records, and batch updates.19 npmMIT

Cloudflare MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceA token-efficient MCP server that provides access to the entire Cloudflare API (2500+ endpoints) using a code execution pattern, enabling natural language management of Cloudflare services.7 npm912Apache 2.0