zone-mcp
Provides tools to list and manage MySQL databases and database users on a Zone webhosting account, with additional MySQL operations available through the generic ZoneID API request tool.
Allows managing PM2 process manager resources on Zone hosting through the generic ZoneID API request tool.
Allows managing Redis resources on Zone hosting through the generic ZoneID API request tool.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zone-mcpshow the MX and TXT records for example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
zone-mcp
An MCP server for Zone.ee / Zone.eu hosting, built on the ZoneID API v2. Use it from Claude or any other MCP client to manage domains, DNS records, mail forwarders and webhosting. A generic, spec-aware request tool covers the rest of the API: mailboxes, MySQL, cron, SSH, FTP, Redis, PM2 and cloud VPS.
Built on the MCP TypeScript SDK v2 (
@modelcontextprotocol/server). It serves the 2026-07-28 protocol revision and still works with clients on the 2025 revisions.Uses the stdio transport. It needs Node.js 20 or newer.
Tools
Tool | What it does |
| Domains on the account (filters, sorting, paging), or one domain with its nameservers |
| Webhosting packages and their usage, or a server's IPs, paths and hostnames |
| Records of one type, or of every type, optionally filtered by name |
| Manage A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, TLSA, SSHFP and URL records |
| Mailboxes and forwarders on a webhosting |
| Manage forwarders (aliases) |
| MySQL databases and database users |
| Cron jobs and SSL certificates. Private keys are never returned |
| Search the bundled OpenAPI spec, and show an endpoint's parameters and body fields |
| Call any ZoneID API endpoint. POST, PUT and DELETE ask you to confirm first |
Related MCP server: infomaniak-mcp-agent
Setup
Create an API token at my.zone.eu → Settings → Security → API keys. It is shown only once.
Give the server your ZoneID username and token. Use either option below.
Option A: macOS Keychain (recommended on a Mac). The token never appears in a config file.
security add-generic-password -U -s zone-ee-api -a <your ZoneID username> -w
# paste the token at the prompt
claude mcp add -s user zone -- npx -y github:aanndryyyy/zone-mcpOption B: environment variables.
claude mcp add -s user zone -e ZONE_USERNAME=<username> -e ZONE_API_TOKEN=<token> -- npx -y github:aanndryyyy/zone-mcpClaude Desktop, Cursor, and other clients using mcpServers JSON
{
"mcpServers": {
"zone": {
"command": "npx",
"args": ["-y", "github:aanndryyyy/zone-mcp"],
"env": { "ZONE_USERNAME": "<username>", "ZONE_API_TOKEN": "<token>" }
}
}
}If you stored the credentials in the Keychain, leave out the env block.
From a local clone
git clone https://github.com/aanndryyyy/zone-mcp.git
cd zone-mcp && npm install # builds dist/ automatically
claude mcp add -s user zone -- node "$PWD/dist/index.js"Environment variables
Variable | Default | Purpose |
| – | ZoneID username |
| – | ZoneID API token |
|
| macOS Keychain service the server reads when the two variables above are not set |
|
| Override the API base URL |
Example prompts
"Which of my domains expire in the next 30 days?"
"Show the MX and TXT records for example.com."
"Add a TXT record
_acme-challenge.example.comwith valueabc123.""Point www.example.com at 192.0.2.10."
"Forward info@example.com to me@example.org."
"Create a daily 03:00 cron job on example.com that runs
php artisan schedule:run." (This one usesdescribe_endpoint, thenzone_api_request.)
Notes
Confirmation before writes. If your client supports form elicitation, the server asks you to confirm before it runs
update_*,delete_*, or a POST, PUT or DELETE throughzone_api_request. The prompt shows the old and new values, or the method, path and body. If you decline, nothing is sent and the tool returnsstatus: "declined"(or"cancelled"if you dismissed the prompt). The confirmation is bound to the exact arguments with a signedrequestState, so a client cannot answer it in advance or reuse it for other arguments. Clients without form elicitation skip this step and rely on their own tool-approval prompt. Create tools rely on the client's own tool approval.DNS names are FQDNs. Zone stores record names as
www.example.com. The DNS tools accept@, a bare label (www), or the FQDN, and convert it.update_dns_recordchanges only the fields you pass.Not available through the API: DNS TTLs (Zone manages them) and DNSSEC activation. Use my.zone.eu for these.
Rate limit. The API allows 60 requests/min per IP.
list_dns_recordswithouttypeuses 11 requests, one per record type. A429comes back as a tool error.Paid operations. Some endpoints reachable through
zone_api_requestcost money, for example/order/domain/renew,/order/cloudand billing resources.Structured output. Every tool declares an
outputSchemaand returnsstructuredContent, with the same JSON as text. The API always returns arrays, so list tools return objects such as{ domains, pager }.resource_urland_linksare removed to save tokens.Path safety.
zone_api_requestaccepts only paths underhttps://api.zone.eu/v2and does not follow redirects, so your credentials are never sent to another host.The OpenAPI spec in
spec/openapi.jsonis Zone's public API reference, bundled so the server can work offline.
Development
npm install
npm run build
npx @modelcontextprotocol/inspector node dist/index.js # interactive testing
# End-to-end smoke test against your live account. It's read-only: the only write is a DELETE of a record id that
# doesn't exist. It uses about 30 requests, so wait a minute between runs.
npm test # 2026-07-28 protocol
PROTOCOL=legacy npm test # 2025-era protocolLicense
MIT. Not affiliated with Zone Media OÜ.
Available Tools
19 toolscreate_dns_recordCreate DNS recordB
Create a DNS record. name may be '@' (zone apex), a label like 'www', or the FQDN; it is sent to Zone as an FQDN. Type-specific fields: MX priority; SRV priority, weight and port; CAA flag and tag; TLSA certificate_usage, selector and matching_type; SSHFP algorithm and fingerprint_type; URL redirect_type. TTL can't be set through the API.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | CAA: tag. | |
| flag | No | CAA: flag (usually 0). | |
| name | Yes | '@', a label ('www', '_acme-challenge') or the FQDN. | |
| port | No | SRV: port. | |
| type | Yes | Record type: a, aaaa, cname, mx, txt, ns, srv, caa, tlsa, sshfp, or url (Zone's HTTP redirect record). | |
| zone | Yes | DNS zone, e.g. 'example.com'. | |
| weight | No | SRV: weight. | |
| priority | No | MX, SRV: priority. | |
| selector | No | TLSA: selector 0–1. | |
| algorithm | No | SSHFP: algorithm (1=RSA, 2=DSA, 3=ECDSA, 4=Ed25519). | |
| destination | Yes | The record value: IP, target host, TXT text, CAA value, fingerprint, or the redirect URL for URL records. | |
| matching_type | No | TLSA: matching type 0–2. | |
| redirect_type | No | URL: HTTP redirect status, 301 (default) or 302. | |
| fingerprint_type | No | SSHFP: fingerprint type (1=SHA-1, 2=SHA-256). | |
| certificate_usage | No | TLSA: certificate usage 0–3. |
Output Schema
| Name | Required | Description |
|---|---|---|
| record | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds two genuinely useful behavioral facts: TTL is not settable via API, and `name` is normalized to an FQDN when sent to Zone. This is the kind of context annotations (readOnly=false, idempotent=false, openWorld=true) cannot carry.
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?
It is front-loaded with the core action, but the middle sentence is a long run-on list of type-specific fields that mostly duplicates the schema descriptions one-for-one. That list could be compressed or dropped without loss.
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 15 parameters and an output schema present, the definition covers the essentials but omits which fields are mandatory for which record types (e.g. priority for MX/SRV) and any error behavior. For a tool with 11 record types this leaves meaningful gaps for an agent composing a 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 coverage is 100%, so every parameter already has a description, including the 'MX, SRV: priority' and 'CAA: flag' notes that the description largely restates. The only added meaning is the '@' apex shorthand and the FQDN normalization behavior, which the schema hints at but doesn't fully explain.
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 and resource ('Create a DNS record'), which is unambiguous and easily separable from the sibling list/update/delete_dns_record tools by name alone. It doesn't explicitly contrast itself with those siblings, so it stops 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?
There is no guidance on when to create versus update an existing record, no prerequisites (e.g. that the zone must already exist), and no mention of what happens if a conflicting record exists. The agent must infer all routing decisions from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mail_forwarderCreate mail forwarderB
Create an e-mail forwarder (alias) that forwards address to one or more destination addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The forwarder address, e.g. 'info@example.com'. | |
| comment | No | ||
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). | |
| fwd_addresses | Yes | Destination addresses. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mail_forwarder | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=true, so the safe-creation profile is covered. The description adds nothing beyond that (no conflict/duplicate behavior, no permission or quota notes), but it does not contradict the annotations either.
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 resource and the alias relationship front-loaded and the '(alias)' gloss adding useful terminology. No filler whatsoever.
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 present and annotations covering safety semantics, the description only needs to fix the tool's identity and it does. The remaining gap is that it never mentions the required vserver scoping, which matters for a multi-webhosting account, but the schema covers that parameter in detail.
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 75% with descriptions on address, vserver and fwd_addresses; the description only restates address-to-destination mapping and the 'one or more' cardinality that minItems already encodes. The `comment` parameter and the vserver scoping requirement receive no elaboration in the description.
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 uses a concrete verb ('Create') with a specific resource ('e-mail forwarder (alias)') and states the forwarding relationship between `address` and the destinations. It implicitly distinguishes itself from the list/update/delete forwarder siblings, though it never names 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?
There is no when-to-use guidance, no mention of prerequisites (e.g. needing an existing webhosting/vserver, see list_webhostings), and no statement about what happens if the alias already exists or how it relates to update_mail_forwarder/create_mail_account.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dns_recordDelete DNS recordADestructiveIdempotent
Delete a DNS record by id (from list_dns_records). When the client supports it, the user is asked to confirm first; if they decline, nothing is deleted and the result has status 'declined' (or 'cancelled').
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id from list_dns_records. | |
| type | Yes | Record type: a, aaaa, cname, mx, txt, ns, srv, caa, tlsa, sshfp, or url (Zone's HTTP redirect record). | |
| zone | Yes | DNS zone, e.g. 'example.com'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| type | No | |
| zone | No | |
| record | No | |
| status | No | |
| message | No | Set when the user declined or dismissed the confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavior beyond that: a confirmation prompt when the client supports it, and the exact outcome semantics when the user declines ('declined'/'cancelled', nothing deleted). It stops short of covering failure modes such as a missing or already-deleted record.
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, front-loaded with the verb and resource, then the confirmation behavior. The parenthetical '(or cancelled)' is slightly noisy but does convey a real variant status, so no sentence 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 a complete output schema and 100% parameter coverage, the description only needs to explain the destructive confirmation flow, which it does, including the declined/cancelled outcome. Minor gap: no mention of what happens on invalid ids or whether dependent records are affected.
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 all three parameters (zone, type, id with a full enum list) are already fully documented in the schema. The description reiterates that id comes from list_dns_records, which is already stated in the id's schema description, and adds no further meaning for zone or type. Baseline 3 applies when the schema carries the load.
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 ('Delete a DNS record') and names the lookup tool that supplies the id, so it is distinguishable from create_dns_record and update_dns_record. It does not explicitly contrast itself with those siblings, but the operation 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?
It gives a clear prerequisite: the id must come from list_dns_records, which tells an agent to look the record up first. It does not name explicit when-not-to-use conditions, but for a destructive delete the usage context is adequately conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mail_forwarderDelete mail forwarderADestructiveIdempotent
Delete an e-mail forwarder. When the client supports it, the user is asked to confirm first; if they decline, nothing is deleted and the result has status 'declined' (or 'cancelled').
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The forwarder address. | |
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| message | No | Set when the user declined or dismissed the confirmation. |
| mail_forwarder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is largely covered. The description still adds real value beyond them by explaining the client-side confirmation prompt and the 'declined'/'cancelled' outcome, which an agent cannot infer from structured fields. It stops short of saying what happens when the forwarder does not exist or what error shape to expect, so a 3 rather than a 4.
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 with the core action front-loaded and no padding. The parenthetical '(or cancelled)' introduces slight ambiguity about which status string to expect, which is the only small friction.
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 present and full schema coverage, the description only needs to carry behavior, and it does explain the confirm/decline path and resulting status. The missing piece is failure behavior for a non-existent or unowned forwarder, which is minor for a two-parameter delete.
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 (vserver, address) are documented in the schema, including a pointer to list_webhostings. The description adds no parameter-level 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?
The description states a specific verb and resource ('Delete an e-mail forwarder'), which cleanly separates it from the create_mail_forwarder, update_mail_forwarder and list_mail_forwarders siblings by operation type. It never names those siblings explicitly, so differentiation comes from the verb rather than an explicit routing statement.
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 destructive verb, and the confirmation flow gives useful context for the interaction. However, it does not say how to locate the forwarder to delete (e.g. via list_mail_forwarders), nor when to prefer update_mail_forwarder over deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_endpointDescribe API endpointARead-only
Show the parameters, request-body fields and response fields of a ZoneID API endpoint from the official OpenAPI spec. path may be a template ('/vserver/{service_name}/crontab') or a concrete path ('/vserver/example.com/crontab').
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| method | No | Only this method (default: all). |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| methods | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=true, openWorldHint=false), so the remaining value is provenance, and the description supplies it by naming the official OpenAPI spec as the source, which tells the agent the answer is authoritative rather than inferred. It does not say what happens when a path is not found in the spec.
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, zero filler, with the core capability front-loaded and the path-format caveat second. The inline examples do real work rather than padding.
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 enumerated; the description still names the three things returned (parameters, request body, response fields), which is enough for an agent to decide to call it. It could be slightly stronger by relating itself explicitly to the sibling tools.
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 only 50% and the undocumented parameter is `path`; the description compensates by explaining that it accepts either a template ('/vserver/{service_name}/crontab') or a concrete path, with examples. `method` is already documented in the schema, so no further detail is needed there.
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 concrete verb and resource: it shows parameters, request-body fields and response fields for an endpoint, sourced from the official OpenAPI spec. That distinguishes it from siblings like find_endpoints (discovery) and zone_api_request (execution), since this one is pure spec introspection.
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: an agent can infer you call this before zone_api_request to learn an endpoint's shape, but the description never says when to use it instead of find_endpoints or zone_api_request. No preconditions or failure cases (e.g. unknown path) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_endpointsFind API endpointsARead-only
Search the ZoneID API v2 reference for endpoints whose path, tag or summary contains every word of query (e.g. 'redis', 'mail autoreply', 'cloud resize'). Omit query to list all endpoints. Use describe_endpoint for the parameters and body fields, then zone_api_request to call it.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| endpoints | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds the real value of disclosing matching semantics (conjunctive 'every word') and the empty-query listing behavior. It stops short of noting result limits or pagination, which is the only remaining behavioral gap, and an output schema exists so return shape need not be explained.
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 sentences, with the core action and matching scope front-loaded before the optional-parameter note and the workflow pointer. The parenthetical examples are useful rather than filler, though they add a little length that could be trimmed.
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 single-optional-parameter read tool with annotations and an output schema, the description covers everything an agent needs: what is searched, how matching works, what happens with no query, and which tools to call next. No material gap remains.
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 carries the full burden and does: it defines the matching fields, the AND-across-words rule, the option to omit the parameter for an unfiltered listing, and gives three illustrative values ('redis', 'mail autoreply', 'cloud resize'). This adds meaning well beyond the bare `type: string` in 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 and resource ('Search the ZoneID API v2 reference for endpoints') and narrows the search scope to path, tag and summary. It is clearly distinguished from the sibling tools describe_endpoint and zone_api_request, which are named as separate steps rather than competitors.
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 explicit when-to-use (free-text lookup by keyword), an edge case with its behavior ('Omit query to list all endpoints'), and a workflow that routes the agent onward to describe_endpoint for details and zone_api_request to call. Nothing about invocation choice 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.
get_domainGet domainARead-only
Get one domain's registration details (expiry, DNSSEC, autorenew, delegation) together with its nameservers.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name, e.g. 'example.com'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| nameservers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply readOnlyHint=true and openWorldHint=true, so safety is covered; the description adds value by enumerating the exact payload an agent will receive (registration fields plus nameservers). It stops short of disclosing error behavior for unknown domains or any lookup/latency caveats.
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 with no filler; the verb and scope come first and the parenthetical field list earns its space by signalling what the response contains.
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?
Low-complexity, single-parameter read tool with an output schema, so return values need not be described at length; the description is sufficient to select and invoke it. A brief note on the not-found case or sibling routing would make it 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 coverage is 100% and the single 'domain' parameter is documented in-schema with an example ('example.com'). The description adds no additional meaning beyond that, so the baseline 3 for high-coverage schemas 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?
Names a specific verb and resource ('Get one domain's registration details') and enumerates the data returned (expiry, DNSSEC, autorenew, delegation, nameservers). The singular 'one domain' implicitly distinguishes it from the list_domains sibling, though it never names that sibling 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: 'one domain' suggests a single-record lookup as opposed to a listing, which points an agent toward this tool over list_domains. There is no explicit when-to-use, when-not-to-use, or prerequisite statement (e.g. required auth or whether the domain must be registered with this account).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoGet webhosting server infoCRead-only
Server details for a webhosting: IPs, temporary domain, home and document-root paths, MySQL and loopback hostnames, system username, binary paths, phpMyAdmin URL.
| Name | Required | Description | Default |
|---|---|---|---|
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| server_info | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing behavioral beyond that — no indication that data is fetched live from the server, no note on failure modes for an unknown vserver, and it spends its only sentence restating return contents.
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?
It is short and contains no filler words, which is good. However, the content is a comma-separated field dump that duplicates the output schema rather than front-loading the tool's purpose, so the brevity buys little.
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 did not need to enumerate return fields — yet that is essentially all it does. For a tool with one required argument and open-world reads, it omits the purpose, the typical workflow position, and any caveats, leaving clear gaps.
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 the single parameter is documented with format hints and an example ('example.com') plus a reference to list_webhostings. The description contributes no additional meaning about the vserver argument, so 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 names the resource ('Server details for a webhosting') and enumerates what is returned, so an agent can grasp the topic. But it is a bare noun phrase with no verb, and it never distinguishes this from siblings such as list_webhostings or get_domain, which also return hosting-related data.
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 statement of the scenario that calls for server info, no prerequisite that a webhosting must exist or be listed first. The only pointer to list_webhostings lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cron_jobsList cron jobsARead-only
List the cron jobs on a webhosting: schedule, command or URL, type (http/system), reporting and state.
| Name | Required | Description | Default |
|---|---|---|---|
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| pager | No | Pagination from the x-pager-* headers; present only on paginated endpoints. |
| cron_jobs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds the useful detail of what the entries contain (type http/system, reporting, state) but says nothing about result volume, pagination, or ordering for a list endpoint.
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 with no filler; the field enumeration earns its place by telling the agent what to expect. 'reporting and state' is slightly vague but does not bloat the 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?
An output schema exists, so return values need not be explained, and the single parameter is fully described in the schema. The definition is adequate for a simple read-only listing tool, with only pagination/volume behavior left unaddressed.
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 the single 'vserver' parameter is documented there with an example and a pointer to list_webhostings. The description adds nothing about parameters, so 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?
Uses a specific verb 'List' plus the resource 'cron jobs' and enumerates the fields surfaced (schedule, command/URL, type http/system, reporting, state), which makes the scope concrete. It does not name or contrast with any sibling tool, though none of the listed siblings cover cron, so confusion risk is low.
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?
Listing is inherently implied by the verb, and the required 'vserver' scoping is left entirely to the schema. There is no statement of when to prefer this over another tool, nor any prerequisite or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_recordsList DNS recordsARead-only
List DNS records in a zone. Pass type for one record type; omit it to fetch every type (one API request per type, 11 in total, against a limit of 60/min). Record names are FQDNs ('www.example.com'). Each record has an id (for update/delete) and modify / delete flags; records with delete: false are system-managed. TTL is managed by Zone and not exposed by the API.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Only records with this name ('www', 'www.example.com' or '@' for the apex). | |
| type | No | Record type: a, aaaa, cname, mx, txt, ns, srv, caa, tlsa, sshfp, or url (Zone's HTTP redirect record). | |
| zone | Yes | DNS zone, e.g. 'example.com'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| zone | Yes | |
| records | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: omitting `type` triggers one request per record type, 11 total, against a 60/min limit. It also explains FQDN naming, record `id` usage, `modify`/`delete` flags, system-managed records, and that TTL is not exposed.
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 and then supplies only operationally relevant details. Every sentence adds useful information about filtering, rate limits, or record metadata without unnecessary 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?
For a read-only list tool with an output schema and clear annotations, the description is complete enough to call correctly. It covers filtering behavior, request cost, record identity, system-managed records, and the TTL limitation.
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 already documents the three parameters. The description still adds meaningful semantics for `type` by explaining the per-type request behavior and total request cost, and for `name` by reinforcing that names are FQDNs.
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 and resource: 'List DNS records in a zone.' This clearly distinguishes the read operation from sibling tools such as create_dns_record, update_dns_record, and delete_dns_record.
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 how the `type` parameter affects fetches and notes the request cost, which is useful usage context. However, it does not explicitly state when to use this tool versus alternatives or any exclusions, so usage is implied rather than fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domainsList domainsARead-only
List the domains on the ZoneID account with expiry, DNSSEC, autorenew and delegation info. Paginated (see pager).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Only domains whose name contains this string. | |
| page | No | Page number (default 1). | |
| limit | No | Items per page, 1–100 (default 10 on paginated endpoints). | |
| order_by | No | ||
| order_dir | No | ||
| renewable | No | Only renewable domains. | |
| needs_renewal | No | Only domains expiring within 30 days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pager | No | Pagination from the x-pager-* headers; present only on paginated endpoints. |
| domains | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that results are paginated, but does so with a cryptic 'see `pager`' reference that is not a parameter here and matches no sibling tool, leaving the actual pagination mechanics unexplained. It also discloses the fields returned, which is useful behavioral context, but says nothing about result volume or account/auth scoping.
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 with the core capability front-loaded; nothing is wasted. The parenthetical 'see `pager`' is the one weak element — it is a dangling reference that costs a clause without conveying usable 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?
An output schema exists, so return-value explanation is unnecessary, and the annotations cover safety. The remaining gap is pagination behavior: with 7 optional parameters including page and limit, the description only gestures at paging rather than tying it to those parameters.
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 71%, and the two undocumented parameters (order_by, order_dir) are self-describing enums, so the schema carries most of the load. The description adds nothing about any parameter — the filtering semantics of name, renewable, and needs_renewal are only in the schema descriptions. 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 ('List the domains') plus the account scope ('on the ZoneID account') and the fields returned (expiry, DNSSEC, autorenew, delegation). That is enough for an agent to distinguish it from get_domain (single domain) and list_dns_records 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?
Usage is only implied by the verb: call this when you need to enumerate domains. There is no explicit guidance on when to prefer get_domain over this, or on what filtering combinations are supported for finding a single domain. The only directive given, 'see `pager`', points at something outside this definition and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mail_accountsList mailboxesARead-only
List the e-mail accounts (mailboxes) on a webhosting, with quota, spam level, forwards and 2FA state.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| limit | No | Items per page, 1–100 (default 10 on paginated endpoints). | |
| address | No | Filter by address. | |
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| pager | No | Pagination from the x-pager-* headers; present only on paginated endpoints. |
| mail_accounts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the field set returned, but says nothing about pagination behaviour, ordering, or that results are scoped to a single vserver; with annotations carrying the safety burden, this is adequate rather than 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?
A single front-loaded sentence with no wasted wording. Slightly awkward phrasing ('on a webhosting') and the trailing field list leans on what the output schema already conveys, but it remains 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?
An output schema exists, so return values need not be spelled out, and annotations cover read-only safety. For a simple filtered list tool the description is nearly complete; only ordering/pagination expectations and exact-vs-substring address matching are left implicit.
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%: page, limit, address and vserver are all documented in the schema, including the default page size and the vserver example. The description adds no parameter meaning beyond that, so 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 (list) and resource (e-mail accounts/mailboxes) scoped to a webhosting, and names the fields surfaced (quota, spam level, forwards, 2FA). It is distinguishable from siblings like list_mail_forwarders by resource, though it never explicitly contrasts with 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?
Usage is implied by the object being listed: read this to enumerate mailboxes on a given vserver. There is no explicit when-to-use/when-not guidance and no pointer to the closest sibling (list_mail_forwarders) for the forwards data it mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mail_forwardersList mail forwardersARead-only
List the e-mail forwarders (aliases) on a webhosting and where each one forwards to.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| limit | No | Items per page, 1–100 (default 10 on paginated endpoints). | |
| address | No | Filter by address. | |
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| pager | No | Pagination from the x-pager-* headers; present only on paginated endpoints. |
| mail_forwarders | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the useful behavioral fact that each forwarder's target address is included in the result, but says nothing about pagination behavior, result limits, or ordering, which matters given the page/limit parameters.
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 tight sentence with the resource and scope front-loaded and no filler. Nothing needs to be trimmed.
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, fully documented parameters, and read-only annotations, the description is sufficient to call the tool correctly. The only shortfall is the absence of any hint about pagination or filtering strategy, which an agent would otherwise have to infer from the schema alone.
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 vserver hint and the page/limit ranges, so the schema does the heavy lifting. The description adds no meaning beyond the schema — notably it doesn't say how the 'address' filter matches (local part vs full alias).
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 e-mail forwarders (aliases) on a webhosting') and clarifies the returned content ('where each one forwards to'), which separates it from list_mail_accounts and the create/update/delete_mail_forwarder siblings. It never names those siblings explicitly, so routing 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?
The read-only listing intent is implied by 'List', and the mention of 'a webhosting' implies it is scoped per virtual server. There is no explicit when-to-use statement, no pointer to create_mail_forwarder/update_mail_forwarder for mutations, and no note about paginating when results are large.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mysqlList MySQL databases and usersBRead-only
List the MySQL databases and database users (with their allowed hosts) on a webhosting.
| Name | Required | Description | Default |
|---|---|---|---|
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| accounts | Yes | |
| databases | Yes |
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 that returned database users include their allowed hosts, which is a useful output-content hint, but it says nothing about behavior on unknown webhostings, empty results, or pagination. With read-only behavior already declared, the extra value is modest.
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 well-formed sentence with no filler, and the resource scope is front-loaded. It is arguably too terse rather than bloated, but nothing in it 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?
An output schema exists, so return values need not be explained, and annotations cover the read-only safety profile. The single parameter is fully documented in the schema. The only shortfall is the absence of any usage routing or prerequisite note, which is minor for a simple one-parameter read 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 100% and the only parameter's description already explains the webhosting name convention and points to list_webhostings. The phrase 'on a webhosting' in the description merely echoes the schema, adding no syntax or format detail. Baseline 3 applies since 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 and resource: 'List the MySQL databases and database users (with their allowed hosts)'. It also scopes to 'on a webhosting', which is clear. No sibling tool covers MySQL, so there is nothing to disambiguate against, but 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 gives no explicit when-to-use or when-not-to-use guidance and names no alternatives or prerequisites. Usage is only implied by the noun phrase 'on a webhosting'; the agent must infer that it needs a webhosting name first (which is only stated in the schema, pointing at list_webhostings).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ssl_certificatesList SSL certificatesARead-only
List the SSL certificates on a webhosting, with their hosts and validity. The PEM certificate bodies are left out unless include_pem is true; private keys are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). | |
| include_pem | No | Include the PEM `certificate` and `ca_certificate` (default false; large). |
Output Schema
| Name | Required | Description |
|---|---|---|
| pager | No | Pagination from the x-pager-* headers; present only on paginated endpoints. |
| certificates | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered, but the description adds real behavioral detail: PEM bodies are omitted by default and private keys are never returned. It stops short of mentioning result size behavior or ordering.
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, front-loaded with what is returned and followed immediately by the sensitive-data caveat. Nothing is redundant or 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?
With an output schema present and full schema description coverage, the description only needs to convey scope and the PEM/private-key caveat, which it does. Minor gaps like ordering or result-size expectations are acceptable for this complexity level.
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 explains both 'vserver' and 'include_pem' (including the 'large' caveat). The description reinforces the include_pem behavior but adds no new syntactic or format meaning beyond 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?
The description names a specific verb and resource ('List the SSL certificates on a webhosting') and even summarizes the payload ('with their hosts and validity'). No sibling tool overlaps this resource, so differentiation is implicit 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 explicit when-to-use or when-not-to-use guidance and no alternatives are named. The only hints are indirect: the schema's 'vserver' description points the agent at list_webhostings to find a valid value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhostingsList webhostingsARead-only
List the webhosting packages (virtual servers) on the account: name, package, disk/memory usage and limits, home directory, MySQL host. The name is the vserver argument for the mail, MySQL, cron and SSL tools.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| limit | No | Items per page, 1–100 (default 10 on paginated endpoints). |
Output Schema
| Name | Required | Description |
|---|---|---|
| pager | No | Pagination from the x-pager-* headers; present only on paginated endpoints. |
| webhostings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered; the description adds real value by listing the returned data (usage/limits, home directory, MySQL host) and the cross-tool key relationship. It does not discuss pagination behavior, though the schema's page/limit parameters imply it.
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: purpose and payload first, then the practically important key mapping. No filler, nothing buried.
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-optional-parameter read-only list tool with an output schema, the description covers purpose, returned fields, and the critical `name` = `vserver` linkage that no structured field conveys. Nothing needed to call 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 100% and both parameters (page, limit) are fully documented with defaults and ranges in the schema. The description says nothing about paging, so it adds no meaning beyond the structured field definitions; 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 webhosting packages (virtual servers) on the account') and then enumerates the returned fields, so the agent knows exactly what it gets back. It is clearly distinguishable from siblings like list_domains or list_mysql because it names the webhosting/vserver entity.
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 second sentence gives strong implicit routing: run this to discover the `name` value that the mail, MySQL, cron and SSL tools take as `vserver`. It does not state explicit exclusions or when to prefer a sibling, but the downstream-consumption context is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dns_recordUpdate DNS recordADestructiveIdempotent
Change an existing DNS record (find its id with list_dns_records). Only the fields you pass are changed. When the client supports it, the user is asked to confirm the old and new values first; if they decline, nothing changes and the result has status 'declined' (or 'cancelled').
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id from list_dns_records. | |
| tag | No | CAA: tag. | |
| flag | No | CAA: flag (usually 0). | |
| name | No | New name: '@', a label or the FQDN. | |
| port | No | SRV: port. | |
| type | Yes | Record type: a, aaaa, cname, mx, txt, ns, srv, caa, tlsa, sshfp, or url (Zone's HTTP redirect record). | |
| zone | Yes | DNS zone, e.g. 'example.com'. | |
| weight | No | SRV: weight. | |
| priority | No | MX, SRV: priority. | |
| selector | No | TLSA: selector 0–1. | |
| algorithm | No | SSHFP: algorithm (1=RSA, 2=DSA, 3=ECDSA, 4=Ed25519). | |
| destination | No | New value. | |
| matching_type | No | TLSA: matching type 0–2. | |
| redirect_type | No | URL: HTTP redirect status, 301 (default) or 302. | |
| fingerprint_type | No | SSHFP: fingerprint type (1=SHA-1, 2=SHA-256). | |
| certificate_usage | No | TLSA: certificate usage 0–3. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| type | No | |
| zone | No | |
| record | No | |
| status | No | |
| message | No | Set when the user declined or dismissed the confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the interactive confirmation flow, that declining leaves state unchanged, and the exact result status values ('declined'/'cancelled'). It also discloses partial-update semantics, which complements but is not implied by destructiveHint=true or idempotentHint=true.
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 sentences, front-loaded with the action, then the update semantics, then the confirmation caveat. No filler and no restatement of the record-type field matrix that the schema already covers.
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 16-parameter mutation tool with a full output schema and rich annotations, this covers the essentials: how to identify the record, how partial updates behave, and what happens on decline. It does not mention that type-specific fields (CAA/SRV/TLSA/SSHFP) only apply to matching record types, leaving that to the schema.
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 per-field meaning is already documented; the description adds genuine semantic value with the merge/patch rule ('only the fields you pass are changed'). The id-sourcing note duplicates the schema's own description of `id`, which keeps this from 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 ('Change an existing DNS record') and implicitly separates itself from create_dns_record/delete_dns_record via 'existing'. It also names the sibling that supplies the required identifier, so an agent knows exactly what tool feeds this one.
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 concrete pre-call guidance: obtain the `id` from list_dns_records, and note that only supplied fields are modified, which tells the agent to send a minimal patch rather than a full record. It stops short of explicit when-not-to-use guidance (e.g., use delete_dns_record to remove, create_dns_record for new records).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_mail_forwarderUpdate mail forwarderADestructiveIdempotent
Replace the destination list and/or comment of an e-mail forwarder. fwd_addresses replaces the whole list. When the client supports it, the user is asked to confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The forwarder address, e.g. 'info@example.com'. | |
| comment | No | ||
| vserver | Yes | Webhosting (virtual server) name, usually its main domain, e.g. 'example.com' (see list_webhostings). | |
| fwd_addresses | No | New full list of destination addresses. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| message | No | Set when the user declined or dismissed the confirmation. |
| mail_forwarder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false; the description adds genuinely useful detail beyond that by warning that fwd_addresses replaces the entire list rather than appending, and that an interactive confirmation may occur. It stops short of saying whether omitted fields are preserved and how to clear a comment.
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 replacement semantics and the destructive list-overwrite warning before the confirmation caveat. 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?
An output schema exists so return values need no explanation, and the destructive overwrite is flagged. However, for a destructive mutation with an optional-field design, the description omits how partial updates behave and how to clear or leave a field unchanged, which an agent needs before calling 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 75% and the schema already describes fwd_addresses as the 'New full list of destination addresses', so the description's replacement note is largely redundant with it. The description adds nothing about the comment parameter (whether an empty value clears it) or about address/vserver identifying the target forwarder.
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: replacing the destination list and/or comment of an existing e-mail forwarder. The 'update/replace existing' framing separates it from create_mail_forwarder and delete_mail_forwarder in the sibling list, though no sibling is named 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?
Implies usage (modify an existing forwarder rather than create one) and notes that a confirmation prompt may appear, but gives no explicit when-to-use vs. create_mail_forwarder guidance, no preconditions (must the forwarder already exist?), and no statement about what happens if a field is omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zone_api_requestCall the ZoneID APIADestructive
Call any ZoneID API v2 endpoint, for everything the dedicated tools don't cover (mailbox create/update, autoreplies, MySQL create, cron create, SSH keys, FTP users, Redis, PM2, cloud VPS, domain contacts and renewals…). path is relative to https://api.zone.eu/v2, e.g. '/vserver/example.com/crontab'. Look up the body fields with describe_endpoint first. Responses are always arrays. GET and OPTIONS run directly; for POST, PUT and DELETE the user is asked to confirm (when the client supports it), and the prompt shows the method, path and body. Some endpoints cost money (domain renewals, cloud orders, extra packages).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body for POST/PUT (an object, or an array for /order/domain/renew). | |
| page | No | Page number (default 1). | |
| path | Yes | API path, e.g. '/dns/example.com/txt'. | |
| limit | No | Items per page, 1–100 (default 10 on paginated endpoints). | |
| query | No | Query-string parameters, e.g. {"force": true}. | |
| method | Yes | ||
| order_by | No | Sort field (sent as x-order-by). | |
| order_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| path | No | |
| pager | No | Pagination from the x-pager-* headers; present only on paginated endpoints. |
| method | No | |
| status | Yes | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructive/openWorld annotations, the description discloses the confirmation prompt, what that prompt displays (method, path, body), that responses are always arrays, and that some endpoints incur real charges such as domain renewals and cloud orders. These are exactly the side-effect details an agent cannot infer from the structured fields.
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 routing statement and the prerequisite describe_endpoint step, with no filler sentences. The parenthetical enumeration of covered resource types is long but earns its place by helping an agent recognize whether its target is in scope.
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 open-world, destructive, 8-parameter generic client, the description covers routing, prerequisite discovery, path construction, response shape and monetary risk. Because an output schema exists, it correctly omits return-value documentation and spends its length on the hazards instead.
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 75%, and the description adds the base URL that `path` is relative to plus a concrete path example, and clarifies that `body` is an object except for the renew endpoint where it is an array. Pagination and query parameters are left entirely to the schema, which already documents them, so the baseline 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 gives a specific verb and resource (call any ZoneID API v2 endpoint) and immediately scopes it against the dedicated tools it is not meant to replace, listing concrete example domains such as cron, SSH keys and Redis. An agent can tell from the text alone that this is the generic escape hatch rather than one of the typed 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?
It explicitly states the selection rule ('for everything the dedicated tools don't cover') and prescribes the workflow ordering by requiring describe_endpoint before body construction. It also distinguishes methods behaviourally: GET/OPTIONS run directly, POST/PUT/DELETE trigger confirmation, so the agent knows the cost of choosing each method.
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.
19 tool updates
v1.0.0- First observed
create_dns_record - First observed
create_mail_forwarder - First observed
delete_dns_record - First observed
delete_mail_forwarder - First observed
describe_endpoint - First observed
find_endpoints - First observed
get_domain - First observed
get_server_info - First observed
list_cron_jobs - First observed
list_dns_records - First observed
list_domains - First observed
list_mail_accounts - First observed
list_mail_forwarders - First observed
list_mysql - First observed
list_ssl_certificates - First observed
list_webhostings - First observed
update_dns_record - First observed
update_mail_forwarder - First observed
zone_api_request
TDQS
Scored across 19 tools
Most tools target clearly distinct resources and actions (DNS CRUD, mail forwarder CRUD, read-only listings, API discovery/call). The only overlap is that zone_api_request can perform almost everything the dedicated tools do, but its fallback role is explicitly documented, so misselection risk is low.
Almost all tools follow a predictable snake_case verb_noun pattern such as list_domains, get_domain, create_dns_record, and update_mail_forwarder. The main minor deviation is zone_api_request, which is noun-oriented rather than verb_noun.
19 tools is slightly above the typical compact range, but the server covers several subdomains: DNS, domains, webhosting, mail, MySQL, cron, SSL, and generic API access. The count is reasonable for that breadth, though it is on the heavier side.
DNS records and mail forwarders have full lifecycle coverage, while several other resources are read-only through dedicated tools. The find/describe/zone_api_request trio provides a workable escape hatch for missing operations such as mailbox creation, MySQL creation, cron creation, and renewals, so there are no hard dead ends.
Maintenance
Related MCP Connectors
Uptime, SSL, DNS and domain monitoring you can talk to from Claude or any MCP client.
MCP server for DNSimple — domains, DNS zone records, availability, pricing and contacts.
Official Porkbun MCP server: domains, DNS, SSL, hosting and Cloudflare via the Porkbun API.
Manage hosts, redirects, SSL, and traffic analytics from Claude and other AI assistants.
Related MCP Servers
AlicenseAqualityBmaintenanceLets you use Claude Desktop, or any MCP Client, to use natural language to accomplish things on your Cloudflare account.21,610 npm4,451Apache 2.0- AlicenseBqualityCmaintenanceinfomaniak-mcp-agent lets Claude (or any MCP client) drive a real Infomaniak account end-to-end through 54 tools — web hosting, mail, kDrive, domains, DNS, DNSSEC, FTP/SSH users, AI catalogue and more. Every destructive operation goes through a strict two-phase commit (plan + single-use confirmation token) so the agent can never silently mutate your account. Open Source74112 npm8MIT
- AlicenseNot gradedqualityDmaintenanceEnables managing Illuminati Networks CDN zones, object storage, and account (including uploads, signed URLs, and balance) from any MCP client like Claude Desktop.MIT
- AlicenseAqualityDmaintenanceMCP server for managing and analyzing Cloudflare DNS — zones, records, analytics, and DNSSEC.141MIT