Public leaderboard

Public assessment

mikusnuz/dynadot-mcp (dynadot-mcp)

dynadot-mcp · v1.3.0 · scanned

What changed in the harness

Selection accuracy 100→100, token cost up 8%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

18.9 / 30

18.9 out of 30
03Economics

13.6 / 20

13.6 out of 20
04Discoverability

13.7 / 20

13.7 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

63 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
register_domain
no_return_description
Registers a new domain for the specified number of years (1-10) using the account's default registrant contact unless registrant_contact is given; optionally applies a coupon and billing currency. Returns the registration order details including status and price.
bulk_register_domains
no_return_description
Registers up to 100 domains in a single call using the account's default settings (nameservers, DNS, contacts), applying an optional coupon and currency to all of them. Returns per-domain registration results including success/failure status and price.
get_domain_info
no_return_description
Retrieves the full registration record for a domain. Returns its expiry date, nameservers, WHOIS contact details, privacy status, and lock status.
list_domains
name_restates_behavior no_return_description
Retrieves every domain in the account without needing a per-domain lookup. Returns an array of domain summaries including expiry date, status, and lock/privacy flags.
renew_domain
name_restates_behavior no_return_description
Extends a domain's registration by the given number of years, optionally applying a coupon; with price_check=true it only quotes the renewal cost without charging. Returns the renewal order details or price quote.
delete_domain
name_restates_behavior no_return_description
Cancels a domain registration while it is still within its grace period; once the grace period ends this can no longer be reversed. Returns the deletion confirmation status.
restore_domain
no_return_description
Reinstates a domain that has entered the post-expiration redemption grace period, typically for an added restore fee. Returns the restoration order status.
push_domain
name_restates_behavior no_return_description
Transfers ownership of a domain already in Dynadot to a different Dynadot account identified by the recipient's push username, optionally unlocking the domain first if it is locked. Returns the push request status.
get_dns
name_restates_behavior no_return_description
Retrieves the DNS configuration currently active on a domain through Dynadot's DNS service, useful before making edits with set_dns. Returns all A, AAAA, CNAME, MX, TXT, and SRV records along with any configured subdomains.
set_dns
no_return_description
Applies DNS record settings to a domain via Dynadot's DNS service, using API-style keys (main_record_type0-19, subdomain0-9, etc.) passed in the records object, either overwriting existing records or appending to them. Returns the update confirmation status.
set_nameservers
name_restates_behavior no_return_description
Replaces a domain's nameserver delegation with up to 13 specified hostnames, pointing DNS resolution away from Dynadot's default servers. Returns the update confirmation status.
get_nameservers
name_restates_behavior no_return_description
Looks up which nameservers are currently delegated for a domain. Returns the list of nameserver hostnames.
register_nameserver
name_restates_behavior no_return_description
Creates a glue record pairing a custom nameserver hostname with an IP address, needed when a domain uses its own subdomain as its nameserver. Returns the registration confirmation status.
get_dnssec
name_restates_behavior no_return_description
Looks up whether DNSSEC is enabled for a domain and its current key parameters. Returns the flags, algorithm, and public key configured, or a disabled state if none is set.
add_nameserver
no_return_description
Creates a new custom nameserver record pairing a hostname with an IP address for use as glue on domains delegated to it. Returns the creation confirmation status.
set_nameserver_ip
no_return_description
Changes the IP address associated with an already-registered custom nameserver hostname. Returns the update confirmation status.
delete_nameserver
no_return_description
Removes a specific registered nameserver by hostname, or, if domain is given instead, removes all custom nameservers tied to that domain. Returns the deletion confirmation status.
list_registered_nameservers
name_restates_behavior no_return_description
Retrieves every custom nameserver (glue record) registered under the account, regardless of which domains use them. Returns a list of nameserver hostnames and their IP addresses.
create_contact
params_unexplained no_return_description
Creates a reusable contact record (requiring name, email, phone_num, address1, city, state, zip_code, and country, plus optional address2, organization, and fax_num) that can later be assigned as a domain's registrant, admin, technical, or billing contact. Returns the new contact_id.
delete_contact
name_restates_behavior no_return_description
Permanently removes a contact record; this fails if any domain still references it as registrant, admin, technical, or billing contact. Returns the deletion confirmation status.
list_contacts
no_return_description
Retrieves all contacts on the account, or, when contact_id is given, just that one contact's full details. Returns contact records including name, email, address, and organization fields.
set_contact_regional_setting
no_return_description
Applies additional WHOIS fields that certain registries (EU, Latvia, or Lithuania) require on a contact before registrations under those TLDs will be accepted. Returns the update confirmation status.
manage_cn_audit
no_return_description
Creates or checks the status of the identity-verification audit China's registry requires before a .cn domain can be registered, using the given contact and, for 'create', supporting documents in params. Returns the audit record or its current status.
set_reseller_verification
name_restates_behavior params_unexplained no_return_description
Updates the WHOIS identity-verification status recorded for a reseller's contact, used when a reseller must attest that an end customer's contact information has been validated. Returns the update confirmation status.
transfer_domain
name_restates_behavior no_return_description
Starts an inbound transfer of a domain from its current registrar into this Dynadot account using the EPP authorization code obtained from that registrar, optionally assigning a registrant contact or coupon. Returns the transfer request status.
cancel_transfer
name_restates_behavior no_return_description
Withdraws an in-progress inbound transfer request for a domain before it completes. Returns the cancellation confirmation status.
get_transfer_status
no_return_description
Looks up where an inbound domain transfer currently stands in the approval process. Returns the transfer's current status (e.g., pending, completed, failed).
get_auth_code
no_return_description
Retrieves the EPP authorization code required to transfer a domain out to another registrar, optionally regenerating the code and/or unlocking the domain in the same call. Returns the authorization code and the domain's lock status.
authorize_transfer_away
no_return_description
Confirms consent to release a domain to a different registrar that has an outgoing transfer pending on it. Returns the authorization confirmation status.
set_auth_code
params_unexplained no_return_description
Manually sets the EPP authorization code stored for a domain, overriding the auto-generated one, typically to match a code the receiving registrar requires. Returns the update confirmation status.
manage_domain_push
no_return_description
Views incoming domain push requests sent by other Dynadot accounts, or accepts/rejects a specific one by push_id. Returns the list of pending requests, or the accept/reject confirmation status.
set_privacy
no_return_description
Sets how much of a domain's WHOIS contact information is masked from public lookups. Returns the update confirmation status.
set_whois_contacts
name_restates_behavior params_unexplained no_return_description
Assigns which contact records serve as a domain's registrant, admin, technical, and/or billing WHOIS contacts; any role left unspecified keeps its current contact. Returns the update confirmation status.
set_forwarding
no_return_description
Redirects visitors of a domain to another URL, either via a standard 301/302 HTTP redirect or, with stealth=true, an iframe that keeps the domain's own URL visible under a custom page title. Returns the update confirmation status.
set_renew_option
no_return_description
Sets whether a domain automatically renews at expiration, does not renew, or reverts to the account default. Returns the update confirmation status.
lock_domain
name_restates_behavior no_return_description
Toggles a domain's clientTransferProhibited status to block or allow transfers to another registrar, guarding against unauthorized transfer attempts. Returns the update confirmation status.
set_domain_note
name_restates_behavior no_return_description
Attaches a free-text note to a domain and/or moves it into an organizational folder. Returns the update confirmation status.
set_parking
no_return_description
Activates Dynadot's placeholder parking page for a domain that has no active site or forwarding, optionally showing ads on the page. Returns the update confirmation status.
set_hosting
name_restates_behavior no_return_description
Activates Dynadot's built-in web hosting for a domain, choosing between basic and advanced tiers, with an option to enable a mobile-optimized view on advanced hosting. Returns the update confirmation status.
set_email_forward
name_restates_behavior no_return_description
Configures a domain's incoming mail to either forward to existing email addresses or route through custom MX records, selected via forward_type and indexed keys (username0/exist_email0, or mx_host0/mx_priority0) in params. Returns the update confirmation status.
clear_domain_setting
name_restates_behavior no_return_description
Removes a previously configured service (forwarding, stealth, parking, hosting, DNS, or email forwarding) from a domain, reverting it to having no active service of that kind. Returns the update confirmation status.
create_folder
name_restates_behavior no_return_description
Adds a new named folder that domains can later be organized into. Returns the new folder's ID.
delete_folder
name_restates_behavior no_return_description
Removes a folder; this fails if any domains are still assigned to it. Returns the deletion confirmation status.
list_folders
name_restates_behavior no_return_description
Retrieves every organizational folder set up in the account. Returns each folder's ID and name.
set_folder_settings
no_return_description
Applies a default configuration (nameservers, DNS, forwarding, parking, stealth, hosting, email forwarding, or renewal option, chosen via setting_type with values in params) to a folder so every domain placed in it inherits the same setting. Returns the update confirmation status.
rename_folder
name_restates_behavior no_return_description
Changes the display name of an existing folder without affecting the domains or settings assigned to it. Returns the update confirmation status.
get_account_info
no_return_description
Looks up the Dynadot account's identity and configuration. Returns the username, email address, and account settings.
get_account_balance
no_return_description
Checks how much account credit is currently available for domain purchases and renewals. Returns the current balance and its currency.
set_account_defaults
no_return_description
Sets the account-wide default (WHOIS contacts, nameservers, DNS, parking, forwarding, stealth, hosting, email forwarding, or renewal option, chosen via setting_type with values in params) applied to new registrations that don't specify their own. Returns the update confirmation status.
list_orders
name_restates_behavior no_return_description
Retrieves the account's full history of purchases, renewals, and transfers. Returns a list of past orders with their type, date, and status.
get_order_status
no_return_description
Looks up how a specific past order is progressing. Returns that order's current status.
check_processing
name_restates_behavior no_return_description
Checks whether the account has any operations (such as registrations or transfers) still being processed asynchronously, useful before assuming a prior action has finished. Returns the count/list of pending operations.
list_coupons
name_restates_behavior no_return_description
Retrieves every coupon code currently available on the account for use with registrations or renewals. Returns each coupon's code, discount, and applicable conditions.
get_auctions
no_return_description
Browses domain auctions that are currently accepting bids or already completed, with optional filter parameters. Returns a paginated list of auctions including domain name and current/final price.
place_bid
name_restates_behavior no_return_description
Submits a bid on a domain currently up for auction, at the specified amount and currency. Returns the bid confirmation status.
manage_backorders
no_return_description
Adds a request to automatically attempt to catch a domain if it becomes available, removes an existing backorder, or lists all backorders on the account, depending on action. Returns the backorder record or list accordingly.
set_for_sale
no_return_description
Lists an owned domain for sale on the Dynadot marketplace at the given asking price. Returns the listing confirmation status.
get_marketplace_listings
no_return_description
Browses domains for sale on the Dynadot marketplace, either all listings matching optional filter parameters or one specific listing by ID. Returns listing details including domain name and asking price.
get_auction_details
no_return_description
Looks up a specific auction's current state, optionally including its full bid history. Returns the auction's domain, status, current price, and bids if requested.
manage_backorder_auctions
no_return_description
Views open or closed backorder auctions, retrieves details on a specific one, or places a bid on it, depending on action. Returns the auction list, details, or bid confirmation accordingly.
buy_expired_domain
no_return_description
Browses domains that expired into closeout at discounted prices, or purchases one directly by domain name. Returns the list of available domains, or the purchase confirmation status.
buy_it_now
no_return_description
Immediately purchases a marketplace-listed domain at its fixed Buy It Now price, skipping the auction/bidding process. Returns the purchase confirmation status.
confirm_marketplace_action
name_restates_behavior params_unexplained no_return_description
Accepts or rejects a pending marketplace action (such as a sale offer) relayed from an Afternic or Sedo integration for a specific domain. Returns the confirmation status of the action taken.

Selection evidence

Confusable tool pairs.

19 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
get_auctions get_auction_details medium A request like 'get info on this auction' could route to either the list-with-filters tool or the single-auction-detail tool, especially if the agent conflates 'auction' generically without noting one needs an auction_id.
manage_backorders manage_backorder_auctions high Both are action-dispatch tools over backorders; 'list my backorders' or 'bid on a backorder' could plausibly be routed to either tool since one manages backorder requests and the other manages backorder auctions, and the naming barely distinguishes them.
push_domain manage_domain_push high A task like 'handle the domain push' is ambiguous between initiating a push (push_domain) and viewing/responding to incoming push requests (manage_domain_push), since both are literally about 'domain push' actions.
register_domain bulk_register_domains medium A task registering a single domain could be misrouted to the bulk tool if the agent assumes bulk_register_domains is the general-purpose registration entry point, though the singular vs plural/array schema difference mitigates this somewhat.
register_nameserver list_registered_nameservers low Different verbs (register vs list) make intent fairly clear, but an agent summarizing 'set up my nameserver' might briefly consider list_registered_nameservers to check existing state first — low true selection confusion for a write vs read action.
set_nameservers set_nameserver_ip medium 'Update the nameserver for my domain' is ambiguous between assigning a domain's nameserver list (set_nameservers) and updating a registered nameserver's own IP address (set_nameserver_ip), since both use 'set nameserver' phrasing.
get_auth_code set_auth_code medium A task like 'update the auth code for transferring my domain' could be misrouted to get_auth_code (which can generate a new code) instead of set_auth_code (which sets a specific provided code), since both deal with the same EPP code concept.
get_account_info get_account_balance low A vague request like 'check my account' could nominally hit either, but 'balance' and 'info' are distinct enough concepts that real confusion is unlikely except in very generic phrasing.
get_domain_info get_account_info low Both are 'get info' tools but operate on clearly different entities (domain vs account), so confusion would only arise from extremely vague prompts lacking a domain name.
get_transfer_status get_order_status medium 'Check the status of my domain transfer' could be routed to get_order_status if the agent treats the transfer as an order rather than using the dedicated get_transfer_status tool, especially if only an order ID vs domain name distinction is unclear from context.
set_contact_regional_setting set_whois_contacts low Both configure contact-related domain settings, but the regional-setting tool is for TLD-specific compliance fields while set_whois_contacts assigns contact IDs to roles — a task mentioning 'set contact info for my domain' leans clearly toward set_whois_contacts, limiting real ambiguity.
set_domain_note clear_domain_setting low Both modify domain settings but for very different purposes (adding a note/folder vs clearing a service); unlikely to be confused except in vague 'update domain settings' prompts.
set_nameservers set_forwarding low Both are domain 'set' operations but govern distinct, clearly-named services (nameservers vs URL forwarding), so genuine confusion is unlikely.
set_nameservers set_dnssec low Both are domain configuration 'set' tools but for distinct technical features (nameservers vs DNSSEC), unlikely to be confused given specific terminology.
set_nameservers set_privacy low Both are domain 'set' tools but for unrelated features (nameservers vs WHOIS privacy); minimal real confusion risk.
get_dns get_dnssec low 'Get DNS settings' could occasionally be misapplied to get_dnssec if a user conflates DNS and DNSSEC terminology, but the tools are otherwise clearly distinguished.
add_nameserver delete_nameserver low Opposite actions (add vs delete) on the same entity type are clearly distinguished by verb, so confusion is unlikely despite shared vocabulary.
create_contact edit_contact low Clear verb distinction (create vs edit) on the same entity type makes true confusion unlikely except in trivial cases.
delete_domain delete_nameserver low Both delete operations but on clearly different entities (domain vs nameserver), unlikely to be confused given explicit entity naming in typical requests.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard