Skip to main content
Glama

eurodns-mcp

Manage your domains, DNS zones and subscriptions by asking for it.

A Model Context Protocol server for the EuroDNS User API — domains, DNS zones, contacts, subscriptions, SSL, invoices and orders.

CI License: MIT Node MCP npm Image MCP Badge eurodns-mcp MCP server

Documentation · Tools · Guardrails · Deploying

This is an independent open-source project. It is not affiliated with, endorsed by, or supported by EuroDNS. "EuroDNS" is used only to identify the API this server talks to.

Written by a professional engineer with AI assistance. Every line was reviewed before it was committed, and the responsibility for what it does is human.


What you get

  • Full API coverage in 36 tools — every one of the 79 API operations, with each list/get pair, profile create/update pair, on/off toggle and per-product read folded into one tool; 55 tools once billing and irreversible operations are enabled.

  • Every tool and argument described for the model that reads them: what it does and returns, when to prefer its neighbour and when not to, what it does that the annotations cannot say, where an id comes from. A test holds the whole surface to it, and a workflow runs the registries' own linter over it.

  • Three DNS workflow tools that make record edits safe, because saving a zone replaces it.

  • Guardrails so a deployment can refuse operations that spend money or destroy things.

  • Four prompts for the workflows worth naming, and two resources: the portfolio, browsable, and one that says what this deployment allows — including why a tool you expected is not in the list.

  • Two transportsstdio for a local client, streamable HTTP for a shared deployment.

  • Both protocol eras on one endpoint — speaks the 2026-07-28 revision natively and still serves 2025-era clients, which is most of them today.

  • OAuth 2.1 or a shared token on HTTP, with an audit line per call.

  • Queryable history — ask the server what has been done, and by whom.

  • 1Password Connect as an optional source for any secret it reads.

Related MCP server: Lookup-Domain

How it works

flowchart TD
    client(["MCP client"])

    client -->|stdio| registry
    client -->|streamable HTTP| origin

    subgraph http ["HTTP transport only"]
        origin["Origin check"] --> bearer["Bearer token<br/>OAuth 2.1 or shared secret"]
        bearer --> scopes["Scope gate"]
    end

    scopes --> registry["Tool registry"]
    registry --> guard{"Guardrails<br/>read-only, billing, destructive"}
    guard -->|refused| deny["Error naming the setting to change"]
    guard -->|allowed| api[("EuroDNS User API")]

    op[("1Password Connect")] -.->|"op:// refs, at startup"| creds["Credentials"]
    creds -.-> api

    registry -.-> log[("Audit log")]
    guard -.-> log
    log -.->|eurodns_audit_query| client

Two things are worth reading off that diagram. Authorisation has two independent gates — what the deployment permits at all, then what the caller's scopes permit within it. And the audit log is fed by every path, including refusals, because the upstream API authenticates every caller with one shared key and cannot attribute anything itself.

Requirements

  • Node.js 22 or newer. Node 20 reached end of life on 30 April 2026 and receives no security patches; the container image runs Node 24, the active LTS.

  • EuroDNS API credentials: an Application ID and an API key, created in the EuroDNS dashboard under API access.

  • The public IP of the machine running this server must be allowlisted in the same dashboard. A 403 from the API is almost always a missing allowlist entry, not bad credentials.

Quick start

For a client that spawns the server itself, such as Claude Desktop:

{
  "mcpServers": {
    "eurodns": {
      "command": "npx",
      "args": ["-y", "@jigsawfr/eurodns-mcp"],
      "env": {
        "EURODNS_APP_ID": "your-application-id",
        "EURODNS_API_KEY": "your-api-key"
      }
    }
  }
}

To try it in a terminal first:

npx -y @jigsawfr/eurodns-mcp

Without credentials it still starts, lists every tool, prompt and resource, and refuses each call with a message naming the two variables — so a marketplace, or npx @modelcontextprotocol/inspector, can show the surface before you have a key.

The package ships two commands: eurodns-mcp for stdio, which is the one above, and eurodns-mcp-http for the HTTP transport — reachable as npx -p @jigsawfr/eurodns-mcp eurodns-mcp-http.

For a shared deployment over HTTP, use the container instead — see Deployment.

Try not to put the API key in the client config file: Secrets shows two ways around it.

What you can ask it

Ask

Tool it reaches for

"What DNS records does example.com have?"

eurodns_dns_get_zone

"Add a TXT record _acme-challenge on example.com"

eurodns_dns_upsert_record

"What would change if I pointed www at 203.0.113.10?"

eurodns_dns_diff_zone

"Is example.lu available?"

eurodns_domain_check_availability

"Which of my domains have DNSSEC enabled?"

eurodns_domain_get

"When does this SSL certificate expire?"

eurodns_subscription_get

"What is my prepaid balance?"

eurodns_account_get_prepaid_balance

"What did I change last week?"

eurodns_audit_query

"What was refused, and why?"

eurodns_audit_query

Documentation

Page

What it covers

Tools

All 55 tools, the operations they fold, the prompts and the resources

Guardrails

Risk classes, what a deployment can forbid, confirmation before a call

Configuration

Every environment variable, with its default

HTTP transport

Serving several clients, static tokens, OAuth 2.1 and scopes

Secrets

Keeping the API key out of a client config, and 1Password Connect

Audit log

What is recorded, the hash chain, asking the server what happened

Entra ID

Step-by-step OAuth with Microsoft Entra ID, and its pitfalls

Deploying

Containers, Fly.io, Render, Railway, and shipping the log to a SIEM

Protocol

Which MCP revisions are spoken, and how both are served at one endpoint

Development

Building, testing, the generated tool surface, and how releases work

Deployment

cp .env.example .env    # credentials, plus a token: openssl rand -hex 32
docker compose up -d
curl localhost:3000/healthz

Published images live at ghcr.io/jigsawfr/eurodns-mcp, built for linux/amd64 and linux/arm64 with a build provenance attestation.

Two things decide where this runs, and neither is the usual latency-or-price argument:

  • The EuroDNS API filters by source IP, so the host has to give you a stable — ideally dedicated — egress address. An IP shared with other tenants keeps the mechanism and loses the protection.

  • The history query tool reads a file, so the host needs a persistent disk. That rules out platforms with an ephemeral filesystem.

On both counts Fly.io comes out ahead, at a couple of dollars a month for a dedicated IPv4 against roughly $100 elsewhere. deploy/ has the per-platform detail, ready-made fly.toml and render.yaml, and the comparison in full.

One setting catches everyone once: inside a container the server listens on 0.0.0.0, and it refuses to start on a non-loopback address without authentication. Set EURODNS_MCP_AUTH to token or oauth.

Which of those two

The choice is not about how secure you want to be — both are — but about whether callers need separate identities, and it has a cost you should see coming.

token is one shared secret in a header. It works in a minute, needs nothing but the server, and is the right answer for a deployment one person uses. What you give up is attribution: the audit log records a label, so it can tell you a destructive call happened but not who made it.

oauth gives each person their own credential, lets the five scopes decide who may do what, and puts a real identity in the audit log. The scopes decide what a caller may do; your identity provider decides who gets a token at all, and most default to everyone in the directory — so that setting is part of the configuration, not an afterthought. Its entry price is a hostname on a domain your identity provider will accept — with Microsoft Entra ID that means a domain verified in your tenant, because the server's public URL has to double as the Application ID URI. A platform hostname like *.fly.dev cannot be verified, so the domain is not optional there. Entra ID works the whole thing through, including the errors it produces when the three names involved fall out of step, and how to go one step further and give each person a different set of scopes rather than the same one.

Starting on token and moving to oauth later costs nothing but a restart: no data migration, no change to how tools behave.

Contributing

CONTRIBUTING.md has the workflow, and docs/development.md the commands. Pull request titles are checked against Conventional Commits, because that is what the changelog is generated from.

License

MIT.

"EuroDNS" is a trademark of EuroDNS S.A. and is not covered by that licence.

Available Tools

36 tools
eurodns_account_get_prepaid_balanceGet the prepaid account balanceA
Read-onlyIdempotent

Returns the account’s prepaid balance and its currency, the credit that orders and renewals are debited from. Read it before any tool described as debiting credit: an insufficient balance is the usual reason an order is refused, and the refusal does not say so. It takes no arguments and changes nothing; for what has already been billed use eurodns_invoice_get instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description reinforces this with 'changes nothing' and adds useful context about order refusal due to insufficient balance, which is not captured by the annotations. This extra context slightly exceeds the baseline given the already-complete annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences of appropriate length. The first sentence front-loads the core purpose, and the second adds essential usage guidance and an alternative reference. There is no unnecessary verbiage; every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless read-only operation, the description fully covers what the agent needs to know: what is returned (balance and currency), why it matters (before debiting operations), and how to handle billed amounts. No additional details are required for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameters, and the description explicitly confirms it 'takes no arguments'. While this is redundant with the schema, it provides clear confirmation to the agent, eliminating any ambiguity. Given the perfect schema coverage and the explicit statement, a score above baseline is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Returns') and the resource ('the account’s prepaid balance and its currency'). It also distinguishes this tool from sibling eurodns_invoice_get by explicitly noting that billed amounts are handled elsewhere, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives specific guidance on when to use the tool: 'Read it before any tool described as debiting credit' and explains the consequence of an insufficient balance ('an order is refused'). It also explicitly names an alternative (eurodns_invoice_get) for already-billed amounts, covering both when-to-use and when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_contact_get_profileGet a contact profile, or list themA
Read-onlyIdempotent

Returns one reusable contact profile — the registrant, admin, technical or billing identity attached to domains — by id, or lists the account’s profiles when id is omitted, filtered by type and by the roles isOrg, isAdmin, isTech and isBilling, paged. It reads the profile only, not the contacts a registered domain carries, which eurodns_domain_get returns. Read a profile before eurodns_contact_save_profile, which needs every field; eurodns_contact_set_as_default_profile chooses which one future orders use.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the contact profile to return in full. Omit it to list the account’s profiles, filtered by type and role.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
typeNoFilter on the contact type: PRIVATE_PERSON, COMPANY, ORGANISATION or PUBLIC_BODY.
isOrgNoKeep only profiles usable as the registrant (owner) contact.
isTechNoKeep only profiles usable as the technical contact.
isAdminNoKeep only profiles usable as the administrative contact.
isBillingNoKeep only profiles usable as the billing contact.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description reinforces this by stating it reads the profile only and never modifies data. No contradictions exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely informative, covering retrieval, listing, filtering, pagination, sorting, and relationships to sibling tools. It avoids filler while sacrificing some brevity for completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 optional parameters and an output schema, the description covers the main decision points: id vs list, filters, pagination, sorting, and relationship to domain contacts. It is complete enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions on every parameter, including pagination, filtering, and sorting semantics. The description adds extra practical notes like 'prefer a filter to a large size' and 'walk pages until a short one comes back', going slightly beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: return one contact profile by id or list the account's profiles when id is omitted. It also distinguishes itself from sibling tools like eurodns_domain_get and eurodns_contact_save_profile, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description and parameter docs give explicit usage guidance: omit id to list, walk pages until a short one returns, prefer filters to large sizes, and sortOrder is only read with sortField. It also tells the agent to read before saving, providing practical context for when to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_contact_resend_validation_emailResend contact validation emailA

Sends each contact named in body.contactsDetails a new email carrying its validation link, and returns the validation state of each. Use it when a registrant validation is pending or about to expire; do not use it as a check, since every call sends mail. The contacts are identified as eurodns_domain_get returns them on the domain.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYescontactsDetails: the contacts to send a validation link to, identified as eurodns_domain_get returns them on the domain.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly warns that every call sends mail, highlighting the side-effectful nature. It also states the return of validation state. No contradiction with annotations (readOnlyHint=false, idempotentHint=false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized: action, usage guidance, and identification note. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description covers the return value (validation state), usage conditions, and side effects. No missing critical information for an agent to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter body.contactsDetails is fully described as the list of contacts to send to, with the note that they are identified as returned by eurodns_domain_get. This gives both meaning and source context beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (sends email), the target (contacts in body.contactsDetails), the content (validation link), and the return (validation state). It distinguishes this tool from siblings by referencing eurodns_domain_get as the source for contact identification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance ('when a registrant validation is pending or about to expire') and when-not-to-use ('do not use it as a check, since every call sends mail'). This is directly actionable for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_contact_save_profileCreate or update a contact profileA

Creates a contact profile from body when id is omitted, or updates the profile with that id, and returns the saved profile. An update must carry every field, changed or not, because the API clears anything omitted: start from what eurodns_contact_get_profile returned rather than from the changed fields alone. Domains already registered keep their contacts; this changes what future orders use, and does not make the profile the default, which is eurodns_contact_set_as_default_profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the profile to update, from eurodns_contact_get_profile. Omit it to create a new profile.
bodyYesThe profile: contactType, profileName, the person or company name, postal address, countryCode, email and phone, and the isOrg, isAdmin, isTech and isBilling roles it may fill. When updating, send every field, changed or not: the API clears anything omitted.
langNoTwo-letter language code for the messages the API returns, e.g. en. Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses critical behaviors: the update clears omitted fields, the operation does not alter existing domain registrations, and it does not set the default profile. This goes well beyond the annotations and gives the agent a full picture of side effects, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a distinct job: the first states the action and return, the second the crucial update requirement, the third the side effects and distinction from the default-setter. No filler, and the most important operational detail (full-body update) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (nested body, create-vs-update, mutation), the description covers the essential decision points: how to create vs update, what to include in the body, what side effects to expect, and the alternative tool for setting defaults. The output schema handles return details, so nothing an agent needs 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and already documents id (omit to create), body (send every field), and lang. The description adds a useful tip to start from get_profile, but it largely repeats the schema's guidance. Since the schema carries the parameter meaning, the description adds marginal extra value, aligning with the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the dual action (create when id omitted, update when id provided) and names the resource (contact profile) and the return value. It also implicitly differentiates from siblings like eurodns_contact_get_profile (read) and eurodns_contact_set_as_default_profile (default setting), so an agent can pick it correctly without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs that updates must carry every field because the API clears omitted ones, and tells the agent to start from eurodns_contact_get_profile's output. It also clarifies when NOT to use this tool (making a profile the default) and that existing domains are unaffected, which routes the agent to the correct alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_contact_set_as_default_profileSet a contact profile as defaultA
Idempotent

Makes the contact profile with that id the default for the roles set true in body — org (registrant), admin, tech and billing — and returns the roles now applied. Future orders pick the default; domains already registered are not touched. Find the id with eurodns_contact_get_profile; to edit the profile’s own fields use eurodns_contact_save_profile instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNumeric id of the contact profile, from the list eurodns_contact_get_profile returns when called without an id.
bodyYesWhich contact roles this profile becomes the default for: org (registrant), admin, tech and billing, each true or false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, destructive, and idempotency hints. The description adds behavioral context by stating the scope: 'Future orders pick the default; domains already registered are not touched' and that it 'returns the roles now applied'. This clarifies the side-effect scope and return behavior beyond the annotation flags, though it does not detail error cases or authentication requirements, which are not critical here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each serving a purpose: the first states the core function, the second gives behavioral scope, and the third provides usage routing. No filler words; information is front-loaded and efficiently structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two parameters, a nested object, and an output schema, the description covers the action, role mapping, effect on future vs existing domains, return value, and how to find the id. It also distinguishes from related tools. Nothing an agent needs to correctly invoke it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both id and body are already described. The description adds value by explaining the role semantics ('org (registrant), admin, tech and billing') and by telling how to obtain the id via eurodns_contact_get_profile. This goes beyond the schema's basic descriptions, enriching the parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb 'Makes' and the resource 'contact profile', and clarifies the exact action: setting the profile as default for selected roles (org, admin, tech, billing). It differentiates from siblings by referencing get_profile and save_profile, so an agent can immediately know this tool is for default-role assignment, not profile editing or retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool: to set defaults for future orders. It also says what it does not affect (existing domains) and directs the agent to eurodns_contact_get_profile for finding the id and eurodns_contact_save_profile for editing profile fields instead. These clear alternatives and conditions leave no ambiguity about when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_check_zoneValidate a DNS zoneA
Read-only

Validates the candidate zone in body against the API’s rules for domainName and returns it with a per-record report of errors, without saving anything. Use it before eurodns_dns_save_zone, whose rejection is a bare 400. It does not preview what a change would alter, which is what eurodns_dns_diff_zone reports. The body must be the complete zone — records, urlForwards and mailForwards — with values in rdata.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe candidate zone to validate: records, urlForwards and mailForwards in the shape eurodns_dns_get_zone returns. Nothing is saved.
domainNameYesName of the zone, e.g. example.com: a domain whose DNS is hosted here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description reinforces this by saying 'without saving anything' and 'Nothing is saved.' It adds relevant behavioral context beyond the annotations, though it does not discuss auth or rate limits, which are not central here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the purpose, then immediately gives usage guidance and exclusions. Each sentence adds distinct value with no redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema is provided and the description gives enough context about the validation report and the relationship to sibling tools. Since the output schema exists, the description does not need to enumerate return fields, and it covers the necessary operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are described with meaningful context: domainName includes an example and hosting note, while body explains it must be the complete zone in the shape returned by eurodns_dns_get_zone. This goes well beyond the parameter names and provides clear semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Validates') and resource ('candidate zone'), and clearly distinguishes this tool from eurodns_dns_save_zone and eurodns_dns_diff_zone by stating what it does and does not do. This makes the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use this tool before eurodns_dns_save_zone because save returns a bare 400 on rejection, and clarifies that previews of changes are handled by eurodns_dns_diff_zone. It also states the required body shape, leaving no ambiguity about when and how to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_check_zone_profileValidate a DNS zone profileA
Read-only

Validates the candidate zone profile in body — name, records, urlForwards and mailForwards — and returns it with a per-record report, without saving. Use it before eurodns_dns_save_zone_profile, whose rejection is a bare 400. It checks a template, not a live zone: for a zone use eurodns_dns_check_zone instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe candidate profile to validate: name, records, urlForwards and mailForwards. Nothing is saved.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the 'without saving' claim is redundant. However, the description adds valuable context beyond annotations: it clarifies that this checks a template, not a live zone, and that it returns a per-record report. This enriches the agent's understanding of the tool's behavior without contradicting any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and outcome, then usage guidance and differentiation. Every clause earns its place with no fluff. The structure is clear and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's purpose (validation before save), the input schema is comprehensive, and an output schema is present, the description covers the essential context: what it does, what it doesn't do, and when to use it. Nothing an agent needs to correctly invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters already have detailed descriptions. The description mentions the main fields (name, records, urlForwards, mailForwards) but doesn't add anything about their formats or constraints beyond what the schema provides. Since coverage is high, the baseline of 3 is appropriate; the description adds marginal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Validates') and resource ('candidate zone profile in body') and enumerates the exact components checked (name, records, urlForwards, mailForwards). It clearly distinguishes from siblings by naming eurodns_dns_save_zone_profile and eurodns_dns_check_zone as alternatives, so an agent can tell them apart immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'before eurodns_dns_save_zone_profile' and explains why (its rejection is a bare 400). It also gives a clear exclusion: 'for a zone use eurodns_dns_check_zone instead.' This provides both positive and negative usage guidance with named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_delete_recordDelete a DNS recordA
DestructiveIdempotent

Deletes one DNS record from the zone domainName, either by its numeric recordId or by type and host, resolving the id from the live zone in the second case, and returns what was deleted. Give rdata as well when several records share a type and host: an ambiguous selection is refused rather than guessed, and so is a record the provider locked. Read the zone first with eurodns_dns_get_zone to see what it holds; to remove many records at once, save a complete zone with eurodns_dns_save_zone instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoNode the record applies to. Use "" or "@" for the apex. Required without recordId.
typeNoRecord type of the record to delete, e.g. A, CNAME, TXT. Required without recordId.
rdataNoExact current value, to disambiguate.
recordIdNoNumeric id of the record, from the records eurodns_dns_get_zone returns. When given, type and host are not needed.
domainNameYesZone to modify, e.g. example.com.

Output Schema

ParametersJSON Schema
NameRequiredDescription
zoneYes
deletedYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark the operation as destructive, open-world, and idempotent. The description goes beyond these by detailing the exact rejection behavior for ambiguous and locked records, and clarifying that recordId supersedes type and host. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, uses parallel structure, and packs essential usage details without redundancy. Each sentence adds distinct information: primary action, disambiguation rule, and guidance to consult sibling tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations (destructive, open-world, idempotent) and the schema (full parameter coverage), the description completes the picture by explaining failure modes and the recommended workflow. An agent has enough context to call this tool correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all five parameters with detailed descriptions, including requirements ('Required without recordId') and enums for type. The description reinforces the meaning of rdata as an exact current value and clarifies the apex representation, adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool deletes a DNS record from a zone, specifies the two identification methods (recordId or type+host), and names the sibling tools for reading and bulk updates. It fully distinguishes this from eurodns_dns_get_zone and eurodns_dns_save_zone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises reading the zone first with eurodns_dns_get_zone, explains when rdata is needed for disambiguation, and contrasts with mass removal via eurodns_dns_save_zone. It also explains rejection of ambiguous or locked records, giving clear usage conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_delete_zone_profileDelete a DNS zone profileA
DestructiveIdempotent

Deletes the zone profile with that id permanently and returns nothing on success. A profile is a template for new zones, so zones already created from it keep their records; there is no snapshot to restore a template from, so confirm the id and contents with eurodns_dns_get_zone_profile first. To change a profile rather than remove it, use eurodns_dns_save_zone_profile instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNumeric id of the zone profile, from the list eurodns_dns_get_zone_profile returns when called without an id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint, idempotentHint), the description adds important behavioral context: deletion is permanent, there is no snapshot to restore from, already-created zones keep their records, and it recommends a pre-check with the get tool. These details substantially inform the agent about side effects and risks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, tightly packed with purpose, consequences, and guidance. No redundant phrasing or unnecessary details; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with a single parameter and no output schema, the description covers all essential context: what is deleted, what happens to dependent zones, the permanence, the recommended pre-check, and the alternative tool. This is sufficient for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully describes the single parameter 'id' with type and provenance (from the list returned by eurodns_dns_get_zone_profile). The tool description does not add further parameter-specific meaning, so the score rests at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states that the tool deletes a zone profile permanently and returns nothing on success, clearly identifying the action and result. It also distinguishes from related tools by naming eurodns_dns_save_zone_profile as the alternative for changes, so an agent can easily tell what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use this tool versus alternatives: it recommends confirming the id and contents with eurodns_dns_get_zone_profile first, and instructs to use eurodns_dns_save_zone_profile for modifications instead of deletion. This makes the appropriate usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_diff_zoneCompare a proposed record set against the live zoneA
Read-onlyIdempotent

Reports what would change if records were applied to the zone domainName — added, updated with old and new values, and unchanged — without writing anything. Use it to review a change before making it with eurodns_dns_upsert_record; it compares by type, host and rdata, so a record with a new value shows as updated rather than added. It is not the API’s validator: for a per-record validity report on a full zone document use eurodns_dns_check_zone instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordsYesRecords the caller intends to end up with.
domainNameYesZone to compare against, e.g. example.com.

Output Schema

ParametersJSON Schema
NameRequiredDescription
zoneYes
addedYes
updatedYes
unchangedYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reinforces the readOnlyHint annotation by stating 'without writing anything' and details what the output includes (added, updated, unchanged). While it doesn't explicitly address the openWorldHint or idempotentHint, the behavior is clear enough and consistent with the annotations. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of two sentences that pack all essential information without any redundant phrases. It front-loads the core purpose and then distinguishes from the validator tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two parameters, no nested objects) and the presence of output schema information (though not shown), the description sufficiently covers what an agent needs to know: it performs a diff, is read-only, and is intended as a dry-run before upsert. The only minor gap is the lack of explicit detail on return format, but the description's mention of 'added, updated, and unchanged' adequately communicates the output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description adds clarity to both parameters: domainName is 'Zone to compare against, e.g. example.com' and records are 'Records the caller intends to end up with.' The phrase 'intends to end up with' clarifies the diff semantics beyond the raw schema, earning a score above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function as a read-only diff: 'Reports what would change if records were applied to the zone domainName — added, updated with old and new values, and unchanged — without writing anything.' It distinguishes itself from sibling tools like eurodns_dns_get_zone (retrieve), eurodns_dns_save_zone (write), and eurodns_dns_upsert_record (modify) by emphasizing it does not write.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly advises when to use it: 'Use it to review a change before making it with eurodns_dns_upsert_record,' and when not to: 'It is not the API’s validator: for a per-record validity report on a full zone document use eurodns_dns_check_zone instead.' This provides clear guidance for an agent choosing between similar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_get_dnssec_statusGet the DNSSEC status of a zoneA
Read-onlyIdempotent

Returns whether the zone of domainName is DNSSEC-signed, with its keys and the DS data a registry needs to publish. Read it before and after eurodns_domain_set_dnssec, and again after moving nameservers, to confirm the zone and the registry agree. It reports the zone hosted here only: what the registry actually publishes is not read, so a domain registered elsewhere needs its registrar checked separately rather than trusted from this answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNameYesName of the zone, e.g. example.com: a domain whose DNS is hosted here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe, non-mutating operation. The description adds value by clarifying the tool reports only the hosted zone's DNSSEC state, not the registry's publication, and frames its use for verification. It does not contradict annotations and adds contextual nuance beyond 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, leading with the core function, then usage guidance, then a caveat about scope. Each sentence contributes value without redundancy. It is slightly longer than the bare minimum but every clause earns its place, so it is appropriately sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter, a clear output schema, and annotations that establish its read-only and idempotent nature, the description is fully adequate. It covers purpose, usage timing, and a key limitation (registry scope). An agent has everything needed to invoke it correctly and interpret results without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter, domainName, is fully described in the schema ('Name of the zone, e.g. example.com: a domain whose DNS is hosted here.'). With 100% schema description coverage, the baseline is 3. The description only restates that it operates on the zone of domainName, adding no substantive new semantics beyond the schema. It meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns whether a zone is DNSSEC-signed, along with keys and DS data, using a specific verb ('returns') and resource (DNSSEC status of a zone). It explicitly distinguishes itself from siblings like eurodns_domain_set_dnssec (which sets DNSSEC) and eurodns_dns_get_zone (general zone retrieval) by focusing on DNSSEC status and verification. The scope limitation (only reports hosted zone, not registry) further differentiates it from a generic registry check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use it: 'Read it before and after eurodns_domain_set_dnssec, and again after moving nameservers, to confirm the zone and the registry agree.' It also specifies a when-not scenario: for domains registered elsewhere, it advises checking the registrar separately rather than trusting this tool. This clearly routes the agent to the correct usage and alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_get_zoneGet a DNS zoneA
Read-onlyIdempotent

Returns the live zone of domainName in full: every DNS record with its id, type, host, rdata and ttl, plus the URL forwards and mail forwards. Read it before any change, and to find the recordId that eurodns_dns_delete_record takes. To change one record use eurodns_dns_upsert_record rather than editing this document and saving it back with eurodns_dns_save_zone, which replaces the whole zone. A domain whose DNS is not hosted here answers 404.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNameYesName of the zone, e.g. example.com: a domain whose DNS is hosted here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly and idempotent annotations, the description discloses that the zone is 'live' (not a snapshot), specifies the 404 error condition, and lists exactly what data is returned, adding behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative without being bloated. It front-loads the core purpose, then provides actionable usage guidance and contrasts with related tools, all in a well-organized structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get operation, the description covers the purpose, expected inputs, error cases, and relationship to sibling tools. It also enumerates the returned data fields, making it self-contained for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the single parameter with 100% coverage, and the description enhances it with an example and clarifies that the domain must be hosted by this service. This adds semantic value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states that the tool returns the full live DNS zone for a domain, listing record fields and additional data like URL and mail forwards. This distinguishes it from other operations like save or upsert.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises reading the zone before any change, for finding record IDs for deletion, and contrasts with upsert for single-record changes and save_zone for full-zone replacement. Also notes the 404 case for unhosted domains.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_get_zone_profileGet a zone profile, or list themA
Read-onlyIdempotent

Returns one zone profile in full — name, records, URL forwards and mail forwards — by id, or lists the account’s profiles, filtered by name and paged, when id is omitted. Profiles are templates for new zones, not live zones: for the records a domain actually serves use eurodns_dns_get_zone instead. Read a profile before eurodns_dns_save_zone_profile, which replaces the whole profile with what you send; an id that does not exist answers 404.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the profile to return in full. Omit it to list the account’s zone profiles, optionally filtered by name.
nameNoFilter on the profile name. Omit to list every profile.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses meaningful behaviors beyond the annotations, such as the 404 response for a nonexistent id, pagination walk behavior, and the truncation risk with wide pages. Combined with the readOnly, idempotent, and non-destructive annotations, the agent can fully predict side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized, packing purpose, variants, usage guidance, and edge-case behavior into a compact form. Every sentence adds practical value without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity of a paginated fetch-or-list tool, the description covers all essential context: resource semantics, live-zone alternative, save-profile prerequisite, pagination behavior, sort constraints, and error behavior. Nothing important is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all parameters with high-quality descriptions, so the baseline is strong. The description adds useful caveats beyond the schema, such as sortOrder only being read with sortField, and the recommendation to prefer filters over large page sizes due to character-limit truncation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's dual purpose: return one zone profile by id, or list the account's profiles filtered by name and paged when id is omitted. It also specifies the resource type (zone profiles) and distinguishes them from live zones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says profiles are templates, not live zones, and directs users to eurodns_dns_get_zone for live zone records. It also advises reading a profile before calling eurodns_dns_save_zone_profile, giving clear when-to-use guidance relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_get_zone_snapshotGet a zone snapshot, or list themA
Read-onlyIdempotent

Returns one earlier state of the zone domainName by snapshot id — its records as they were — or lists the zone’s snapshots with their ids and dates when id is omitted. Use it to see what a zone held before an unintended change; it reads only and restores nothing. To put a state back, send its records through eurodns_dns_save_zone, or one record at a time through eurodns_dns_upsert_record rather than replacing the zone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the snapshot to return. Omit it to list the snapshots of the zone, with their ids and dates.
domainNameYesName of the zone, e.g. example.com: a domain whose DNS is hosted here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, but the description adds nuance: it clarifies that omitting id lists snapshots, and it warns against replacing the zone, enriching behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and avoids redundancy. It efficiently packs purpose and usage guidance without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simple two-parameter interface and the presence of an output schema, the description covers all necessary behavioral aspects, including the optional id behavior and relationship to other DNS operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions fully cover both parameters (domainName and id) with adequate detail. The tool description repeats similar information without adding new meaning, so it adds little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a snapshot or lists snapshots for a zone, with the verb 'Returns' and 'lists'. It distinguishes from siblings by emphasizing read-only behavior and contrasts with restore operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs to use this tool for viewing historical zone states and points to save_zone or upsert_record for restoring, providing clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_save_zoneSave a DNS zoneA
Idempotent

Replaces the entire zone of domainName with body and returns the saved zone. Every record, URL forward and mail forward absent from body is deleted, so it is only safe with a complete document just read from eurodns_dns_get_zone; to change one record use eurodns_dns_upsert_record instead, which validates and keeps the rest. Run eurodns_dns_check_zone first: a rejected save answers a generic 400, while the check names the offending record. Record values go in rdata, never in data.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe complete zone as returned by eurodns_dns_get_zone, with your changes applied: records, urlForwards and mailForwards. Anything left out is deleted; record values go in rdata.
domainNameYesName of the zone, e.g. example.com: a domain whose DNS is hosted here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description contradicts the annotation destructiveHint=false by stating 'Every record, URL forward and mail forward absent from body is deleted.' This is a destructive side effect that the annotation denies, so the description conflicts with the provided metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense yet efficient paragraph. It front-loads the primary purpose, then each subsequent sentence adds crucial guidance (deletion behavior, alternative tool, validation workflow, rdata convention) without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex nested body schema, the description supplies all necessary context: how to obtain the complete zone (get_zone), what happens to omitted records, when to use upsert_record instead, the benefit of running check_zone first, and the rdata field convention. The output schema is also present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The body parameter description adds critical meaning beyond the schema: 'The complete zone as returned by eurodns_dns_get_zone, with your changes applied: records, urlForwards and mailForwards. Anything left out is deleted; record values go in rdata.' This clarifies the expected payload and deletion semantics. The domainName description provides a concrete example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Replaces the entire zone of domainName with body and returns the saved zone.' It also distinguishes from siblings by referencing eurodns_dns_upsert_record and eurodns_dns_get_zone, making the tool's role clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'to change one record use eurodns_dns_upsert_record instead, which validates and keeps the rest' and 'Run eurodns_dns_check_zone first: a rejected save answers a generic 400, while the check names the offending record.' This clearly contrasts with related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_save_zone_profileCreate or replace a zone profileA

Creates a zone profile from body when id is omitted, or replaces the profile with that id in its entirety, and returns the saved profile. On a replace every record absent from body is dropped, so start from what eurodns_dns_get_zone_profile returned rather than from a partial document. Validate a candidate first with eurodns_dns_check_zone_profile, whose report names the offending record where a rejected save only answers 400. Record values go in rdata.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the profile to replace, from eurodns_dns_get_zone_profile. Omit it to create a new profile.
bodyYesThe profile: a name plus the records, urlForwards and mailForwards the template applies. When replacing, send the complete profile as eurodns_dns_get_zone_profile returned it — anything left out is dropped. Record values go in rdata.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A3.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states that on replace, every record absent from body is dropped, which is a destructive action. However, the annotation destructiveHint is false, contradicting this. The description does not explicitly say it is destructive, but the effect is destructive, and the annotation suggests otherwise. This is a clear contradiction, so the score is 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, compact and front-loaded. It immediately states the create/replace distinction, then covers the critical replace behavior, validation advice, and error nuance. No filler or redundant repetition; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the operation (nested objects, replace semantics) and that an output schema exists, the description covers the critical pitfalls: how to safely replace, how to validate, and the error response behavior. It also names the sibling tools to use. Nothing an agent needs 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions for id and body are already detailed (100% coverage). id explains it comes from get_zone_profile and that omitting creates a new profile; body describes the profile structure and the destructive replace behavior. The tool description adds the note about rdata, but this is also in the schema. The description adds little beyond the schema, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a zone profile when id is omitted and replaces the profile with that id otherwise, and returns the saved profile. It explicitly distinguishes from get (read) and check (validate) via sibling references, so the agent can easily tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit guidance: start from the full profile returned by eurodns_dns_get_zone_profile when replacing, because absent records are dropped. It also advises validating with eurodns_dns_check_zone_profile to get precise error names, since a rejected save only returns 400. This tells the agent exactly when to use this tool and when to use alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_dns_upsert_recordCreate or update a DNS recordA
Idempotent

Adds one DNS record to the zone domainName, or updates the existing record with the same type and host, and returns the record as saved with the action taken. It reads the zone, applies the change, runs the API’s validator and saves only if validation passes; a rejected change returns the validation report and writes nothing. Prefer it over eurodns_dns_save_zone, which replaces the whole zone. Give matchRdata to pick one of several records sharing a host, or append: true to add a further record under an existing type and host rather than updating it; the value goes in rdata.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoRecord TTL in seconds. Allowed values: 600, 900, 1800, 3600, 7200, 14400, 21600, 43200, 86400, 172800, 432000, 604800.
hostYesNode the record applies to. Use "" or "@" for the apex.
typeYesRecord type, e.g. A, AAAA, CNAME, MX, TXT.
rdataYesRecord value. The API field is "rdata", not "data".
appendNotrue adds the record even when one with the same type and host exists, instead of updating it: a second TXT under one host, or a further MX. Default false.
domainNameYesZone to modify, e.g. example.com.
matchRdataNoUpdate only the record whose current value matches this. Use when several records share a type and host, such as multiple TXT entries.

Output Schema

ParametersJSON Schema
NameRequiredDescription
zoneYes
actionYes
recordYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given the annotations (readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true), the description goes beyond the annotations by explaining that the tool reads the zone, applies the change, validates, and only writes if validation passes. It also states that a rejected change writes nothing, which is a key behavioral detail not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet comprehensive—four sentences covering purpose, alternative guidance, special-case parameters, and validation behavior. Every sentence adds value, and the structure front-loads the primary action before discussing edge cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (7 parameters, 4 required, enums, and both append and matchRdata special cases), the description provides all necessary context: what the tool does, how it differs from siblings, when to use advanced parameters, and the validation/write behavior. The presence of an output schema covers return format, and the description fills the remaining gaps for successful invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already has 100% parameter description coverage, and the tool description adds extra meaning beyond the schema, such as clarifying that the API field is 'rdata' not 'data', explaining when to use matchRdata for multiple records sharing a type and host, and specifying the behavior of append. This significantly aids in correct parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds or updates a single DNS record and returns the saved record with the action taken. It distinguishes itself from the sibling tool save_zone by explicitly noting it replaces the whole zone, and from delete_record by implying record-level modification. The verb and resource are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Prefer it over eurodns_dns_save_zone, which replaces the whole zone', giving direct guidance on when to use this tool instead of an alternative. It also explains when to use append (add a second record with same type/host) and matchRdata (update a specific record among several) which are conditional usage instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_domain_check_availabilityCheck domain availabilityA
Read-only

Checks whether the domain names listed in body.domainNames can be registered and returns the availability of each, as the registries answer it. Use it for names you do not hold, whoever holds them; for a domain already in this account use eurodns_domain_get instead, which returns the full record. It reads only and reserves nothing, and a name marked available still has to be ordered elsewhere: this server does not register domains.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesdomainNames: the fully qualified names to check, e.g. ["example.com", "example.lu"].

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description adds that the call reads only and reserves nothing, that results reflect how registries answer, and that availability here does not imply ordering capability. These are meaningful behavioral disclosures not present in the readOnlyHint/openWorldHint/destructiveHint annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences deliver the core action, the alternative tool condition, and the key limitation, all without redundancy. The primary behavior is front-loaded, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 the read-only/open-world safety profile, the description supplies the remaining decision-relevant context: what to check, when to use it, when not to, and what an available result means. Nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already describes body.domainNames as fully qualified names with an example. The description references the same parameter without adding extra syntax or constraints, so the schema carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it checks whether domain names in body.domainNames can be registered and returns per-name availability. It also distinguishes itself from eurodns_domain_get, so an agent can tell this availability-check tool apart from the full-record lookup tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use it for names not held in the account and directs the agent to eurodns_domain_get instead for domains already in the account. It also clarifies that this server does not register domains, so an available name must be ordered elsewhere, leaving no ambiguity about when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_domain_getGet a domain, or search the account’s domainsA
Read-onlyIdempotent

Returns one domain already registered in this account — status, expiry, renewal method, contacts and nameservers — when domainName is given, or searches the account’s domains and returns one summary per match when it is omitted. It only knows domains held here: an unknown name answers 404 rather than an availability, so for a name you might register use eurodns_domain_check_availability instead. The search reads body for its filters and page and size for paging; a search without criteria lists the whole portfolio, which is the way to find a name you do not hold exactly.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoSearch criteria, read only when domainName is omitted: a free-text term with its termMatchingMode and termMatchFields, plus boolean filters such as active, renewable, dnssecActivated or premiumDns. Omitted or empty, every domain is listed.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.
domainNameNoFully qualified name of a domain held in this account, e.g. example.com, to return in full. Omit it to search the account’s domains with body and the pagination arguments.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only and idempotent, so the safety profile is covered. The description adds genuinely useful behavior beyond that: unknown names return 404 rather than availability, omitting domainName switches from exact get to search, and a search without filters returns the entire portfolio. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the primary behavior, then the alternative tool, then search and paging behavior. Every sentence carries operational value with no filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and safety annotations already present, the description covers everything an agent needs: exact get mode, search mode, filter and paging references, no-criteria behavior, and the 404 case. It does not need to explain return values because the output schema supplies that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the detailed parameter descriptions already carry the main semantic load. The description does clarify that domainName selects exact-get mode while body, page, and size drive search mode, but that grouping is already stated in the schema, so it adds no substantial new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it returns one registered account domain with status, expiry, renewal method, contacts, and nameservers when domainName is given, or searches the account's domains when it is omitted. It also explicitly distinguishes itself from eurodns_domain_check_availability, which prevents an agent from confusing lookup of held domains with availability checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit when-to-use route: if a name might not be held yet, use eurodns_domain_check_availability instead, because this tool answers 404 for unknown names. It also explains that a search without criteria lists the whole portfolio, which is the intended way to find a name you do not know exactly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_domain_set_dnssecEnable or disable DNSSEC, at the registry or on the zoneA

Enables (enabled: true) or disables (enabled: false) DNSSEC for a domain and returns nothing on success. Use scope registry for a domain registered in this account: it signs the hosted zone and publishes the DS records at the registry in one step. Use scope zone only for a domain registered elsewhere whose DNS is hosted here, then publish the DS data at that registrar yourself. Disabling one side while the other stays signed breaks validation until caches expire, so read eurodns_dns_get_dnssec_status before and after; the call does not check that state for you.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeYesregistry publishes or withdraws the DS records of a domain registered here; zone starts or stops signing a zone hosted here, for a domain registered elsewhere.
enabledYestrue to enable DNSSEC in that scope, false to disable it.
domainNameYesFully qualified domain name, e.g. example.com, as listed by eurodns_domain_get when called without a domainName.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses side effects: signing the zone, publishing DS records, and the risk of breaking validation if only one side is disabled. It also states that the call returns nothing, complementing annotations that indicate this is a non-read-only, non-idempotent, non-destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense without being verbose. It packs scope distinction, prerequisites, side effects, and a warning into a few sentences, each earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully explains the operation, when to use each scope, what changes occur, what to check before and after, and the return behavior. This is complete for an agent to decide when and how to call it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all parameters at 100%, and the description adds meaningful context for each: scope clarifies registry vs. zone behavior, enabled clarifies true/false meaning, and domainName specifies fully qualified format and how to find the value via eurodns_domain_get.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool enables or disables DNSSEC for a domain in one of two scopes, with a specific verb and resource. It distinguishes itself from sibling tools by focusing on setting DNSSEC state rather than checking or managing DNS zones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly explains when to use registry scope versus zone scope, including the prerequisite of the domain being registered elsewhere for zone scope. It also advises checking eurodns_dns_get_dnssec_status before and after, which is directly relevant sibling tool usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_email_set_aliasAdd or remove a mailbox aliasA
Destructive

Adds (action: add) or removes (action: remove) the address in alias, which delivers into the mailbox of the email subscription id, and returns the updated subscription. Use it for one named extra address; to accept every unknown address at the domain use eurodns_email_set_catchall instead. Removing an alias bounces mail sent to it from then on. The subscription id comes from eurodns_subscription_get for product email.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNumeric id of the email subscription, from eurodns_subscription_get with product email and no id.
aliasYesThe alias address for the mailbox, e.g. sales@example.com.
actionYesadd creates the alias; remove deletes it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although the annotations already indicate destructive and non-idempotent behavior, the description adds specific context that removing an alias causes mail sent to it to bounce. This extra detail helps the agent understand the real-world consequence of the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured—two sentences cover the core action, return value, usage context, and alternative. Parameter descriptions are compact and informative without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the full input schema, output schema presence, and sibling context, the description provides all necessary information for an agent to call the tool correctly. No critical details are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are documented with meaningful descriptions: id explains its origin from subscription_get, alias includes an example format, and action explicitly maps 'add' and 'remove' to create/delete behavior. The schema coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds or removes an alias address for a mailbox and returns the updated subscription. It also explicitly differentiates from the catchall sibling by noting its use case for one named extra address.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (for one named extra address) and when to use the alternative (eurodns_email_set_catchall for every unknown address). This gives the agent clear selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_email_set_catchallEnable or disable the catch-all of a mailboxA
DestructiveIdempotent

Turns the catch-all on (enabled: true) or off (enabled: false) for the email subscription id and returns the updated subscription. On, every address at the domain without a mailbox or alias of its own is delivered here, which brings more unsolicited mail; off, such mail is refused. For one named address use eurodns_email_set_alias instead. The subscription id comes from eurodns_subscription_get for product email.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNumeric id of the email subscription, from eurodns_subscription_get with product email and no id.
enabledYestrue to deliver every unknown address at the domain here, false to stop.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag readOnlyHint=false, idempotentHint=true, and destructiveHint=true; the description adds meaningful behavioral context by explaining that enabling routes addresses without a mailbox/alias to this subscription and may attract unsolicited mail, while disabling refuses such mail. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the primary action and return value, followed by behavioral effect, alternative, and id source. Slightly wordy and awkward in the middle sentence, but no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Together with the complete input schema and output schema, the description gives enough context to select and call the tool correctly: action, routing behavior, alternative tool, and source of the id. It does not need to explain return shape because output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents id as the numeric email subscription id from eurodns_subscription_get and enabled as true/false behavior. The description mostly restates these semantics rather than adding new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (turns catch-all on/off) on a specific resource (email subscription id), describes the returned updated subscription, and distinguishes itself from the sibling eurodns_email_set_alias by naming the alternative for named addresses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use context for enabling/disabling the catch-all and an explicit exclusion: use eurodns_email_set_alias for a single named address. It also tells the caller where the subscription id comes from via eurodns_subscription_get.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_email_update_passwordUpdate a mailbox passwordA
Idempotent

Sets a new password on the mailbox of the email subscription with that id, from body.password and body.passwordConfirmation, and returns the updated subscription. The value is written straight through to the provider and is neither stored nor logged here. Find the id with eurodns_subscription_get for product email; to change addresses rather than the password use eurodns_email_set_alias instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNumeric id of the email subscription, from eurodns_subscription_get with product email and no id.
bodyYespassword and passwordConfirmation, identical. The value is sent to the provider and never stored or logged here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations by noting the value is written straight through to the provider and is never stored or logged. This adds meaningful context about data handling. The annotations already cover readOnly/destructive/idempotent hints, so the extra detail is a bonus.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense, consisting of two sentences that cover purpose, usage, and key caveats. No unnecessary words or redundant details are present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity, the description covers all necessary aspects: how to retrieve the identifier, what the body should contain, the behavior (write-through, no logging), and the result (returns updated subscription). The output schema is available, and the description mentions the returned object adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes both parameters, and the description enriches it by explaining that password and passwordConfirmation must be identical and that the value is sent to the provider without being stored or logged. This gives the agent more information than the raw schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sets a new password on the mailbox of the email subscription, using body.password and body.passwordConfirmation. It distinguishes itself from sibling tools like eurodns_email_set_alias and eurodns_email_set_catchall by focusing on password updates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly explains when to use the tool (to change an email subscription password) and provides guidance on finding the id via eurodns_subscription_get. It also names the alternative for changing addresses (eurodns_email_set_alias), giving clear context for choosing among similar operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_invoice_getGet an invoice, or search themA
Read-onlyIdempotent

Returns one invoice with its lines by id, or searches invoices when id is omitted — by createdAfter and createdBefore, invoiceType, invoiceStatuses, orderIds or the invoice profile cipId — paged with page and size. Use it for what was billed and whether it is paid; the filters are ignored when id is given. The order behind a line is in eurodns_order_get and the billing identity in eurodns_invoice_profile_get, not here.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the invoice to return with its lines. Omit it to search invoices with the filters below.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
cipIdNoNumeric id of the customer invoice profile, from the list eurodns_invoice_profile_get returns when called without an id.
orderIdsNoThe identifier of orders related to the invoices.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.
invoiceIdsNoThe list of unique invoice identifiers.
invoiceTypeNoKeep only invoices of this type: INVOICE, CREDIT_NOTE, CORRECTIVE_INVOICE or EDITED_INVOICE.
createdAfterNoThe invoice creation date start range.
createdBeforeNoThe invoice creation date end range.
invoiceNumbersNoThe list of invoice numbers.
invoiceStatusesNoKeep only invoices in these statuses, e.g. TO_PAY, PAID or CANCELLED.
relatedInvoiceIdNoThe related invoice identifier. Edited invoices, credit notes and corrective invoices are created based on this invoice.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the key behavioral nuance that filters are ignored when id is given and that results are paged. It doesn't contradict annotations, and the output schema covers return details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero filler. The main action is front-loaded, followed by the search filters, then a usage note, and finally pointers to siblings. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex dual-mode tool with 14 parameters, the description clearly explains both modes, pagination, and explicitly routes related data to other tools. With an output schema present, an agent has everything needed to decide when and how to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds the context that filters apply only when id is omitted, which is also implied by the schema's id description. It doesn't significantly enhance parameter understanding beyond what the schema provides, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Returns one invoice with its lines by id, or searches invoices when id is omitted'. It distinguishes itself from siblings by explicitly pointing to eurodns_order_get and eurodns_invoice_profile_get for related data, so an agent can tell it apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('Use it for what was billed and whether it is paid') and what it is not for (order behind a line and billing identity are in other tools). It also clarifies that filters are ignored when id is given, guiding the agent on parameter usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_invoice_profile_getGet an invoice profile, or search themA
Read-onlyIdempotent

Returns one customer invoice profile — the billing name, address and VAT details invoices are issued to — by id, or searches the account’s profiles when id is omitted, by profileName, companyName, countryCode, active and defaultProfile, paged. Use it to find the id a profile is billed under, then pass that id as cipId to eurodns_invoice_get to list its invoices; the invoices themselves are not here. The termMatchingMode argument says how the text filters compare, EQUALS or CONTAINS for instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the invoice profile to return in full. Omit it to search the account’s profiles with the filters below.
cityNoThe invoice profile city.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
emailNoThe invoice profile email address.
activeNoThe invoice profile active status. Inactive invoice profiles are not selectable by users when placing orders and should only be used for keeping track of past invoices.
lastNameNoThe invoice profile last name.
firstNameNoThe invoice profile first name.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.
companyNameNoThe invoice profile company name.
countryCodeNoThe invoice profile country code.
profileNameNoThe display name of the invoice profile.
defaultProfileNoThe invoice profile default status.
termMatchingModeNoThe match mode to apply on the given `profile-name`, `first-name`, `last-name`, `company-name`, `city` or `email` field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with the readOnlyHint, openWorldHint, and idempotentHint annotations, and clearly bounds the operation to returning or searching profiles. It adds helpful context about inactive profiles and chaining to invoice_get, though it does not describe error behavior or edge cases for invalid ids, which are covered only partially by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense, with no obvious filler. It is somewhat run-on with multiple clauses, but every clause adds relevant context about the tool's purpose, usage, and filtering behavior, so it remains effective and focused.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 15 optional parameters and existing output schema, the description provides sufficient orientation: it covers the main read/search modes, pagination guidance, the key filter fields, and the integration with eurodns_invoice_get. It does not elaborate on sorting or every filter field, but the rich schema descriptions fill those gaps, making the overall context adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides full descriptions for all 15 parameters, so the baseline is high. The description adds semantic value by explaining the id-versus-filter mode, the meaning of termMatchingMode, and the relationship between profile id and invoice retrieval, which helps clarify the most important parameters beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns one invoice profile by id or searches account profiles with filters and pagination. It distinguishes itself from related tools by explicitly pointing to eurodns_invoice_get for retrieving invoices and noting that invoices themselves are not returned here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool: to fetch a single profile by id or search profiles by fields, and then pass the id to eurodns_invoice_get. It also gives negative guidance ('the invoices themselves are not here') and clarifies that filtering is preferred over large page sizes via schema descriptions, making the usage path clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_nameserver_get_profileGet a nameserver profile, or list themA
Read-onlyIdempotent

Returns one reusable nameserver set by id, or lists the account’s nameserver profiles when id is omitted, with the default one and the deletable ones marked and, with includeNameservers, each profile’s servers. Use it to find the profile a domain should point at, or the id eurodns_nameserver_save_profile takes; it does not say which profile a given domain uses, which eurodns_domain_get returns. Filter with default or deletable rather than paging the whole list.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the nameserver profile to return. Omit it to list the account’s profiles with the filters below.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
defaultNotrue keeps only the default profile, false keeps every other one. Omit for both.
deletableNotrue keeps only profiles no domain uses, which are the ones that can be deleted.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.
includeNameserversNoInclude each profile's nameserver list in the response, not just its name and id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description supplements the readOnlyHint annotation by explaining pagination behavior ('walk pages until a short one comes back') and the truncation effect of wide pages. It does not contradict the annotations, which already cover read-only and idempotent semantics. It adds useful detail about response shape without repeating the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loads the core purpose before adding usage and filtering guidance. It is somewhat talkative with commas and parentheticals but remains scannable and every clause carries meaning. It earns a high score for being compact while dense with decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 optional parameters and no required ones, the description covers the core decision points: when to use this versus the save counterpart, how to filter, and how pagination behaves. There is an output schema, so return value details do not need to be in the description. The description adequately guides an agent through the main usage scenarios without needing to enumerate every parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 only marginal value beyond the schema: it explains the task-level intent (find the profile a domain points at) but does not clarify parameter interactions beyond what the schema already states. The parameter descriptions themselves are already thorough, so the description does not need to add much.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource: reusable nameserver sets/profiles. It distinguishes the singular (get by id) from the plural (list all) behavior, and explicitly names the sibling tool eurodns_nameserver_save_profile as the counterpart. The verb 'Returns' and the resource 'nameserver profiles' are both precise and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives direct usage guidance: use it to find the profile a domain should point at, or the id that save_profile takes. It also explicitly notes what this tool does NOT tell you (which profile a domain uses, directing to eurodns_domain_get), which is especially valuable for disambiguation. It additionally recommends filters over paging.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_nameserver_save_profileCreate or update a nameserver profileA

Creates a nameserver profile from body when id is omitted, or updates the profile with that id, and returns the saved profile. An update must carry every field and every nameserver you keep, because the API clears anything omitted: start from eurodns_nameserver_get_profile rather than from the changed servers alone. Changing a profile changes the delegation of every domain pointing at it, so read it first instead of guessing what it holds.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the profile to update, from eurodns_nameserver_get_profile. Omit it to create a new profile.
bodyYesThe profile: a name and its nameservers, each with an fqdn and, for glue records, ipV4Address and ipV6Address. When updating, send every field and every nameserver you keep: the API clears anything omitted.
langNoTwo-letter language code for the messages the API returns, e.g. en. Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A3.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description warns that the API clears any omitted nameservers and that changing a profile affects delegation for all domain pointing at it. This is destructive behavior, but the annotations declare destructiveHint: false, creating a direct contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well structured: purpose first, then critical update behavior, then side-effect warning. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the nested nameserver structure and create/update semantics, the description covers what the tool does, how to construct an update, and an important side effect. It also states the return value is the saved profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains the body shape, nameservers with fqdn and glue-record IPs, and the update-clearing behavior. It does not explain canDelete or defaultProfile, but overall adds meaningful parameter semantics beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates or updates a nameserver profile and returns the saved profile. It names the resource and the create/update behavior, making it easy to distinguish from related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete guidance for updates: start from eurodns_nameserver_get_profile and send every field you keep. It does not explicitly enumerate alternatives for creation, but the create/update distinction is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_order_getGet an order, or search themA
Read-onlyIdempotent

Returns one order with its lines and their delivery status by id, or searches orders when id is omitted — by statuses, startDate and endDate, a free-text term, or deliveryInProgress — paged with page and size. Use it to learn what happened to a subscription that was ordered but never became active; the filters are ignored when id is given. The invoice raised for an order is in eurodns_invoice_get, not here.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the order to return with its lines. Omit it to search orders with the filters below.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
termNoThe search term allowing to search orders based on the description of its order lines.
endDateNoThe parameter allowing to search orders before the given date
statusesNoKeep only orders in these payment statuses, e.g. PAID, PENDING_PAYMENT or REFUSED.
ordersIdsNoThe list of order identifiers.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.
startDateNoThe parameter allowing to search orders after the given date
orderLineIdsNoThe list of order line id related to the orders.
deliveryInProgressNoThe delivery status of the orders. An order delivery is considered in progress once the order payment has been processed but no all order lines are delivered yet.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the tool as read-only, idempotent, and non-destructive. The description adds useful behavioral context: id changes the operation from search to single-order fetch, filters are ignored when id is present, and results are paged. This goes beyond the structured annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences front-load the primary behavior, then add a practical use case and a sibling-tool pointer. Every sentence contributes information, with no repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema, output schema, and comprehensive annotations, the description covers the essential decision points: single-get versus search, filter behavior, pagination, and where to find invoices. Nothing critical for invoking the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantic value by explaining that filters are ignored when id is given, grouping the search parameters, and clarifying pagination behavior. It also distinguishes order lines from invoices, helping the agent understand the domain model.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns one order with its lines and delivery status by id, or searches orders when id is omitted. It also differentiates itself from eurodns_invoice_get, making its scope unambiguous among the sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit use case ('learn what happened to a subscription that was ordered but never became active') and states when filters apply versus when they are ignored. It also directs invoice-related needs to eurodns_invoice_get, providing a clear alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_portfolio_refreshRefresh the cached domain listA
Read-onlyIdempotent

Re-reads the account’s domain list that backs name completion, so a domain registered or transferred moments ago appears in suggestions without waiting for the cache to expire, and returns how many domains were loaded. Use it right after such a change, not as a way to list domains: that is eurodns_domain_get called without a domainName. It alters nothing upstream.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
domainsYes
replacedAgeSecondsNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds 'It alters nothing upstream' and clarifies the return count, providing useful additional behavioral context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, well-structured, and front-loaded with the primary action and purpose. Every sentence adds meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the zero-parameter schema, the description fully covers what the tool does, when to use it, what it returns, and how it differs from a similar sibling tool. No important context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters and the schema coverage is complete (empty properties), so the baseline of 4 applies. No additional parameter explanation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's specific action ('Re-reads the account’s domain list'), its purpose ('backs name completion'), and its return value ('returns how many domains were loaded'). It also distinguishes itself from the sibling tool eurodns_domain_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided: use it 'right after such a change' and not as a way to list domains, with the alternative tool explicitly named (eurodns_domain_get called without a domainName).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_ssl_get_certificateGet an SSL certificateA
Read-onlyIdempotent

Returns one certificate of the SSL subscription subscriptionId by certificateId: common name, SANs, validity dates, issuance status and the certificate itself once issued. Both ids come from eurodns_subscription_get for product ssl, which lists the certificates of a subscription. It does not say how a pending name is being validated: for that use eurodns_ssl_get_validation instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
certificateIdYesNumeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl.
subscriptionIdYesNumeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds context about the returned certificate contents without contradicting the annotations, but does not elaborate on other behaviors like error cases or side effects beyond what is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat verbose and repetitive, particularly the second sentence which reiterates the source of the IDs. It conveys necessary information but could be more concise without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description appropriately focuses on input sourcing and differentiation. It covers the essential context for using the tool correctly, including where to obtain IDs and what it does not handle (validation). The only minor gap is not explicitly stating that the output schema describes the return format, but that is implied by the existence of the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptive text about their source and meaning. The description repeats the schema information without adding new semantic details, so it stays at the baseline score for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool returns a single certificate with specific fields (common name, SANs, validity, status, certificate), and distinguishes it from sibling tools like validation retrieval. The verb 'Returns' is specific and the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs that both IDs come from eurodns_subscription_get for SSL products, and clarifies that validation status is handled by eurodns_ssl_get_validation, providing clear when-to-use guidance and differentiation from related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_ssl_get_validationGet the validation of a certificate nameA
Read-onlyIdempotent

Returns how the name sanName of certificate certificateId, in SSL subscription subscriptionId, is being validated — method, approver address, token or record to publish — and where it stands. Read it when an ordered certificate has not been issued; it also lists the approver addresses the authority accepts. To change the method or approver use eurodns_ssl_update_validation_approver, and to send the email again use eurodns_ssl_resend_approver_email rather than this call, which sends nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
sanNameYesSubject Alternative Name exactly as it appears on the certificate, e.g. www.example.com, from eurodns_ssl_get_certificate.
certificateIdYesNumeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl.
subscriptionIdYesNumeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate read-only, open-world, idempotent, and non-destructive behavior. The description reinforces that this call 'sends nothing' and only returns validation state, aligning with annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with the primary purpose stated first and supplementary guidance included naturally. Every sentence adds useful context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description sufficiently explains when to use the tool and what it returns, and the output schema exists to describe the result structure. It does not detail all possible validation states, but this is not critical given the output schema and read-only nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters have descriptions providing source context (from subscription_get or certificate list) and type details. The schema coverage is 100%, and the descriptions clarify how to obtain the IDs, though they rely on referencing other tool outputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns validation details for a specific certificate name, including method, approver address, and token/record to publish. It also distinguishes this read operation from update and resend actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using this tool when an ordered certificate has not been issued, and mentions alternatives for changing the approver or resending email. It does not exhaustively list all alternate tools, but provides clear context for the primary use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_ssl_reissue_certificateReissue an SSL certificateA

Reissues certificate certificateId of the SSL subscription subscriptionId against the new body.encodedCsr, for example after a key rotation, and returns the new certificate. No charge is made and the term does not move: extending it is a separate, paid renewal rather than a reissue. Names added in body.sanEntries go through validation again, which eurodns_ssl_get_validation follows; both ids come from eurodns_subscription_get for product ssl.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesencodedCsr: the new PEM certificate request the certificate is reissued against, plus sanEntries for a multi-domain certificate.
certificateIdYesNumeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl.
subscriptionIdYesNumeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as a mutating, non-destructive operation. The description adds material behavior beyond that: no charge is made, the subscription term does not move, SAN entries are re-validated, and the tool returns the new certificate. These are important operational facts not visible in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core action and key parameters, then adds behavioral caveats about charge, term, and validation. It is information-dense but each sentence earns its place; slightly dense phrasing keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter mutation with a nested body and an output schema, the description covers the trigger scenario, id provenance, validation follow-up, commercial impact, and return value. Nothing an agent needs to decide whether to invoke it or how 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents all three parameters in detail, including the nested body fields and the origin of both ids. The description reinforces this with usage context but adds little semantic meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action verb ('Reissues') with the exact resource (certificateId of SSL subscription) and input (body.encodedCsr). It explicitly contrasts reissue with a paid renewal, which distinguishes it from related SSL lifecycle operations like renewal or validation updates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete use case ('after a key rotation'), explicitly says extending the term is a separate paid renewal rather than a reissue, and directs the agent to eurodns_subscription_get for ids and eurodns_ssl_get_validation for the validation flow. This is strong when-vs-when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_ssl_resend_approver_emailResend the SSL certificate validation emailA

Sends the validation email for the name sanName of certificate certificateId, in SSL subscription subscriptionId, to its approver again, and returns nothing on success. Use it when the approver did not receive the first mail; every call sends another, so do not use it to check the state, which eurodns_ssl_get_validation returns. If the address itself is wrong, change it first with eurodns_ssl_update_validation_approver.

ParametersJSON Schema
NameRequiredDescriptionDefault
sanNameYesSubject Alternative Name exactly as it appears on the certificate, e.g. www.example.com, from eurodns_ssl_get_certificate.
certificateIdYesNumeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl.
subscriptionIdYesNumeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=false and destructiveHint=false. The description adds the concrete behavior 'every call sends another', which reinforces the non-idempotent nature and warns against misuse. It also states 'returns nothing on success', which is useful beyond annotations. It doesn't cover potential failure modes or rate limits, but for a simple action this is adequate; the description adds context beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences pack the core action, usage conditions, exclusions, and alternative tools with zero fluff. The essential action is front-loaded, and each clause earns its place. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple resend action, the description covers what it does, when to use it, what it returns, and how to handle the wrong-address case. It also references the sibling for state checking. Given the presence of an output schema (not shown) and the annotations covering safety, the description is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage with rich descriptions (e.g., 'exactly as it appears on the certificate' and provenance from sibling tools). The description merely restates the parameter names without adding new semantic details. Since the schema already does the heavy lifting, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Sends the validation email for the name sanName of certificate certificateId, in SSL subscription subscriptionId, to its approver again'. It clearly identifies the action and parameters. It also distinguishes itself from sibling tools like eurodns_ssl_get_validation and eurodns_ssl_update_validation_approver by naming them, so an agent can disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use: 'Use it when the approver did not receive the first mail'. It also gives when-not-to-use: 'do not use it to check the state' and points to the correct alternative for state checking (eurodns_ssl_get_validation) and for fixing a wrong address (eurodns_ssl_update_validation_approver). This is textbook usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_ssl_update_validation_approverUpdate the validation approver of a certificate nameA
Idempotent

Changes the validation method or approver address for the name sanName of certificate certificateId, in SSL subscription subscriptionId, from body.verificationMethod and the approver it names, and returns the updated validation. Use it when the current approver cannot receive the email; only the addresses eurodns_ssl_get_validation lists are accepted, any other is refused. If the address is right and only the mail was lost, use eurodns_ssl_resend_approver_email instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesverificationMethod, and for email validation the approver address, chosen from the allowed approvers eurodns_ssl_get_validation lists.
sanNameYesSubject Alternative Name exactly as it appears on the certificate, e.g. www.example.com, from eurodns_ssl_get_certificate.
certificateIdYesNumeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl.
subscriptionIdYesNumeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states that it changes the validation and returns the updated validation, matching the non-read-only annotation. It also mentions refusal of unapproved addresses, which adds useful behavioral context beyond the annotations, though it does not elaborate on all possible side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly concise and front-loads the main action and object. The phrase 'from body.verificationMethod and the approver it names' is slightly awkward and could be clearer, but it does not add unnecessary length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with the fully covered schema and sibling-tool references, gives enough context to call the tool correctly. It mentions return value, accepted input sources, and directs to related operations when alternative actions are appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Every parameter is described with source and meaning: subscriptionId and certificateId explain where to obtain them, sanName gives an example, and the nested body explains verificationMethod and the approver constraint. The enum values for verificationMethod are also explained in the schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Changes' and specifies the resource: validation method or approver address for a SAN of a certificate in an SSL subscription. It also distinguishes itself from the related resend operation, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool ('when the current approver cannot receive the email'), states the constraint that only addresses from eurodns_ssl_get_validation are accepted, and directs users to eurodns_ssl_resend_approver_email for the lost-mail case. This provides clear decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_subscription_getGet a subscription, or search them across productsA
Read-onlyIdempotent

Returns one subscription in full when product and id are given — an SSL subscription with its certificates, a mailbox with its aliases, a Premium DNS, Microsoft or HTTPS redirect term — lists one product’s subscriptions when only product is given, or searches every product when both are omitted. Start with the cross-product search for an expiry review, then narrow by product. It reads records only and manages nothing behind them; a filter marked for another product is ignored, and an id without product is refused before any call, since ids repeat across products. Its ids feed eurodns_ssl_get_certificate and eurodns_email_set_alias.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of one subscription of the chosen product, from a previous search, to return in full. Omit it to list or search instead.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
productNoWhich product to read: ssl, email, premium_dns, microsoft or https_redirect. Omit it to search every product at once with the common filters; required whenever id is given, because ids are only unique within a product.
sanNameNossl only: a Subject Alternative Name of a certificate in the subscription.
userNameNoemail only: the mailbox user name, the part before the @.
renewableNossl only: true keeps subscriptions that can still be renewed.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.
commonNameNossl only: the common name of a certificate in the subscription.
domainNameNoKeep only subscriptions attached to this domain, e.g. example.com. Read by the cross-product search and by the email and premium_dns listings; use microsoftDomain for Microsoft.
accountLabelNomicrosoft only: the account label the subscription was created under.
microsoftDomainNomicrosoft only: the Microsoft 365 domain of the subscription.
autoRenewEnabledNoCross-product search only: true keeps subscriptions that renew themselves, false only those that will lapse.
subscriptionTypesNoCross-product search only: keep these products, e.g. ["SSL", "EMAIL"]. Ignored when product is given, which already selects one.
subscriptionStatusNoKeep only subscriptions in this lifecycle status, e.g. ACTIVE, TO_RENEW or PROVISIONING, for any product. Omit for every status.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states it reads records only and manages nothing behind them, aligning with readOnlyHint and destructiveHint false. It also discloses that an id without product is refused, filters marked for another product are ignored, and wide pages are truncated, giving clear expectations about side effects and boundaries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficiently structured: it front-loads the core behavior, then gives a usage strategy, then covers constraints and edge cases. Every sentence contributes meaningful information without fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema and annotations, the description covers all necessary operational details: pagination semantics, sorting, product-specific filters, cross-product filtering, id uniqueness, and the character-limit truncation caveat. There is no obvious gap that would prevent an agent from using the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the schema descriptions are already detailed, the tool description adds crucial semantic context: ids are only unique within a product, certain filters are product-specific or ignored in other modes, and subscriptionTypes is ignored when a product is given. This goes well beyond the baseline and clarifies ambiguous parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the three modes of operation — fetch one subscription with product and id, list one product's subscriptions with product alone, or search across every product when both are omitted — and gives concrete examples of what each subscription type contains. It fully distinguishes this read operation from the many sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly recommends starting with the cross-product search for an expiry review and then narrowing by product, which is actionable guidance. It also notes which filters apply to which product searches and warns about pagination and character-limit truncation, so an agent knows how to use the tool correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurodns_tld_getGet a TLD, or list themA
Read-onlyIdempotent

Returns one TLD by id — registration terms, minimum and maximum durations, registry-specific requirements — or lists the TLDs this account can order when id is omitted, filtered by tldName and paged. Read it before ordering an unfamiliar extension to learn what the registry demands. The full list runs to hundreds of entries, so filter with tldName or page with size rather than asking for everything; it says nothing about whether a name is free, which is eurodns_domain_check_availability.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric id of the TLD to return. Omit it to list the TLDs this account can order, optionally filtered by tldName.
pageNo1-based page number. There is no page meaning everything: walk pages until a short one comes back.
sizeNoResults per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.
tldNameNoFilter on the TLD name, e.g. "com" or "lu". Omit to page through every TLD.
sortFieldNoResult field to sort on, spelled as in the response items. Unsorted when omitted.
sortOrderNoASC or DESC; only read with sortField.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesResponse body as returned by the API.
statusYesUpstream HTTP status code.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context beyond that: the list can be very large, results are pageable, omitting id switches to list mode, and the tool says nothing about domain availability.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler, front-loads the core behavior, and each sentence earns its place: what it returns, when to use it, and what it explicitly does not do. The sibling reference is tightly interwoven rather than bolted on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent list/get tool with a rich input schema and an output schema, the description covers the essential decision points: how to get one vs. many, how to avoid overwhelming responses, and what it cannot tell you. No critical contextual gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema description coverage is 100%, so the schema already explains all six parameters clearly. The description does add strategic emphasis around id omission, tldName filtering, and paging, but it does not add significant semantic detail that the schema lacks, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Returns/lists), a clear resource (TLDs), and the conditional behavior based on whether id is provided. It also explicitly names the sibling tool it is not, eurodns_domain_check_availability, so an agent can immediately distinguish the two without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: read this before ordering an unfamiliar extension to learn registry requirements. It also warns against asking for the entire list and recommends filtering by tldName or paging with size, and explicitly routes availability questions to eurodns_domain_check_availability.

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.

  1. 21 tool updatesv0.11.0
    • Removedeurodns_dns_add_records
    • Removedeurodns_dns_set_dnssec
    • Changedeurodns_dns_upsert_record1 field changed
      • addedInput schema / properties / append
        Added value: +{
        +  "description": "true adds the record even when one with the same type and host exists, instead of updating it: a second TXT under one host, or a further MX. Default false.",
        +  "type": "boolean"
        +}
    • Changedeurodns_domain_get7 fields changed
      • addedInput schema / properties / body
        Added value: +{
        +  "description": "Search criteria, read only when domainName is omitted: a free-text term with its termMatchingMode and termMatchFields, plus boolean filters such as active, renewable, dnssecActivated or premiumDns. Omitted or empty, every domain is listed.",
        +  "properties": {
        +    "active": {
        +      "description": "If `true`, only non expired domains will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "contactValidated": {
        +      "description": "If `true`, only domains where the owner contact has been validated will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "contactValidationExpiringSoon": {
        +      "description": "Only domains with a contact validation close to expiring will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "contactValidationMethod": {
        +      "enum": [
        +        "EMAIL",
        +        "NIS2"
        +      ],
        +      "type": "string"
        +    },
        +    "dnssecActivated": {
        +      "description": "If `true`, only domains with an active DNSSEC protection will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "folderFullPath": {
        +      "description": "Only domains with this exact folder path will be included",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "pendingModification": {
        +      "description": "If `true`, only domains with an ongoing operation will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "premium": {
        +      "description": "If `true`, only premium domains will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "premiumDns": {
        +      "description": "If `true`, only domains using our premium DNS solution will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "reactivable": {
        +      "description": "If `true`, only reactivable domains will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "renewable": {
        +      "description": "If `true`, only renewable domains will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "renewalMethod": {
        +      "enum": [
        +        "AUTORENEW",
        +        "AUTOEXPIRE"
        +      ],
        +      "type": "string"
        +    },
        +    "term": {
        +      "description": "The search term used to filter out results in combination with the `termMatchingMode` and `termMatchFields` parameters",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "termMatchFields": {
        +      "items": {
        +        "enum": [
        +          "DOMAIN_NAME",
        +          "FOLDER",
        +          "CONTACTS",
        +          "OWNER_CONTACT",
        +          "ADMIN_CONTACT",
        +          "TECHNICAL_CONTACT",
        +          "BILLING_CONTACT",
        +          "NAMESERVERS"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "termMatchingMode": {
        +      "enum": [
        +        "CONTAINS",
        +        "STARTS_WITH",
        +        "EXACTLY"
        +      ],
        +      "type": "string"
        +    },
        +    "tldName": {
        +      "description": "The exact TLD name of a domain",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "useOurNameservers": {
        +      "description": "If `true`, only domains using our nameserver configuration will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "whoisPrivacy": {
        +      "description": "If `true`, only domains where domain privacy is activated will be included",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / domainName / description
        Previous value: -"Fully qualified domain name, e.g. example.com, as listed by eurodns_domain_search."New value: +"Fully qualified name of a domain held in this account, e.g. example.com, to return in full. Omit it to search the account’s domains with body and the pagination arguments."
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "domainName"
        -]
    • Removedeurodns_domain_search
    • Changedeurodns_domain_set_dnssec4 fields changed
      • changedInput schema / properties / domainName / description
        Previous value: -"Fully qualified domain name, e.g. example.com, as listed by eurodns_domain_search."New value: +"Fully qualified domain name, e.g. example.com, as listed by eurodns_domain_get when called without a domainName."
      • changedInput schema / properties / enabled / description
        Previous value: -"true to publish the DS records at the registry, false to withdraw them."New value: +"true to enable DNSSEC in that scope, false to disable it."
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "registry publishes or withdraws the DS records of a domain registered here; zone starts or stops signing a zone hosted here, for a domain registered elsewhere.",
        +  "enum": [
        +    "registry",
        +    "zone"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "domainName",
        -  "enabled"
        -]New value: +[
        +  "domainName",
        +  "scope",
        +  "enabled"
        +]
    • Removedeurodns_email_get_subscription
    • Changedeurodns_email_set_alias1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Numeric id of the email subscription, from the list eurodns_email_get_subscription returns when called without an id."New value: +"Numeric id of the email subscription, from eurodns_subscription_get with product email and no id."
    • Changedeurodns_email_set_catchall1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Numeric id of the email subscription, from the list eurodns_email_get_subscription returns when called without an id."New value: +"Numeric id of the email subscription, from eurodns_subscription_get with product email and no id."
    • Changedeurodns_email_update_password1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Numeric id of the email subscription, from the list eurodns_email_get_subscription returns when called without an id."New value: +"Numeric id of the email subscription, from eurodns_subscription_get with product email and no id."
    • Removedeurodns_https_redirect_get_subscription
    • Removedeurodns_microsoft_get_subscription
    • Removedeurodns_premium_dns_get_subscription
    • Changedeurodns_ssl_get_certificate2 fields changed
      • changedInput schema / properties / certificateId / description
        Previous value: -"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."New value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl."
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."New value: +"Numeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id."
    • Removedeurodns_ssl_get_subscription
    • Changedeurodns_ssl_get_validation2 fields changed
      • changedInput schema / properties / certificateId / description
        Previous value: -"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."New value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl."
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."New value: +"Numeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id."
    • Changedeurodns_ssl_reissue_certificate2 fields changed
      • changedInput schema / properties / certificateId / description
        Previous value: -"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."New value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl."
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."New value: +"Numeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id."
    • Changedeurodns_ssl_resend_approver_email2 fields changed
      • changedInput schema / properties / certificateId / description
        Previous value: -"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."New value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl."
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."New value: +"Numeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id."
    • Changedeurodns_ssl_update_validation_approver2 fields changed
      • changedInput schema / properties / certificateId / description
        Previous value: -"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."New value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_subscription_get returns for product ssl."
      • changedInput schema / properties / subscriptionId / description
        Previous value: -"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."New value: +"Numeric id of the SSL subscription, from eurodns_subscription_get with product ssl and no id."
    • Addedeurodns_subscription_get
    • Removedeurodns_subscription_search
  2. 67 tool updatesv0.10.0
    • Removedeurodns_contact_create_profile
    • Changedeurodns_contact_get_profile11 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Numeric id of the contact profile to return in full. Omit it to list the account’s profiles, filtered by type and role."
      • addedInput schema / properties / isAdmin
        Added value: +{
        +  "description": "Keep only profiles usable as the administrative contact.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / isBilling
        Added value: +{
        +  "description": "Keep only profiles usable as the billing contact.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / isOrg
        Added value: +{
        +  "description": "Keep only profiles usable as the registrant (owner) contact.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / isTech
        Added value: +{
        +  "description": "Keep only profiles usable as the technical contact.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / type
        Added value: +{
        +  "description": "Filter on the contact type: PRIVATE_PERSON, COMPANY, ORGANISATION or PUBLIC_BODY.",
        +  "enum": [
        +    "PRIVATE_PERSON",
        +    "COMPANY",
        +    "ORGANISATION",
        +    "PUBLIC_BODY"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Removedeurodns_contact_list_profiles
    • Changedeurodns_contact_resend_validation_email1 field changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"contactsDetails: the contacts to send a validation link to, identified as eurodns_domain_get returns them on the domain."
    • Addedeurodns_contact_save_profile
    • Changedeurodns_contact_set_as_default_profile2 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"Which contact roles this profile becomes the default for: org (registrant), admin, tech and billing, each true or false."
      • addedInput schema / properties / id / description
        Added value: +"Numeric id of the contact profile, from the list eurodns_contact_get_profile returns when called without an id."
    • Removedeurodns_contact_update_profile
    • Changedeurodns_dns_add_records2 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"The records to append, each with type, host, rdata and optionally a ttl from the allowed list. Existing records are kept."
      • changedInput schema / properties / domainName / description
        Previous value: -"a domain name (e.g. example.com)"New value: +"Name of the zone, e.g. example.com: a domain whose DNS is hosted here."
    • Changedeurodns_dns_check_zone2 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"The candidate zone to validate: records, urlForwards and mailForwards in the shape eurodns_dns_get_zone returns. Nothing is saved."
      • changedInput schema / properties / domainName / description
        Previous value: -"a domain name (e.g. example.com)"New value: +"Name of the zone, e.g. example.com: a domain whose DNS is hosted here."
    • Changedeurodns_dns_check_zone_profile1 field changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"The candidate profile to validate: name, records, urlForwards and mailForwards. Nothing is saved."
    • Removedeurodns_dns_create_zone_profile
    • Changedeurodns_dns_delete_record5 fields changed
      • changedInput schema / properties / host / description
        Previous value: -"Node the record applies to. Use \"\" or \"@\" for the apex."New value: +"Node the record applies to. Use \"\" or \"@\" for the apex. Required without recordId."
      • addedInput schema / properties / recordId
        Added value: +{
        +  "description": "Numeric id of the record, from the records eurodns_dns_get_zone returns. When given, type and host are not needed.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"Record type of the record to delete."New value: +"Record type of the record to delete, e.g. A, CNAME, TXT. Required without recordId."
      • changedInput schema / required
        Previous value: -[
        -  "domainName",
        -  "type",
        -  "host"
        -]New value: +[
        +  "domainName"
        +]
      • changedOutput schema / properties / deleted / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "host",
        -  "rdata"
        -]New value: +[
        +  "id"
        +]
    • Removedeurodns_dns_delete_record_by_id
    • Changedeurodns_dns_delete_zone_profile1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"id of zone profile to delete"New value: +"Numeric id of the zone profile, from the list eurodns_dns_get_zone_profile returns when called without an id."
    • Changedeurodns_dns_get_dnssec_status1 field changed
      • changedInput schema / properties / domainName / description
        Previous value: -"a domain name (e.g. example.com)"New value: +"Name of the zone, e.g. example.com: a domain whose DNS is hosted here."
    • Changedeurodns_dns_get_zone1 field changed
      • changedInput schema / properties / domainName / description
        Previous value: -"a domain name (e.g. example.com)"New value: +"Name of the zone, e.g. example.com: a domain whose DNS is hosted here."
    • Changedeurodns_dns_get_zone_profile7 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"id of zone profile to return"New value: +"Numeric id of the profile to return in full. Omit it to list the account’s zone profiles, optionally filtered by name."
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Filter on the profile name. Omit to list every profile.",
        +  "type": "string"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Changedeurodns_dns_get_zone_snapshot3 fields changed
      • changedInput schema / properties / domainName / description
        Previous value: -"a domain name (e.g. example.com)"New value: +"Name of the zone, e.g. example.com: a domain whose DNS is hosted here."
      • changedInput schema / properties / id / description
        Previous value: -"id of Zone Snapshot to return"New value: +"Numeric id of the snapshot to return. Omit it to list the snapshots of the zone, with their ids and dates."
      • changedInput schema / required
        Previous value: -[
        -  "domainName",
        -  "id"
        -]New value: +[
        +  "domainName"
        +]
    • Removedeurodns_dns_list_zone_profiles
    • Removedeurodns_dns_list_zone_snapshots
    • Changedeurodns_dns_save_zone2 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"The complete zone as returned by eurodns_dns_get_zone, with your changes applied: records, urlForwards and mailForwards. Anything left out is deleted; record values go in rdata."
      • changedInput schema / properties / domainName / description
        Previous value: -"a domain name (e.g. example.com)"New value: +"Name of the zone, e.g. example.com: a domain whose DNS is hosted here."
    • Changedeurodns_dns_save_zone_profile3 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"The profile: a name plus the records, urlForwards and mailForwards the template applies. When replacing, send the complete profile as eurodns_dns_get_zone_profile returned it — anything left out is dropped. Record values go in rdata."
      • changedInput schema / properties / id / description
        Previous value: -"id of zone profile to update"New value: +"Numeric id of the profile to replace, from eurodns_dns_get_zone_profile. Omit it to create a new profile."
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "body"
        -]New value: +[
        +  "body"
        +]
    • Addedeurodns_dns_set_dnssec
    • Removedeurodns_dns_sign_zone
    • Removedeurodns_dns_unsign_zone
    • Changedeurodns_domain_check_availability1 field changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"domainNames: the fully qualified names to check, e.g. [\"example.com\", \"example.lu\"]."
    • Changedeurodns_domain_get1 field changed
      • changedInput schema / properties / domainName / description
        Previous value: -"The exact domain name"New value: +"Fully qualified domain name, e.g. example.com, as listed by eurodns_domain_search."
    • Changedeurodns_domain_search5 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"Search criteria: a free-text term with its termMatchingMode and termMatchFields, plus boolean filters such as active, renewable, dnssecActivated or premiumDns. An empty object lists every domain."
      • changedInput schema / properties / page / description
        Previous value: -"1-based page number."New value: +"1-based page number. There is no page meaning everything: walk pages until a short one comes back."
      • changedInput schema / properties / size / description
        Previous value: -"Results per page, 1 to 500."New value: +"Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size."
      • changedInput schema / properties / sortField / description
        Previous value: -"Field to sort by."New value: +"Result field to sort on, spelled as in the response items. Unsorted when omitted."
      • changedInput schema / properties / sortOrder / description
        Previous value: -"Sort direction."New value: +"ASC or DESC; only read with sortField."
    • Addedeurodns_domain_set_dnssec
    • Removedeurodns_domain_sign
    • Removedeurodns_domain_unsign
    • Removedeurodns_email_create_alias
    • Removedeurodns_email_create_catchall
    • Removedeurodns_email_delete_alias
    • Removedeurodns_email_delete_catchall
    • Changedeurodns_email_get_subscription9 fields changed
      • addedInput schema / properties / domainName
        Added value: +{
        +  "description": "The domain name the email subscription(s) you search for are related to",
        +  "type": "string"
        +}
      • addedInput schema / properties / id / description
        Added value: +"Numeric id of the email subscription to return. Omit it to search the account’s email subscriptions with the filters below."
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / subscriptionStatus
        Added value: +{
        +  "description": "Keep only subscriptions in this lifecycle status, e.g. ACTIVE, TO_RENEW or PROVISIONING. Omit for every status.",
        +  "enum": [
        +    "ACTIVE",
        +    "TO_RESTORE",
        +    "TO_RENEW",
        +    "TO_DELETE",
        +    "PENDING_RENEW",
        +    "PENDING_RENEW_DOWNGRABLE",
        +    "UPGRADE_QUANTITY",
        +    "PENDING_UPGRADE_PRODUCT",
        +    "HOLD",
        +    "PENDING_DOWNGRADE_PRODUCT",
        +    "MIGRATED",
        +    "PENDING_REACTIVATE",
        +    "PROVISIONING"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / userName
        Added value: +{
        +  "description": "Filter on the mailbox user name, the part before the @.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Removedeurodns_email_list_subscriptions
    • Addedeurodns_email_set_alias
    • Addedeurodns_email_set_catchall
    • Changedeurodns_email_update_password2 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"password and passwordConfirmation, identical. The value is sent to the provider and never stored or logged here."
      • addedInput schema / properties / id / description
        Added value: +"Numeric id of the email subscription, from the list eurodns_email_get_subscription returns when called without an id."
    • Changedeurodns_https_redirect_get_subscription1 field changed
      • addedInput schema / properties / subscriptionId / description
        Added value: +"Numeric id of the HTTPS redirect subscription, as returned by eurodns_subscription_search filtered on HTTPS_REDIRECT."
    • Changedeurodns_invoice_get15 fields changed
      • addedInput schema / properties / cipId
        Added value: +{
        +  "description": "Numeric id of the customer invoice profile, from the list eurodns_invoice_profile_get returns when called without an id.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / createdAfter
        Added value: +{
        +  "description": "The invoice creation date start range.",
        +  "type": "string"
        +}
      • addedInput schema / properties / createdBefore
        Added value: +{
        +  "description": "The invoice creation date end range.",
        +  "type": "string"
        +}
      • addedInput schema / properties / id / description
        Added value: +"Numeric id of the invoice to return with its lines. Omit it to search invoices with the filters below."
      • addedInput schema / properties / invoiceIds
        Added value: +{
        +  "description": "The list of unique invoice identifiers.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / invoiceNumbers
        Added value: +{
        +  "description": "The list of invoice numbers.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / invoiceStatuses
        Added value: +{
        +  "description": "Keep only invoices in these statuses, e.g. TO_PAY, PAID or CANCELLED.",
        +  "items": {
        +    "description": "The invoice status - CANCELLED: the invoice has been cancelled and should no longer be considered. - INTERNAL: the invoice is being processed by our system. - PAID: the invoice has been payed. No other operation is expected on this invoice. - PARTIALLY_PAID: the invoice has been partially paid, but the payment did not cover the invoice full price. Another payment is expected to cover the due leftover amount. - PARTIALLY_REIMBURSED: the invoice was paid, and then partially reimbursed, but the reimbursement did not cover the invoice full price. Another reimbursement is expected to cover the invoice paid amount. - PENDING_PARTIAL_PAYMENT: a payment not covering the full invoice price has been initiated, but has yet to be completed. - PENDING_PAYMENT: a payment covering the full invoice price has been initiated, but has yet to be completed. - PENDING_REIMBURSEMENT: a reimbursement has been initiated, but has yet to be completed. - REIMBURSED: the invoice has been reimbursed in its full paid amount. - TO_PAY: the invoice is outstanding and needs to be paid. - TO_REIMBURSE: the invoice reimbursement has not been initiated yet. - WAITING_PO_NUMBER: the invoice requires a P.O. number to be provided before being processed.",
        +    "enum": [
        +      "INTERNAL",
        +      "TO_PAY",
        +      "NOT_TO_PAY",
        +      "WAITING_PO_NUMBER",
        +      "PENDING_PAYMENT",
        +      "PENDING_PARTIAL_PAYMENT",
        +      "PARTIALLY_PAID",
        +      "PAID",
        +      "TO_REIMBURSE",
        +      "PENDING_REIMBURSEMENT",
        +      "PARTIALLY_REIMBURSED",
        +      "REIMBURSED",
        +      "CANCELLED"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / invoiceType
        Added value: +{
        +  "description": "Keep only invoices of this type: INVOICE, CREDIT_NOTE, CORRECTIVE_INVOICE or EDITED_INVOICE.",
        +  "enum": [
        +    "INVOICE",
        +    "CREDIT_NOTE",
        +    "CORRECTIVE_INVOICE",
        +    "EDITED_INVOICE"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / orderIds
        Added value: +{
        +  "description": "The identifier of orders related to the invoices.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / relatedInvoiceId
        Added value: +{
        +  "description": "The related invoice identifier. Edited invoices, credit notes and corrective invoices are created based on this invoice.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Removedeurodns_invoice_list
    • Changedeurodns_invoice_profile_get17 fields changed
      • addedInput schema / properties / active
        Added value: +{
        +  "description": "The invoice profile active status. Inactive invoice profiles are not selectable by users when placing orders and should only be used for keeping track of past invoices.",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / cipId
        Removed value: -{
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • addedInput schema / properties / city
        Added value: +{
        +  "description": "The invoice profile city.",
        +  "type": "string"
        +}
      • addedInput schema / properties / companyName
        Added value: +{
        +  "description": "The invoice profile company name.",
        +  "type": "string"
        +}
      • addedInput schema / properties / countryCode
        Added value: +{
        +  "description": "The invoice profile country code.",
        +  "type": "string"
        +}
      • addedInput schema / properties / defaultProfile
        Added value: +{
        +  "description": "The invoice profile default status.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / email
        Added value: +{
        +  "description": "The invoice profile email address.",
        +  "type": "string"
        +}
      • addedInput schema / properties / firstName
        Added value: +{
        +  "description": "The invoice profile first name.",
        +  "type": "string"
        +}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Numeric id of the invoice profile to return in full. Omit it to search the account’s profiles with the filters below.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / lastName
        Added value: +{
        +  "description": "The invoice profile last name.",
        +  "type": "string"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / profileName
        Added value: +{
        +  "description": "The display name of the invoice profile.",
        +  "type": "string"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / termMatchingMode
        Added value: +{
        +  "description": "The match mode to apply on the given `profile-name`, `first-name`, `last-name`, `company-name`, `city` or `email` field.",
        +  "enum": [
        +    "EQUALS",
        +    "NOT_EQUALS",
        +    "CONTAINS",
        +    "STARTS_WITH",
        +    "ENDS_WITH",
        +    "NOT_CONTAINS"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "cipId"
        -]
    • Removedeurodns_invoice_profile_list
    • Changedeurodns_microsoft_get_subscription9 fields changed
      • addedInput schema / properties / accountLabel
        Added value: +{
        +  "description": "The account label the microsoft subscription(s) you search for are related to",
        +  "type": "string"
        +}
      • addedInput schema / properties / id / description
        Added value: +"Numeric id of the Microsoft subscription to return. Omit it to search them by status, Microsoft domain and account label."
      • addedInput schema / properties / microsoftDomain
        Added value: +{
        +  "description": "The domain name the microsoft subscription(s) you search for are related to",
        +  "type": "string"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / subscriptionStatus
        Added value: +{
        +  "description": "Keep only subscriptions in this lifecycle status, e.g. ACTIVE, TO_RENEW or PROVISIONING. Omit for every status.",
        +  "enum": [
        +    "ACTIVE",
        +    "TO_RESTORE",
        +    "TO_RENEW",
        +    "TO_DELETE",
        +    "PENDING_RENEW",
        +    "PENDING_RENEW_DOWNGRABLE",
        +    "UPGRADE_QUANTITY",
        +    "PENDING_UPGRADE_PRODUCT",
        +    "HOLD",
        +    "PENDING_DOWNGRADE_PRODUCT",
        +    "MIGRATED",
        +    "PENDING_REACTIVATE",
        +    "PROVISIONING"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Removedeurodns_microsoft_list_subscriptions
    • Removedeurodns_nameserver_create_profile
    • Changedeurodns_nameserver_get_profile9 fields changed
      • addedInput schema / properties / default
        Added value: +{
        +  "description": "true keeps only the default profile, false keeps every other one. Omit for both.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / deletable
        Added value: +{
        +  "description": "true keeps only profiles no domain uses, which are the ones that can be deleted.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / id / description
        Added value: +"Numeric id of the nameserver profile to return. Omit it to list the account’s profiles with the filters below."
      • addedInput schema / properties / includeNameservers
        Added value: +{
        +  "description": "Include each profile's nameserver list in the response, not just its name and id.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Removedeurodns_nameserver_list_profiles
    • Addedeurodns_nameserver_save_profile
    • Removedeurodns_nameserver_update_profile
    • Changedeurodns_order_get13 fields changed
      • addedInput schema / properties / deliveryInProgress
        Added value: +{
        +  "description": "The delivery status of the orders. An order delivery is considered in progress once the order payment has been processed but no all order lines are delivered yet.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / endDate
        Added value: +{
        +  "description": "The parameter allowing to search orders before the given date",
        +  "type": "string"
        +}
      • addedInput schema / properties / id / description
        Added value: +"Numeric id of the order to return with its lines. Omit it to search orders with the filters below."
      • addedInput schema / properties / orderLineIds
        Added value: +{
        +  "description": "The list of order line id related to the orders.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / ordersIds
        Added value: +{
        +  "description": "The list of order identifiers.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / startDate
        Added value: +{
        +  "description": "The parameter allowing to search orders after the given date",
        +  "type": "string"
        +}
      • addedInput schema / properties / statuses
        Added value: +{
        +  "description": "Keep only orders in these payment statuses, e.g. PAID, PENDING_PAYMENT or REFUSED.",
        +  "items": {
        +    "description": "The order payment status. - CART: no payment attempts were made. - CREDIT_LINE: an invoice will be sent in relation to the order. - EXPIRED_CART: no payment attempts were made and the cart end of life has been reached. - FRAUD: a payment attempt was flagged as potentially fraudulent. - NO_CHARGE: no payment required. - PAID: a payment has been accepted and completed. - PENDING_PAYMENT: a payment attempt has been initiated. - QUOTE: a payment is required to process the quote - QUOTE_AUTHORIZATION: an authorization approver needs to validate the quote. - REFUSED: a payment attempt has been declined.",
        +    "enum": [
        +      "CART",
        +      "PAID",
        +      "CREDIT_LINE",
        +      "PENDING_PAYMENT",
        +      "REFUSED",
        +      "NO_CHARGE",
        +      "FRAUD",
        +      "QUOTE",
        +      "EXPIRED_CART",
        +      "QUOTE_AUTHORIZATION"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / term
        Added value: +{
        +  "description": "The search term allowing to search orders based on the description of its order lines.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Removedeurodns_order_list
    • Changedeurodns_premium_dns_get_subscription9 fields changed
      • addedInput schema / properties / domainName
        Added value: +{
        +  "description": "The domain name the Premium DNS subscription(s) you search for are related to",
        +  "type": "string"
        +}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Numeric id of the Premium DNS subscription to return. Omit it to search them by status and domain.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / subscriptionId
        Removed value: -{
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • addedInput schema / properties / subscriptionStatus
        Added value: +{
        +  "description": "Keep only subscriptions in this lifecycle status, e.g. ACTIVE, TO_RENEW or PROVISIONING. Omit for every status.",
        +  "enum": [
        +    "ACTIVE",
        +    "TO_RESTORE",
        +    "TO_RENEW",
        +    "TO_DELETE",
        +    "PENDING_RENEW",
        +    "PENDING_RENEW_DOWNGRABLE",
        +    "UPGRADE_QUANTITY",
        +    "PENDING_UPGRADE_PRODUCT",
        +    "HOLD",
        +    "PENDING_DOWNGRADE_PRODUCT",
        +    "MIGRATED",
        +    "PENDING_REACTIVATE",
        +    "PROVISIONING"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "subscriptionId"
        -]
    • Removedeurodns_premium_dns_list_subscriptions
    • Changedeurodns_ssl_get_certificate2 fields changed
      • addedInput schema / properties / certificateId / description
        Added value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."
      • addedInput schema / properties / subscriptionId / description
        Added value: +"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."
    • Changedeurodns_ssl_get_subscription11 fields changed
      • addedInput schema / properties / commonName
        Added value: +{
        +  "description": "The common name of an SSL certificate of the subscription.",
        +  "type": "string"
        +}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Numeric id of the SSL subscription to return with its certificates. Omit it to search SSL subscriptions with the filters below.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / renewable
        Added value: +{
        +  "description": "The renewal capacity of the SSL subscription.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / sanName
        Added value: +{
        +  "description": "Subject Alternative Name exactly as it appears on the certificate, e.g. www.example.com, from eurodns_ssl_get_certificate.",
        +  "type": "string"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / subscriptionId
        Removed value: -{
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • addedInput schema / properties / subscriptionStatus
        Added value: +{
        +  "description": "Keep only subscriptions in this lifecycle status, e.g. ACTIVE, TO_RENEW or PROVISIONING. Omit for every status.",
        +  "enum": [
        +    "ACTIVE",
        +    "TO_RESTORE",
        +    "TO_RENEW",
        +    "TO_DELETE",
        +    "PENDING_RENEW",
        +    "PENDING_RENEW_DOWNGRABLE",
        +    "UPGRADE_QUANTITY",
        +    "PENDING_UPGRADE_PRODUCT",
        +    "HOLD",
        +    "PENDING_DOWNGRADE_PRODUCT",
        +    "MIGRATED",
        +    "PENDING_REACTIVATE",
        +    "PROVISIONING"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "subscriptionId"
        -]
    • Changedeurodns_ssl_get_validation3 fields changed
      • addedInput schema / properties / certificateId / description
        Added value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."
      • addedInput schema / properties / sanName / description
        Added value: +"Subject Alternative Name exactly as it appears on the certificate, e.g. www.example.com, from eurodns_ssl_get_certificate."
      • addedInput schema / properties / subscriptionId / description
        Added value: +"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."
    • Removedeurodns_ssl_list_subscriptions
    • Changedeurodns_ssl_reissue_certificate3 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"encodedCsr: the new PEM certificate request the certificate is reissued against, plus sanEntries for a multi-domain certificate."
      • addedInput schema / properties / certificateId / description
        Added value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."
      • addedInput schema / properties / subscriptionId / description
        Added value: +"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."
    • Changedeurodns_ssl_resend_approver_email3 fields changed
      • addedInput schema / properties / certificateId / description
        Added value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."
      • addedInput schema / properties / sanName / description
        Added value: +"Subject Alternative Name exactly as it appears on the certificate, e.g. www.example.com, from eurodns_ssl_get_certificate."
      • addedInput schema / properties / subscriptionId / description
        Added value: +"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."
    • Changedeurodns_ssl_update_validation_approver4 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Request body."New value: +"verificationMethod, and for email validation the approver address, chosen from the allowed approvers eurodns_ssl_get_validation lists."
      • addedInput schema / properties / certificateId / description
        Added value: +"Numeric id of the certificate inside the subscription, from the certificates eurodns_ssl_get_subscription returns."
      • addedInput schema / properties / sanName / description
        Added value: +"Subject Alternative Name exactly as it appears on the certificate, e.g. www.example.com, from eurodns_ssl_get_certificate."
      • addedInput schema / properties / subscriptionId / description
        Added value: +"Numeric id of the SSL subscription, from the list eurodns_ssl_get_subscription returns when called without an id."
    • Removedeurodns_subscription_list
    • Addedeurodns_subscription_search
    • Changedeurodns_tld_get7 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"id of TLD to return"New value: +"Numeric id of the TLD to return. Omit it to list the TLDs this account can order, optionally filtered by tldName."
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based page number. There is no page meaning everything: walk pages until a short one comes back.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page, 1 to 500. A wide page is truncated by the character limit, so prefer a filter to a large size.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Result field to sort on, spelled as in the response items. Unsorted when omitted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "ASC or DESC; only read with sortField.",
        +  "enum": [
        +    "ASC",
        +    "DESC"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / tldName
        Added value: +{
        +  "description": "Filter on the TLD name, e.g. \"com\" or \"lu\". Omit to page through every TLD.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Removedeurodns_tld_list
  3. 64 tool updatesv0.9.1
    • First observedeurodns_account_get_prepaid_balance
    • First observedeurodns_contact_create_profile
    • First observedeurodns_contact_get_profile
    • First observedeurodns_contact_list_profiles
    • First observedeurodns_contact_resend_validation_email
    • First observedeurodns_contact_set_as_default_profile
    • First observedeurodns_contact_update_profile
    • First observedeurodns_dns_add_records
    • First observedeurodns_dns_check_zone
    • First observedeurodns_dns_check_zone_profile
    • First observedeurodns_dns_create_zone_profile
    • First observedeurodns_dns_delete_record
    • First observedeurodns_dns_delete_record_by_id
    • First observedeurodns_dns_delete_zone_profile
    • First observedeurodns_dns_diff_zone
    • First observedeurodns_dns_get_dnssec_status
    • First observedeurodns_dns_get_zone
    • First observedeurodns_dns_get_zone_profile
    • First observedeurodns_dns_get_zone_snapshot
    • First observedeurodns_dns_list_zone_profiles
    • First observedeurodns_dns_list_zone_snapshots
    • First observedeurodns_dns_save_zone
    • First observedeurodns_dns_save_zone_profile
    • First observedeurodns_dns_sign_zone
    • First observedeurodns_dns_unsign_zone
    • First observedeurodns_dns_upsert_record
    • First observedeurodns_domain_check_availability
    • First observedeurodns_domain_get
    • First observedeurodns_domain_search
    • First observedeurodns_domain_sign
    • First observedeurodns_domain_unsign
    • First observedeurodns_email_create_alias
    • First observedeurodns_email_create_catchall
    • First observedeurodns_email_delete_alias
    • First observedeurodns_email_delete_catchall
    • First observedeurodns_email_get_subscription
    • First observedeurodns_email_list_subscriptions
    • First observedeurodns_email_update_password
    • First observedeurodns_https_redirect_get_subscription
    • First observedeurodns_invoice_get
    • First observedeurodns_invoice_list
    • First observedeurodns_invoice_profile_get
    • First observedeurodns_invoice_profile_list
    • First observedeurodns_microsoft_get_subscription
    • First observedeurodns_microsoft_list_subscriptions
    • First observedeurodns_nameserver_create_profile
    • First observedeurodns_nameserver_get_profile
    • First observedeurodns_nameserver_list_profiles
    • First observedeurodns_nameserver_update_profile
    • First observedeurodns_order_get
    • First observedeurodns_order_list
    • First observedeurodns_portfolio_refresh
    • First observedeurodns_premium_dns_get_subscription
    • First observedeurodns_premium_dns_list_subscriptions
    • First observedeurodns_ssl_get_certificate
    • First observedeurodns_ssl_get_subscription
    • First observedeurodns_ssl_get_validation
    • First observedeurodns_ssl_list_subscriptions
    • First observedeurodns_ssl_reissue_certificate
    • First observedeurodns_ssl_resend_approver_email
    • First observedeurodns_ssl_update_validation_approver
    • First observedeurodns_subscription_list
    • First observedeurodns_tld_get
    • First observedeurodns_tld_list

TDQS

A4.2/5.0

Scored across 36 tools

Disambiguation4/5

Tools are clearly differentiated by their descriptions and cross-references (e.g., check_zone vs diff_zone; get_zone vs get_zone_snapshot). The only slight overlap is between zone and zone-profile tools, but their purposes are explicitly distinguished.

Naming Consistency5/5

All tools follow a consistent pattern: 'eurodns_' + resource area (dns, domain, contact, email, ssl, etc.) + action (get, save, set, check, diff, delete, refresh). Naming is uniform and predictable.

Tool Count4/5

With 36 tools (though only 26 are visible in the description, the count suggests a broad domain), the set covers a wide range of DNS, domain, and email operations. The number is large but reasonable for the apparent scope, and each tool serves a distinct purpose.

Completeness3/5

The server provides comprehensive CRUD for zones, profiles, and some email settings, but lacks obvious operations such as updating or deleting a domain directly, deleting contact/nameserver profiles, or managing invoices (only mentioned in other tool descriptions). Some lifecycle actions are missing, leaving minor gaps.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides comprehensive domain analysis capabilities including WHOIS lookups, DNS record queries, and DNS health checking.
    14
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that provides comprehensive domain name research tools, including RDAP, WHOIS, and DNS query functionality.
    1
    2
    Apache 2.0
  • F
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server that wraps the Namecheap API, enabling AI assistants to manage domains, DNS records, SSL certificates, and account information.
    2
    10 npm
    -