bunny.net MCP by usefulapi
Server Details
Inspect pull zones, storage, DNS and video libraries on bunny.net, and purge caches.
- Status
- Healthy
- Uptime
- 44.2% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 22 tools
Each tool targets a distinct bunny.net resource and action, with clear boundaries between reads, writes, and purges. Overlaps such as bunny_get_dns_zone vs. bunny_list_dns_records are mitigated by explicit filtering/scope differences. There is no apparent risk of confusing one tool with another.
All tools use the same bunny_ prefix and consistent snake_case verb_noun naming, e.g. bunny_add_dns_record, bunny_list_pull_zones, bunny_purge_url. The pattern is predictable across DNS, CDN, storage, video, billing, and account operations.
22 tools is on the heavy side for a single MCP server, though the broad bunny.net product surface (CDN, DNS, storage, Stream, billing, stats) justifies many of them. It falls into the borderline 16-25 range where the set may feel large but not extreme.
Coverage is mostly read-oriented with only selective write operations; many lifecycle actions are missing. For example, DNS lacks delete record/zone and zone updates, pull zones lack create/update/delete and full edge-rule management, storage lacks file operations and zone lifecycle management, and Stream lacks video/library management. These gaps would block common management workflows.
Available Tools
22 toolsbunny_add_blocked_ipBlock an IP on a pull zoneADestructiveInspect
WRITE. Block an IP address from a pull zone (undo with bunny_remove_blocked_ip). bunny.net: POST /pullzone/{id}/addBlockedIp.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | The IP address, e.g. 203.0.113.7. | |
| pull_zone_id | Yes | The Pull Zone ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety profile is covered. The description adds value by flagging 'WRITE' and naming the reversal tool, which the annotations do not provide. It stops short of describing idempotency or side effects, but goes beyond the structured data.
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?
Two compact sentences with the operation type front-loaded ('WRITE.') and zero wasted words. The endpoint path is terse supporting detail.
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 full schema coverage and a destructiveHint annotation, the description covers purpose, operation type, and reversal path. Only minor behavioral detail (e.g. idempotency) is missing, and no output schema is needed.
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 100%, so both parameters (ip and pull_zone_id) are fully documented in the schema. The description adds no parameter details beyond what the schema already provides, so the baseline 3 applies.
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 ('Block an IP address from a pull zone') and explicitly names the sibling inverse (bunny_remove_blocked_ip). An agent can distinguish it from bunny_remove_blocked_ip and the read siblings 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?
Clearly signals the operation is a write and points to the undo tool, which gives strong context for when this tool is the right choice. It lacks explicit when-not conditions beyond that, but the reversal pointer covers the main decision need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_add_dns_recordAdd a DNS recordADestructiveInspect
WRITE. Add a record to a DNS zone. Takes effect on live DNS. bunny.net: PUT /dnszone/{zoneId}/records.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag (CAA), e.g. 'issue'. | |
| ttl | No | TTL in seconds. | |
| name | Yes | Record name relative to the zone; empty string for the apex, e.g. 'www'. | |
| port | No | Port (SRV). | |
| type | Yes | Record type. | |
| flags | No | Flags (CAA). | |
| value | Yes | Record value, e.g. an IP for A, a hostname for CNAME, text for TXT. | |
| weight | No | Weight (SRV, weighted records). | |
| comment | No | Free-text note on the record. | |
| zone_id | Yes | The DNS Zone ID. | |
| disabled | No | Keep the record but stop serving it. | |
| priority | No | Priority (MX, SRV). | |
| accelerated | No | Route the record through the CDN (CDN acceleration). | |
| pull_zone_id | No | Pull Zone ID, for type PullZone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide destructiveHint, so the description carries weight and it delivers the key impact disclosure: 'Takes effect on live DNS,' plus the underlying API route. It does not cover idempotency, duplicate handling, or auth needs.
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?
Three short sentences, front-loaded with the WRITE marker and purpose, then impact, then the API route. No wasted words.
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?
Adequate for a 14-param mutation tool with a fully documented schema and no output schema, but with thin annotations it could say more about what happens on conflict, whether records are appended or overwritten, and the return 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 100% across 14 well-documented params, so the schema already does the heavy lifting. The description adds no param detail and correctly does not need to.
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 ('Add a record to a DNS zone') and flags it as a WRITE operation. It does not explicitly distinguish itself from the sibling bunny_update_dns_record, though 'Add' vs 'update' is inferable.
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 context that it applies to live DNS implies when it matters, but there is no explicit when-to-use or when-to-prefer-update guidance, and no prerequisite or permission requirements are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_export_dns_zoneExport a DNS zoneARead-onlyInspect
Export one DNS zone as a BIND zone file (plain text) — handy for review, diffing or backup before a change. bunny.net: GET /dnszone/{id}/export.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | The DNS Zone ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true and the description is consistent with a safe read. Beyond annotations, it discloses that the resource is a single zone and that the payload is a plain-text BIND zone file, plus the underlying HTTP endpoint. It doesn't discuss size limits or truncation for large zones, so not a 5.
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?
One sentence, front-loaded with the action and output format, with rationale and endpoint appended compactly. No filler.
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?
No output schema exists, and the description compensates by naming the return artifact (BIND zone file, plain text), which is the key thing an agent needs to know here. A one-parameter read-only export needs little more, though size limits or a note on zone selection would round it out.
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 100% for the single zone_id parameter, so the schema already documents the input. "Export one DNS zone" only implies zone_id scoping, adding little beyond the schema — baseline 3 when the schema does the work.
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 (export), resource (one DNS zone), and concrete output format (BIND zone file, plain text), which is enough to separate it from sibling reads like bunny_get_dns_zone (structured) and bunny_list_dns_records. The API endpoint reference (GET /dnszone/{id}/export) reinforces the operation.
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 clear use contexts — "review, diffing or backup before a change" — which tells the agent when this is the right tool. It stops short of naming an alternative or an exclusion (e.g., use bunny_get_dns_zone for JSON/structured data), so no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_get_audit_logGet the audit logARead-onlyInspect
Who changed what on one day: the account audit log (timestamp, product, resource, action, actor and a diff). Paginate with continuation_token. bunny.net: GET /user/audit/{date}.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | The day to read, YYYY-MM-DD. | |
| limit | No | Max entries, 1-10000. Default 100. | |
| order | No | Sort by time. | |
| product | No | Only these products. | |
| actor_id | No | Only changes by these actors. | |
| resource_id | No | Only these resource IDs. | |
| resource_type | No | Only these resource types. | |
| continuation_token | No | ContinuationToken from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description goes further by disclosing the returned record shape (timestamp, product, resource, action, actor, diff) and the pagination mechanism. There is no output schema, so this return-content detail is genuinely additive. It omits auth/permission requirements and any rate or retention 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?
Three short, front-loaded clauses: purpose first, pagination second, endpoint mapping last. Every sentence carries information, though citing the raw endpoint path is marginally redundant with the tool name and endpoint convention.
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 8 parameters but only 1 required and 100% schema coverage, plus no output schema, the description fills the important gap by describing the returned fields and pagination flow. The filter parameters (product, actor_id, resource_id, resource_type) are never mentioned, but the schema covers them adequately.
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 100%, so every parameter including date, limit, order, and the filter arrays is already documented in the schema. The description only meaningfully echoes the date scoping and continuation_token paging, adding little beyond the structured data. Baseline 3 is appropriate.
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 opens with a specific verb+resource framing ("Who changed what on one day: the account audit log") and enumerates exactly what the log contains (timestamp, product, resource, action, actor, diff). No sibling tool covers audit history, so it is trivially distinguishable from bunny_get_statistics, bunny_get_billing, and the DNS/storage 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?
It clearly scopes usage to a single day and notes pagination via continuation_token, which tells the agent how to iterate results. It does not state any exclusions or when-not conditions, but with no competing audit-log sibling there is little ambiguity to resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_get_billingGet billing detailsARead-onlyInspect
The account balance, this month's charges broken down by product (traffic per continent, storage, DNS, Stream, scripting, Shield, ...) and recent billing records. Payment-method tokens are redacted. bunny.net: GET /billing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered; the description adds genuinely useful behavioral detail beyond that, notably that payment-method tokens are redacted, plus a precise inventory of what the response contains. It stops short of describing format or pagination of the billing records.
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?
Essentially one front-loaded sentence that leads with the balance and then the breakdown, followed by a short security note and the underlying endpoint. The product enumeration is slightly long and the trailing 'bunny.net: GET /billing' is marginal, but 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?
With no output schema and no parameters, the description carries the load of telling the agent what comes back, and it does so by itemizing the balance, product-level charges, and recent billing records. Minor gaps remain (record format, time window for 'recent'), but for a no-arg read tool this is close to sufficient.
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?
The tool takes zero parameters, so the schema cannot and need not document any; per the baseline for parameterless tools this scores 4, and there is nothing the description could add on this dimension.
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 (account balance, month-to-date charges by product, recent billing records) and enumerates the product breakdowns (traffic per continent, storage, DNS, Stream, Shield), making it clearly distinguishable from siblings like bunny_get_statistics or bunny_get_audit_log.
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 resource name and the listed return contents — an agent can infer this is the tool for cost/billing questions — but the description offers no explicit when-to-use guidance or pointer to alternatives (e.g., when to prefer get_statistics instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_get_dns_zoneGet a DNS zoneARead-onlyInspect
Fetch one DNS zone with its settings and records. bunny.net: GET /dnszone/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | The DNS Zone ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safety profile, but the description adds real value beyond it by disclosing the payload scope ('with its settings and records'), which is the key fact an agent needs to choose this over bunny_list_dns_records. It says nothing about auth or payload size limits, keeping it short of a 5.
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?
Two short sentences, front-loaded with the operation and payload, followed by the upstream endpoint mapping. Nothing is wasted and nothing needs reordering.
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 no output schema, the description does take on the burden of describing the return ('settings and records') and does so adequately for a single-resource read whose safety profile is covered by annotations. Only minor gaps remain, such as whether the records list is truncated or 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?
There is a single parameter with 100% schema description coverage, so the schema already documents zone_id fully. The description adds no format, range, or sourcing detail beyond the schema, making the baseline 3 correct.
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 ('Fetch') and resource ('one DNS zone'), and the singular 'one' plus 'with its settings and records' makes the scope distinct from the sibling bunny_list_dns_zones. It does not name that sibling explicitly, so it falls short of 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?
Usage is only implied: fetch a single zone, presumably when you already hold a zone_id. There is no explicit when-to-use statement, no exclusion guidance, and no pointer to bunny_list_dns_zones or bunny_list_dns_records as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_get_pull_zoneGet a pull zoneARead-onlyInspect
Fetch one pull zone with all its settings: origin, hostnames, caching, security, edge rules (with their GUIDs, needed by bunny_set_edge_rule_enabled), blocked IPs, limits and usage. Secrets (token-auth key, AWS signing secret, certificate private keys) are redacted. bunny.net: GET /pullzone/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| pull_zone_id | Yes | The Pull Zone ID. | |
| include_certificate | No | Include each hostname's public SSL certificate (private keys are always redacted). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=true, so the description carries the behavioral load and does it well by disclosing redaction behavior (token-auth key, AWS signing secret, certificate private keys). That is genuine, non-obvious information an agent needs to avoid expecting secrets in the response. It stops short of covering error behavior or missing-ID handling.
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?
Two sentences plus the endpoint reference, front-loaded with the outcome (fetch one pull zone with all settings) before the redaction caveat. Dense but every clause carries information; only the raw endpoint notation is arguably filler.
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 no output schema, the description must describe the return surface, and it does so thoroughly by listing the settings groups returned and the redacted secrets. A mutation-free read tool with full schema coverage and clear returns is nearly complete; error cases and rate limits are the only omission.
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 100%, so both pull_zone_id and include_certificate are already fully documented, establishing the baseline of 3. The description's redaction note overlaps with what the schema already says about private keys being redacted, so it adds little beyond the structured fields.
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 ('Fetch one pull zone') and enumerates exactly what is returned (origin, hostnames, caching, security, edge rules, blocked IPs, limits, usage). The singular 'one pull zone' implicitly separates it from bunny_list_pull_zones, and it even names the downstream sibling that consumes the edge-rule GUIDs.
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 supplies one useful usage cue: the returned edge-rule GUIDs are needed by bunny_set_edge_rule_enabled, which tells the agent why to call this before that tool. However, it never states when to prefer this over bunny_list_pull_zones or bunny_get_statistics, so the core selection decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_get_statisticsGet CDN statisticsARead-onlyInspect
CDN traffic statistics for the account or one pull zone: total bandwidth, origin traffic, requests served, cache hit rate and average origin response time, plus optional charts (bandwidth, requests, origin traffic, response times, 3xx/4xx/5xx errors, geographic distribution). bunny.net: GET /statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| hourly | No | Hourly instead of daily grouping. | |
| date_to | No | End of the range, YYYY-MM-DD or ISO 8601. Omit both dates for the last 30 days. | |
| date_from | No | Start of the range, YYYY-MM-DD or ISO 8601. Omit both dates for the last 30 days. | |
| region_id | No | Only this edge region (see bunny_list_regions). | |
| load_errors | No | Include the 3xx/4xx/5xx response charts. | |
| pull_zone_id | No | Only this pull zone. Omit for the whole account. | |
| load_bandwidth_used | No | Include the bandwidth charts. | |
| load_origin_traffic | No | Include the origin traffic chart. | |
| load_requests_served | No | Include the requests-served chart. | |
| load_origin_response_times | No | Include the origin response time chart. | |
| load_geographic_traffic_distribution | No | Include traffic by country. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, so the description's job is supplementary. It discloses the underlying API call (bunny.net: GET /statistics) and the shape of the result (summary metrics plus which optional chart groups can be requested), which is useful behavioral context for a read tool with no 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?
A single front-loaded sentence that names the scope first, then metrics, then optional charts, with the API mapping appended. It is dense but every element earns its place; the long parenthetical enumeration is slightly repetitive against the 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?
With no output schema, the description usefully enumerates what comes back, and it covers the account-vs-pull-zone scope. It does not state defaults (e.g., whether chart flags default off or the 30-day fallback), so a small gap remains for an 11-parameter all-optional 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 description coverage is 100%, so every parameter is already documented in the schema; the description only echoes scope and chart-group semantics. Baseline 3 is correct when the schema does the heavy lifting.
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 (CDN traffic statistics) and scope (account or one pull zone), and enumerates the concrete metrics returned plus the optional chart families. This clearly separates it from bunny_get_storage_zone_statistics and other siblings.
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 scope note ('account or one pull zone') hints at when each mode applies, but there is no explicit when-to-use, when-not, or routing to alternatives such as bunny_get_storage_zone_statistics. The schemas carry the day on selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_get_storage_zoneGet a storage zoneARead-onlyInspect
Fetch one edge storage zone: hostname, region, replication, storage used, files stored, 404 handling and connected pull zones. Storage passwords are redacted. bunny.net: GET /storagezone/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| storage_zone_id | Yes | The Storage Zone ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered structurally; the description adds genuinely non-obvious behavioral context by disclosing that storage passwords are redacted and enumerating exactly which attributes come back. It does not mention auth/permission requirements or error behavior, keeping it short of a 5.
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?
Two compact sentences, zero filler: the returned-field list is front-loaded, the redaction caveat follows, and the API mapping is last. Every clause conveys information an agent would otherwise have to discover by calling the 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?
With no output schema, the description compensates by enumerating the fields the call returns and flagging the redaction of passwords. For a one-parameter, read-only lookup with full schema documentation and matching annotations, 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 description coverage is 100% with a single documented required parameter (storage_zone_id), so the schema already carries the meaning. The description adds nothing about the parameter beyond the endpoint template's {id} placeholder, which is the expected baseline when the schema does the heavy lifting.
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 opens with a specific verb+resource ("Fetch one edge storage zone") and immediately enumerates the fields returned (hostname, region, replication, storage used, files stored, 404 handling, connected pull zones). The word "one" plus the ID-based endpoint implicitly separates it from bunny_list_storage_zones and from the statistics sibling, so an agent can route correctly without opening a 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?
Usage is implied rather than stated: "Fetch one" and the endpoint template GET /storagezone/{id} make clear this is the single-entity lookup, but the description never names alternatives (list_storage_zones, get_storage_zone_statistics) or states when not to use it. Adequate for a simple read, but the when-to-use-vs-siblings guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_get_storage_zone_statisticsGet storage zone statisticsARead-onlyInspect
Daily charts of storage used and file count for one storage zone. bunny.net: GET /storagezone/{id}/statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | No | End of the range, YYYY-MM-DD or ISO 8601. Omit both dates for the last 30 days. | |
| date_from | No | Start of the range, YYYY-MM-DD or ISO 8601. Omit both dates for the last 30 days. | |
| storage_zone_id | Yes | The Storage Zone ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read, lowering the burden. The description usefully adds that the output is daily-granularity series covering two specific metrics, but the trailing 'bunny.net: GET /storagezone/{id}/statistics' merely restates the endpoint and adds no behavioral context (pagination, rate limits, empty-zone 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?
Two short sentences, front-loaded with what the tool returns; the endpoint reference is arguably redundant but costs almost nothing. No filler or hedging.
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?
There is no output schema, so the description must convey the return shape, and it does identify the two metrics and their daily resolution. A gap remains around series length, units, and behavior for a zone with no data, but the essentials are present for a read-only stats call.
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 100%, including the default-window rule for omitting both dates, so the schema fully carries parameter meaning. The description adds no additional parameter guidance, which is the correct baseline score when the schema does the heavy lifting.
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 names a specific resource (one storage zone) and the exact metrics returned (storage used, file count), so the agent knows what it gets. It does not, however, distinguish itself from the sibling bunny_get_statistics or bunny_get_storage_zone, leaving the boundary between these tools to inference.
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?
Scope ('for one storage zone') implies this is the per-zone variant of statistics, which is mild usage guidance, but there is no explicit when-to-use statement, no exclusion, and no pointer to bunny_get_statistics for account-wide data. The agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_get_video_libraryGet a video libraryARead-onlyInspect
Fetch one Stream video library with its full configuration (resolutions, DRM, referrer rules, transcribing, watermark). Library API keys are redacted. bunny.net: GET /videolibrary/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| library_id | Yes | The Video Library ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds a genuine behavioral detail beyond them: 'Library API keys are redacted', which tells the agent the response is sanitized. It stops short of noting pagination/auth or error behavior, but the redaction disclosure is meaningful added value.
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?
One tight sentence with the returned fields in a parenthetical, followed by the API endpoint mapping. Zero wasted words and the core purpose is front-loaded.
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, single-parameter tool with no output schema, the description helpfully enumerates the returned configuration fields, partially compensating for the missing output schema. The redaction note plus field list make it callable without further inference; only auth/error context 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 100% and library_id is fully documented in the schema, so the description carries no extra semantic burden. It adds nothing about the ID's format or origin, matching the baseline 3 for a high-coverage single parameter.
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 ('Fetch one Stream video library') and enumerates the configuration it returns (resolutions, DRM, referrer rules, transcribing, watermark). The word 'one' cleanly separates it from the sibling bunny_list_video_libraries.
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 singular 'one' implies this is the detail lookup versus the list sibling, but no explicit when-to-use or when-not-to-use guidance is given. Usage must be inferred from naming rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_list_dns_recordsList DNS recordsARead-onlyInspect
List the records in one DNS zone, optionally filtered by type or search term. Record Type comes back as bunny.net's integer code (0=A, 1=AAAA, 2=CNAME, 3=TXT, 4=MX, 5=Redirect, 6=Flatten, 7=PullZone, 8=SRV, 9=CAA, 10=PTR, 11=Script, 12=NS, 13=SVCB, 14=HTTPS, 15=TLSA). bunny.net: GET /dnszone/{zoneId}/records.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. Default 1. | |
| type | No | Only records of this type. | |
| search | No | Filter results by this search term. | |
| zone_id | Yes | The DNS Zone ID. | |
| per_page | No | Items per page, 5-1000. Default 1000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, but with no output schema the description adds genuinely necessary behavioral context: it discloses that record types are returned as bunny.net integer codes and enumerates the full mapping. This prevents the agent from misreading integer output; pagination/total-count behavior is still undisclosed.
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?
Three sentences, front-loaded with the core action and scope, then the one piece of non-obvious return-value encoding that has no other home. The long code table earns its place because there is no output schema to carry it.
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 list tool with no output schema, the definition covers what the tool returns well enough (type-code decoding) and describes its filters. It stops short of explaining pagination behavior or result shape, which an agent paging through many records could use.
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 100%, so the baseline would be 3, but the description adds meaning the schema lacks: it explains that the `type` filter is a string enum ("A", "AAAA") while responses echo integer codes, exposing a round-trip mismatch the schema alone would not reveal. Page/per_page semantics remain purely schema-driven.
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 records) scoped to exactly one DNS zone, plus the available filters. This cleanly separates it from the sibling bunny_list_dns_zones (zones vs. records) and bunny_get_dns_zone without requiring the agent to open any 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?
It says the listing can be filtered by type or search term, which implies usage, but gives no explicit when-to-use/when-not guidance and never names alternatives such as bunny_list_dns_zones or bunny_get_dns_zone. The agent must infer routing from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_list_dns_zonesList DNS zonesARead-onlyInspect
List the DNS zones hosted on bunny.net, with nameserver detection, DNSSEC and logging status. bunny.net: GET /dnszone.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. Default 1. | |
| search | No | Filter results by this search term. | |
| per_page | No | Items per page, 5-1000. Default 1000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read profile is covered. The description adds the useful detail that each zone includes nameserver detection, DNSSEC and logging status, but says nothing about pagination behavior or the API endpoint context beyond the bare route.
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?
Two short clauses, front-loaded with the action and resource, with the returned fields following. The trailing 'bunny.net: GET /dnszone' is terse and useful; no wasted sentences.
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 list tool with full schema coverage and no output schema, the description covers purpose and the nature of returned data. It stops short of routing guidance among the many sibling list/get tools, which would complete it.
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 100%, so the schema fully documents page, search, and per_page with ranges and defaults. The description adds no parameter semantics beyond what the schema already provides, so the baseline 3 applies.
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?
Clear verb+resource ('List the DNS zones hosted on bunny.net') and it enumerates the fields returned (nameserver detection, DNSSEC, logging status). It does not explicitly distinguish from bunny_list_dns_records or bunny_get_dns_zone, though 'zones' vs 'records' is reasonably self-evident.
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 (use to list DNS zones) but there is no explicit guidance on when to use this versus bunny_list_dns_records, bunny_get_dns_zone, or bunny_export_dns_zone. No exclusions or conditions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_list_pull_zonesList pull zonesARead-onlyInspect
List the CDN pull zones on the account. By default returns a compact view per zone (id, name, origin URL, enabled/suspended, hostnames, linked storage zone, bandwidth and charges this month); set full=true for every setting. bunny.net: GET /pullzone.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return every pull zone setting instead of the compact view. | |
| page | No | Page number, 1-based. Default 1. | |
| search | No | Filter results by this search term. | |
| per_page | No | Items per page, 5-1000. Default 1000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile, the description still adds real behavioral context: the default compact projection, what fields that includes, and the full=true switch for every setting. It also names the underlying endpoint, which aids traceability. Return format is sketched but pagination behavior is left to the 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 single sentence with the core action first, then the default-vs-full distinction and the endpoint tag. The long parenthetical field list is dense but each item earns its place by previewing the return shape; no filler sentences.
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?
No output schema exists, and the description compensates by enumerating the compact return fields and the full=true alternative, which is exactly what an agent needs to interpret results. Pagination and search semantics are left entirely to the schema, a minor remaining gap for a 4-parameter list 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 description coverage is 100%, so the schema already documents full, page, search and per_page, making 3 the baseline. The description reinforces the meaning of full (compact vs every setting) and partly enumerates the compact result, but adds no syntax or semantics for search/page/per_page beyond what the 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 with scope ('List the CDN pull zones on the account'), and the plural 'list' clearly separates it from the sibling bunny_get_pull_zone. 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?
Usage is only implied: 'List ... on the account' suggests bulk retrieval, and full=true is framed as an option, but the description never states when to choose this over bunny_get_pull_zone or how pagination/search interact. No explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_list_regionsList edge regionsARead-onlyInspect
List bunny.net's edge regions with their IDs, codes, location and per-GB traffic price. A cheap way to confirm the API key works. bunny.net: GET /region.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, so the safety profile is covered. The description adds genuinely useful context beyond that: the exact fields returned and the fact that this is a lightweight call suitable for validating the API key. It does not mention rate limits or pagination, which keeps it short of a 5.
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?
Three short sentences, front-loaded with the resource and its returned fields, then the practical use, then the underlying API endpoint. Every sentence earns its place with no filler.
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 no output schema present, the description compensates by naming the fields returned, and for a zero-parameter list tool there is nothing else an agent needs to call it correctly.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. No misleading parameter hints are present.
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 bunny.net's edge regions') and enumerates the returned fields (IDs, codes, location, per-GB price). It is clearly distinguishable from sibling list tools such as bunny_list_dns_zones or bunny_list_pull_zones.
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 offers one contextual use ('a cheap way to confirm the API key works'), which implies when the tool is handy but never explains when to prefer it over related lookups or any exclusions. Usage is implied rather than explicitly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_list_storage_zonesList storage zonesARead-onlyInspect
List the edge storage zones on the account: region, replication regions, storage used, file count, tier and connected pull zones. Storage passwords are redacted. bunny.net: GET /storagezone.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. Default 1. | |
| search | No | Filter results by this search term. | |
| per_page | No | Items per page, 5-1000. Default 1000. | |
| include_deleted | No | Also return deleted storage zones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds genuinely useful context beyond that: the exact fields returned and, notably, that storage passwords are redacted. It does not cover pagination behavior, so it is helpful but not fully transparent.
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?
Two compact sentences with zero filler, front-loaded with the action and scope before the return-field detail and endpoint. Every clause carries information.
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 list tool with no output schema, the description usefully enumerates the response fields and notes password redaction, while the schema fully covers the four parameters. Pagination/ordering semantics are the only mild 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 100%, so page, search, per_page and include_deleted are fully documented in the schema. The description mentions none of them, so it adds no meaning beyond the structured fields; baseline 3 applies.
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 the edge storage zones on the account') and enumerates the returned fields, so the agent knows exactly what it gets back. It does not explicitly distinguish itself from the sibling get_storage_zone, but the plural/list framing makes the contrast inferable.
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: list all storage zones on the account. There is no explicit when-to-use vs bunny_get_storage_zone, no note about when pagination or filtering is needed, and no stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_list_video_librariesList video librariesARead-onlyInspect
List the Stream video libraries: video count, storage and traffic usage, linked pull/storage zones and player/encoding settings. Library API keys are redacted. bunny.net: GET /videolibrary.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. Default 1. | |
| search | No | Filter results by this search term. | |
| per_page | No | Items per page, 5-1000. Default 1000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile, the description still adds real substance: it discloses that Library API keys are redacted (preventing an agent from expecting secrets) and names the exact upstream endpoint GET /videolibrary. It does not discuss pagination behavior or rate limits, which keeps it below a 5.
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?
One front-loaded sentence enumerating the returned fields, followed by a short redaction note and the endpoint identifier. No filler, and the most decision-relevant information comes first.
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 no output schema, the description usefully previews the returned shape (counts, usage, zones, settings) and the redaction caveat. Pagination and filtering behavior are covered by the parameter schema, so the only minor gap is a lack of guidance on result volume or ordering.
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 100%, with page, per_page, and search each documented, including defaults and ranges. The description adds no additional parameter meaning, so the baseline of 3 applies.
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 (Stream video libraries) and enumerates the returned data: video count, storage/traffic usage, linked zones, player/encoding settings. This distinguishes it from the singular sibling bunny_get_video_library, which clearly fetches one library.
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 'List the Stream video libraries' — an agent can infer this is the enumeration path versus bunny_get_video_library for a single library — but no explicit when-to-use or when-not guidance is provided, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_purge_pull_zone_cachePurge a pull zone's cacheADestructiveInspect
WRITE. Purge the cached content of one pull zone — everything, or only files carrying a cache tag. Nothing is lost (the CDN refetches from the origin) but the origin takes the refill load. bunny.net: POST /pullzone/{id}/purgeCache.
| Name | Required | Description | Default |
|---|---|---|---|
| cache_tag | No | Only purge files with this cache tag. | |
| pull_zone_id | Yes | The Pull Zone ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
destructiveHint=true is already declared, but the description adds the crucial nuance that 'Nothing is lost (the CDN refetches from the origin) but the origin takes the refill load' — explaining the real consequence of the operation and warning about origin load that annotations alone cannot convey. The 'WRITE.' prefix also signals the side-effect class.
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?
Two tight sentences, front-loaded with the operation class and the core action, followed by the impact note and the API endpoint. No filler text.
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 with no output schema, the description covers the action, the scope options, the safety consequence, and the origin-load side effect. An agent has everything needed to decide and invoke correctly.
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 100%, so both parameters are already documented in the schema. The description's 'everything, or only files carrying a cache tag' restates the cache_tag semantics rather than extending them, so the baseline 3 applies.
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 ('Purge the cached content of one pull zone') and narrows the scope to a single pull zone, which distinguishes it from the broader bunny_purge_url sibling. The two granularity modes (everything vs. cache-tagged files) are named up front, so the purpose 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 description conveys the two operating modes (full purge vs. tag-scoped purge), which implies how to invoke it, but it never says when to choose this over bunny_purge_url or any other sibling, nor are there prerequisites or exclusions. 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.
bunny_purge_urlPurge a URL from cacheADestructiveInspect
WRITE. Purge one URL from the CDN cache. A URL ending in '/' purges everything under it unless exact_path is true; a '*' wildcard is also accepted. The CDN refetches from the origin. bunny.net: POST /purge.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The CDN URL to purge, e.g. https://myzone.b-cdn.net/css/site.css. | |
| async | No | Return immediately instead of waiting for the purge to finish. | |
| exact_path | No | For a URL ending in '/', purge only that exact path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true already declared, the description still adds real value: it flags this as a WRITE, explains the default trailing-slash cascade behavior, the wildcard support, and that the CDN refetches from origin. It omits auth requirements, rate limits, and whether the purge is reversible, so it is good but not exhaustive.
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 'WRITE.' marker, then the scope, then the URL-form rules — all tight with no wasted clauses. The trailing 'bunny.net: POST /purge' endpoint note is the one line that does not help an agent decide or invoke, keeping it just short of a 5.
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?
No output schema exists, so the description carries the return-value burden; it does not say what a purge response looks like or how async results are surfaced. For a one-URL purge mutation the operational semantics (cascade, wildcard, origin refetch) are otherwise well 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 coverage is 100%, so the baseline is 3, but the description goes past the schema by explaining the default behavior of a trailing-slash URL ('purges everything under it') and how exact_path and wildcards interact. Only the async parameter gets no additional description beyond the schema text.
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 with precise scope: 'Purge one URL from the CDN cache.' The 'one URL' scope implicitly separates it from the sibling bunny_purge_pull_zone_cache, which operates at zone level, so an agent can route between them without opening either 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?
It explains the semantics of the argument (trailing slash, wildcard, exact_path) but never says when to choose this tool over bunny_purge_pull_zone_cache or when a whole-zone purge is preferable. Usage is implied by the tool's scope rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_remove_blocked_ipUnblock an IP on a pull zoneADestructiveInspect
WRITE. Remove an IP address from a pull zone's block list. bunny.net: POST /pullzone/{id}/removeBlockedIp.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | The IP address, e.g. 203.0.113.7. | |
| pull_zone_id | Yes | The Pull Zone ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'WRITE' prefix corroborates the destructiveHint=true annotation, so the safety profile is consistent rather than contradictory. However, the description adds no behavioral detail beyond the annotation — no idempotency, no effect on existing traffic, no auth requirements.
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?
Three tight fragments — operation class, action, endpoint — with the key action front-loaded and zero filler. Nothing could be removed without losing information.
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?
Adequate for a two-parameter mutation with annotations covering the safety profile and a fully documented schema, and no output schema to explain. It omits edge-case behavior (IP not currently blocked, whether removal is idempotent), leaving a modest gap for a destructive write.
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 100% and both parameters carry descriptions with an example IP and ID constraints, so the schema does the heavy lifting. The description adds only the {id} path placeholder, which maps to the schema but adds no new meaning.
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 ('Remove') and resource ('an IP address from a pull zone's block list'), which is immediately distinguishable from the sibling bunny_add_blocked_ip. The API endpoint reference reinforces the scope.
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 alternatives such as bunny_add_blocked_ip, nor any prerequisites (e.g. that the IP must already be blocked). The 'WRITE' tag signals mutation class but not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_set_edge_rule_enabledEnable or disable an edge ruleADestructiveInspect
WRITE. Turn one edge rule on a pull zone on or off (reversible — the rule is kept). Get the rule's GUID from bunny_get_pull_zone (EdgeRules[].Guid). bunny.net: POST /pullzone/{pullZoneId}/edgerules/{edgeRuleId}/setEdgeRuleEnabled.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true to enable, false to disable. | |
| edge_rule_id | Yes | The edge rule's GUID. | |
| pull_zone_id | Yes | The Pull Zone ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give destructiveHint=true; the description adds that this is a WRITE, that it is reversible, and that the rule object is retained rather than deleted — genuinely useful context beyond the annotation. There is a mild tension in that destructiveHint=true while the change is described as reversible and non-destructive, but the toggle can still disrupt traffic, so this reads as clarification rather than contradiction.
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 WRITE marker, then the action, then the reversal guarantee, then the GUID source and endpoint in one tight block. The trailing API path is marginal value but harmless; nothing is padded.
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 3-parameter toggle with no output schema, the description covers mutation type, reversibility, and parameter sourcing, which is enough to invoke correctly. It does not say what the call returns or whether a subsequent read is needed to confirm state.
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 100%, so baseline is 3, and the description earns above baseline by documenting where edge_rule_id comes from (bunny_get_pull_zone EdgeRules[].Guid) — provenance the schema does not supply. It does not add anything for pull_zone_id beyond the 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 (turn on/off) and resource (one edge rule on a pull zone), and immediately frames it as a write operation. No sibling tool touches edge rules, so the scope is unambiguous against the rest of the bunny_* list.
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 routes the agent to bunny_get_pull_zone as the source of the required GUID (EdgeRules[].Guid), which is real prerequisite guidance. There is no explicit 'when not to use' or alternative path, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bunny_update_dns_recordUpdate a DNS recordADestructiveInspect
WRITE. Update an existing DNS record. Takes effect on live DNS. Read the record first with bunny_list_dns_records and pass its type, name and value along with any other fields you want to keep or change. bunny.net: POST /dnszone/{zoneId}/records/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag (CAA), e.g. 'issue'. | |
| ttl | No | TTL in seconds. | |
| name | Yes | Record name relative to the zone; empty string for the apex, e.g. 'www'. | |
| port | No | Port (SRV). | |
| type | Yes | Record type. | |
| flags | No | Flags (CAA). | |
| value | Yes | Record value, e.g. an IP for A, a hostname for CNAME, text for TXT. | |
| weight | No | Weight (SRV, weighted records). | |
| comment | No | Free-text note on the record. | |
| zone_id | Yes | The DNS Zone ID. | |
| disabled | No | Keep the record but stop serving it. | |
| priority | No | Priority (MX, SRV). | |
| record_id | Yes | The DNS record ID. | |
| accelerated | No | Route the record through the CDN (CDN acceleration). | |
| pull_zone_id | No | Pull Zone ID, for type PullZone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that it is a WRITE operation, that changes take effect on live DNS, and that fields not explicitly passed may be lost unless carried over from a prior read. This goes well past the annotation by explaining the practical destructive consequence and required workflow.
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 critical WRITE warning, then flows into purpose, side effects, prerequisite read, field-preservation guidance, and the underlying endpoint. Every sentence is useful and no filler is present.
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 15-parameter mutation tool with only a destructiveHint annotation and no output schema, the description supplies the essential operational context: live effect, prerequisite read, and preservation of fields. No output schema exists, so omission of return-value details is appropriate.
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 100%, so the baseline is 3. The description adds meaningful workflow semantics by explaining that required fields type, name, and value must be supplied along with any other fields the agent wants to preserve, which clarifies how the update interacts with the existing record.
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 ('Update an existing DNS record') and begins with 'WRITE', immediately distinguishing it from read operations like bunny_list_dns_records and from creation via bunny_add_dns_record. An agent can tell what it does and when it is inappropriate 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?
It gives clear procedural guidance: read the record first with bunny_list_dns_records and pass its type, name and value plus any other fields to keep or change. This tells the agent how to use the tool correctly, but it does not explicitly say when not to use it (e.g., for new records use bunny_add_dns_record instead).
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.
22 tool updates
- Changed
bunny_add_blocked_ip1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_add_dns_record1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_export_dns_zone1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_get_audit_log1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_get_billing1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_get_dns_zone1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_get_pull_zone1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_get_statistics1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_get_storage_zone1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_get_storage_zone_statistics1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_get_video_library1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_list_dns_records1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_list_dns_zones1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_list_pull_zones1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_list_regions1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_list_storage_zones1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_list_video_libraries1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_purge_pull_zone_cache1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_purge_url1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_remove_blocked_ip1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_set_edge_rule_enabled1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
bunny_update_dns_record1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
22 tool updates
- First observed
bunny_add_blocked_ip - First observed
bunny_add_dns_record - First observed
bunny_export_dns_zone - First observed
bunny_get_audit_log - First observed
bunny_get_billing - First observed
bunny_get_dns_zone - First observed
bunny_get_pull_zone - First observed
bunny_get_statistics - First observed
bunny_get_storage_zone - First observed
bunny_get_storage_zone_statistics - First observed
bunny_get_video_library - First observed
bunny_list_dns_records - First observed
bunny_list_dns_zones - First observed
bunny_list_pull_zones - First observed
bunny_list_regions - First observed
bunny_list_storage_zones - First observed
bunny_list_video_libraries - First observed
bunny_purge_pull_zone_cache - First observed
bunny_purge_url - First observed
bunny_remove_blocked_ip - First observed
bunny_set_edge_rule_enabled - First observed
bunny_update_dns_record
Related MCP Connectors
DNS lookups, health reports, SSL certs, security scans, GEO scoring, uptime checks
Inspects live IPv4/IPv6 DNS resolution, TLS certificate issuer/expiry, and HTTP security grade.
Inspects live IPv4/IPv6 DNS resolution, TLS certificate issuer/expiry, and HTTP security grade.
Validates domain email MX records and DNS status via Cloudflare DNS-over-HTTPS.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables interaction with Bunny.net APIs for Stream/Video, Storage, CDN Pull Zones, and DNS services. Provides 35 tools for managing video libraries, files, CDN configurations, and DNS records through Claude.37-
- AlicenseAqualityAmaintenanceEnables AI assistants to manage Bunny.net services such as pull zones, DNS, storage, video streaming, edge scripting, security, and Magic Containers through natural language.549 npmMIT
- AlicenseAqualityCmaintenanceProvides safe, read-only network diagnostics (ping, DNS, HTTP health, TLS expiry, port checks, traceroute, and fleet sweeps) for monitoring infrastructure.7MIT
- AlicenseBqualityCmaintenanceProvides typed tools for DNS, zone, and cache management plus a universal passthrough to any Cloudflare API v4 endpoint, with confirmation required for destructive operations.8MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.