# io.github.mikusnuz/dynadot (npm · dynadot-mcp)

MCP server for Dynadot domain registrar — domain search, registration, DNS, and transfers

- Trust score: 68/100 (medium)
- Change this week: +44
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `dynadot-mcp`: 68/100 (this document), [markdown](https://verifymcp.io/servers/mikusnuz-dynadot/dynadot-mcp.md), [page](https://verifymcp.io/servers/mikusnuz-dynadot/dynadot-mcp)

## Channel facts

- Registry: `npm`
- Package: `dynadot-mcp`
- Version: `1.3.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 136 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 88/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 4425 tokens (~63/item across 70 items; 67 tools + 3 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add mikusnuz-dynadot -- npx -y dynadot-mcp
```

### Codex

```bash
codex mcp add mikusnuz-dynadot -- npx -y dynadot-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mikusnuz-dynadot": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "dynadot-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mikusnuz-dynadot --command npx --arg -y --arg dynadot-mcp
```

### Hermes

```yaml
mcp_servers:
  mikusnuz-dynadot:
    command: "npx"
    args: ["-y", "dynadot-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "mikusnuz-dynadot": {
      "command": "npx",
      "args": [
        "-y",
        "dynadot-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 68, +42)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-08-01 (score 26, −27)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 53, +29)

- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → 100

### 2026-07-30 (score 24, −29)

- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified

### 2026-07-28 (score 53, +29)

- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → 100
- [functional] First check of Schema quality: pass
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: unverified
- [functional] First check of Schema quality: fail

### 2026-07-27 (score 24)

First indexed and scored.

## MCP tools (67)

### `search_domain` (~109 tokens)

Check domain availability. Supports up to 100 domains at once. Returns availability status and optionally pricing for each domain.

Input parameters:

- `currency` (string): Currency for pricing (e.g., 'USD', 'EUR')
- `domains` (array, required): List of domain names to check (e.g., ['example.com', 'example.net'])
- `language` (string): Language for results (e.g., 'en', 'zh', 'es')
- `show_price` (boolean): Include pricing information in results

### `register_domain` (~107 tokens)

Register a new domain name. Duration is in years (1-10). Optionally specify a registrant contact ID and coupon code.

Input parameters:

- `coupon` (string): Coupon code for discount
- `currency` (string): Currency for payment (e.g., 'USD')
- `domain` (string, required): Domain name to register (e.g., 'example.com')
- `duration` (integer, required): Registration duration in years
- `registrant_contact` (string): Contact ID to use as registrant

### `bulk_register_domains` (~64 tokens)

Register multiple domains at once (up to 100). All domains are registered with default settings unless overridden.

Input parameters:

- `coupon` (string): Coupon code for discount
- `currency` (string): Currency for payment
- `domains` (array, required): List of domain names to register

### `get_domain_info` (~53 tokens)

Get detailed information about a domain including expiry date, nameservers, WHOIS contacts, privacy status, lock status, and more.

Input parameters:

- `domain` (string, required): Domain name to query (e.g., 'example.com')

### `list_domains` (~21 tokens)

List all domains in the Dynadot account with basic information.

### `renew_domain` (~67 tokens)

Renew an existing domain registration. Duration is in years.

Input parameters:

- `coupon` (string): Coupon code for discount
- `domain` (string, required): Domain name to renew
- `duration` (integer, required): Renewal duration in years
- `price_check` (boolean): Only check the renewal price without renewing

### `delete_domain` (~38 tokens)

Delete a domain during its grace period. This action cannot be undone after the grace period expires.

Input parameters:

- `domain` (string, required): Domain name to delete

### `restore_domain` (~30 tokens)

Restore a recently deleted domain from the redemption grace period.

Input parameters:

- `domain` (string, required): Domain name to restore

### `push_domain` (~63 tokens)

Push (transfer) a domain to another Dynadot account by username.

Input parameters:

- `domain` (string, required): Domain name to push
- `receiver` (string, required): Recipient's Dynadot push username
- `unlock` (boolean): Unlock the domain before pushing (if locked)

### `get_dns` (~51 tokens)

Get all DNS records for a domain, including A, AAAA, CNAME, MX, TXT, SRV records, and subdomains.

Input parameters:

- `domain` (string, required): Domain name to query DNS records for

### `set_dns` (~219 tokens)

Set DNS records for a domain using Dynadot's DNS service. Supports main records and up to 10 subdomains. Use the records parameter to pass Dynadot API parameters like main_record_type, main_record, subdomain0, sub_record_type0, sub_record0, etc.

Input parameters:

- `domain` (string, required): Domain name to set DNS for
- `records` (object, required): DNS record parameters as key-value pairs. Keys follow Dynadot API3 set_dns2 naming: main_record_type0..19 (a/aaaa/cname/forward/txt/mx/stealth/email), main_record0..19 (value), main_recordx0..19 (MX…

### `set_nameservers` (~67 tokens)

Set nameservers for a domain. Accepts up to 13 nameserver hostnames.

Input parameters:

- `domain` (string, required): Domain name to configure
- `nameservers` (array, required): List of nameserver hostnames (e.g., ['ns1.example.com', 'ns2.example.com'])

### `get_nameservers` (~30 tokens)

Get the current nameservers configured for a domain.

Input parameters:

- `domain` (string, required): Domain name to query

### `register_nameserver` (~58 tokens)

Register a custom nameserver (glue record) with a hostname and IP address.

Input parameters:

- `host` (string, required): Nameserver hostname (e.g., 'ns1.example.com')
- `ip` (string, required): IP address for the nameserver

### `get_dnssec` (~38 tokens)

Get DNSSEC (Domain Name System Security Extensions) settings for a domain.

Input parameters:

- `domain` (string, required): Domain name to query DNSSEC for

### `set_dnssec` (~126 tokens)

Set or clear DNSSEC for a domain. To enable, provide flags, algorithm, and public_key. To disable, set clear to true.

Input parameters:

- `algorithm` (string): DNSSEC algorithm number (e.g., '13' for ECDSAP256SHA256)
- `clear` (boolean): Set to true to remove DNSSEC from the domain
- `domain` (string, required): Domain name to configure DNSSEC for
- `flags` (string): DNSSEC flags (e.g., '257' for KSK)
- `public_key` (string): DNSSEC public key

### `add_nameserver` (~57 tokens)

Add (create) a new nameserver entry with a hostname and IP address.

Input parameters:

- `host` (string, required): Nameserver hostname (e.g., 'ns1.example.com')
- `ip` (string, required): IP address for the nameserver

### `set_nameserver_ip` (~43 tokens)

Update the IP address of an existing registered nameserver.

Input parameters:

- `host` (string, required): Nameserver hostname to update
- `ip` (string, required): New IP address

### `delete_nameserver` (~54 tokens)

Delete a registered nameserver by hostname, or delete all nameservers associated with a domain.

Input parameters:

- `domain` (string): Delete all nameservers for this domain instead
- `host` (string): Nameserver hostname to delete

### `list_registered_nameservers` (~22 tokens)

List all registered (custom) nameservers in the account.

### `create_contact` (~178 tokens)

Create a new contact record for use with domain registrations. Required fields: name, email, phone_num, address1, city, state, zip_code, country.

Input parameters:

- `address1` (string, required): Street address line 1
- `address2` (string): Street address line 2
- `city` (string, required): City
- `country` (string, required): Country code (e.g., 'US', 'KR')
- `email` (string, required): Contact email address
- `fax_num` (string): Fax number
- `name` (string, required): Contact full name
- `organization` (string): Organization name
- `phone_num` (string, required): Phone number with country code (e.g., '+1.5551234567')
- `state` (string, required): State or province
- `zip_code` (string, required): Postal/ZIP code

### `edit_contact` (~77 tokens)

Edit an existing contact record. Only provided fields will be updated.

Input parameters:

- `contact_id` (string, required): Contact ID to edit
- `fields` (object, required): Fields to update as key-value pairs. Valid keys: name, email, phone_num, address1, address2, city, state, zip_code, country, organization, fax_num

### `delete_contact` (~36 tokens)

Delete a contact record. The contact must not be in use by any domain.

Input parameters:

- `contact_id` (string, required): Contact ID to delete

### `list_contacts` (~43 tokens)

List all contacts in the account, or get details of a specific contact by ID.

Input parameters:

- `contact_id` (string): If provided, get details for this specific contact ID

### `set_contact_regional_setting` (~94 tokens)

Set region-specific contact settings required by certain TLD registries (EU, Latvia, Lithuania). Pass the appropriate parameters for the region.

Input parameters:

- `contact_id` (string, required): Contact ID to configure
- `params` (object, required): Region-specific parameters as key-value pairs
- `region` (string, required): Region: 'eu' (European Union), 'lv' (Latvia), 'lt' (Lithuania)

### `manage_cn_audit` (~90 tokens)

Manage China (.cn) domain audit requests. Required for .cn domain registration. Create a new audit or check the status of an existing one.

Input parameters:

- `action` (string, required): Action: 'create' a new audit or check 'status'
- `contact_id` (string, required): Contact ID for the audit
- `params` (object): Audit parameters (required for 'create': audit documents, etc.)

### `set_reseller_verification` (~43 tokens)

Set the WHOIS verification status for a reseller contact.

Input parameters:

- `contact_id` (string, required): Contact ID
- `status` (string, required): Verification status to set

### `transfer_domain` (~96 tokens)

Initiate a domain transfer into your Dynadot account. Requires the domain name and the authorization/EPP code from the current registrar.

Input parameters:

- `auth_code` (string, required): Authorization/EPP code from the current registrar
- `coupon` (string): Coupon code for discount
- `domain` (string, required): Domain name to transfer (e.g., 'example.com')
- `registrant_contact` (string): Contact ID to use as registrant

### `cancel_transfer` (~27 tokens)

Cancel a pending domain transfer.

Input parameters:

- `domain` (string, required): Domain name to cancel transfer for

### `get_transfer_status` (~32 tokens)

Check the current status of a domain transfer.

Input parameters:

- `domain` (string, required): Domain name to check transfer status for

### `get_auth_code` (~100 tokens)

Get the transfer authorization (EPP) code for a domain. This code is needed to transfer the domain to another registrar. Can optionally generate a new code and unlock the domain for transfer.

Input parameters:

- `domain` (string, required): Domain name to get the auth code for
- `new_code` (boolean): Generate a new authorization code instead of returning the existing one
- `unlock_for_transfer` (boolean): Automatically unlock the domain for transfer when retrieving the code

### `authorize_transfer_away` (~34 tokens)

Approve an outgoing domain transfer to another registrar.

Input parameters:

- `domain` (string, required): Domain name to authorize for transfer away

### `set_auth_code` (~45 tokens)

Set the transfer authorization (EPP) code for a domain.

Input parameters:

- `auth_code` (string, required): Authorization/EPP code to set
- `domain` (string, required): Domain name

### `manage_domain_push` (~67 tokens)

View or respond to incoming domain push requests from other Dynadot accounts.

Input parameters:

- `action` (string, required): Action: 'list' pending requests, 'accept' or 'reject' a request
- `push_id` (string): Push request ID (required for 'accept'/'reject')

### `set_privacy` (~75 tokens)

Set WHOIS privacy for a domain. Options: 'full' (hide all info), 'partial' (hide some info), 'off' (show all info).

Input parameters:

- `domain` (string, required): Domain name to set privacy for
- `option` (string, required): Privacy level: 'full', 'partial', or 'off'

### `set_whois_contacts` (~104 tokens)

Set WHOIS contact information for a domain. Specify contact IDs for registrant, admin, technical, and/or billing contacts.

Input parameters:

- `admin_contact` (string): Contact ID for the admin contact
- `billing_contact` (string): Contact ID for the billing contact
- `domain` (string, required): Domain name to update
- `registrant_contact` (string): Contact ID for the registrant
- `technical_contact` (string): Contact ID for the technical contact

### `set_forwarding` (~111 tokens)

Set URL forwarding for a domain. Supports standard forwarding (301/302 redirect) and stealth forwarding (iframe with custom title).

Input parameters:

- `domain` (string, required): Domain name to set forwarding for
- `is_temporary` (boolean): Use 302 (temporary) redirect instead of 301 (permanent)
- `stealth` (boolean): Use stealth forwarding (iframe) instead of redirect
- `stealth_title` (string): Page title for stealth forwarding
- `url` (string, required): Target URL to forward to

### `set_renew_option` (~66 tokens)

Set the auto-renewal option for a domain.

Input parameters:

- `domain` (string, required): Domain name to configure
- `option` (string, required): Renewal option: 'auto' (auto-renew), 'donot' (do not renew), 'reset' (reset to default)

### `lock_domain` (~71 tokens)

Lock or unlock a domain for transfer protection. Locking enables clientTransferProhibited status to prevent unauthorized transfers.

Input parameters:

- `domain` (string, required): Domain name to lock/unlock
- `lock` (string): Action: 'lock' to enable transfer lock, 'unlock' to disable it (default: 'lock')

### `set_domain_note` (~63 tokens)

Set a note and/or move a domain to a folder for organization.

Input parameters:

- `domain` (string, required): Domain name to update
- `folder` (string): Folder name or ID to move the domain into
- `note` (string): Note to attach to the domain

### `set_parking` (~49 tokens)

Enable domain parking for a domain. Parked domains show a placeholder page.

Input parameters:

- `domain` (string, required): Domain name to park
- `with_ads` (boolean): Show ads on the parking page

### `set_hosting` (~72 tokens)

Set website hosting for a domain using Dynadot's built-in hosting service.

Input parameters:

- `domain` (string, required): Domain name to configure hosting for
- `hosting_type` (string, required): Hosting type: 'advanced' or 'basic'
- `mobile_view` (boolean): Enable mobile-optimized view (advanced hosting only)

### `set_email_forward` (~84 tokens)

Set email forwarding for a domain. Forward emails to existing email addresses or configure MX records.

Input parameters:

- `domain` (string, required): Domain name to configure email forwarding for
- `params` (object, required): Email forwarding parameters. Keys: forward_type ('forward'/'mx'), username0/exist_email0 (for forward type), mx_host0/mx_priority0 (for mx type)

### `clear_domain_setting` (~55 tokens)

Clear a specific service setting from a domain (e.g., forwarding, parking, hosting, DNS, email forwarding).

Input parameters:

- `domain` (string, required): Domain name to clear settings for
- `service` (string, required): Service to clear

### `create_folder` (~29 tokens)

Create a new folder for organizing domains.

Input parameters:

- `folder_name` (string, required): Name for the new folder

### `delete_folder` (~36 tokens)

Delete a folder. The folder must be empty (no domains assigned to it).

Input parameters:

- `folder_id` (string, required): Folder ID to delete

### `list_folders` (~19 tokens)

List all folders in the Dynadot account.

### `set_folder_settings` (~161 tokens)

Apply default settings to a folder. All domains in the folder will inherit these settings. Supports nameservers, DNS, forwarding, parking, stealth, and renewal options. Pass the appropriate Dynadot API parameters for the setting type.

Input parameters:

- `folder_id` (string, required): Folder ID to configure
- `params` (object): Setting parameters as key-value pairs (varies by setting type)
- `setting_type` (string, required): Type of setting to apply: 'whois' (WHOIS contacts), 'ns' (nameservers), 'dns' (basic DNS), 'dns2' (advanced DNS records), 'forwarding', 'stealth', 'parking', 'hosting', 'email_forward', 'renew_option…

### `rename_folder` (~38 tokens)

Rename an existing folder.

Input parameters:

- `folder_id` (string, required): Folder ID to rename
- `folder_name` (string, required): New name for the folder

### `get_account_info` (~23 tokens)

Get Dynadot account information including username, email, and settings.

### `get_account_balance` (~22 tokens)

Check the current account balance available for domain purchases and renewals.

### `set_account_defaults` (~126 tokens)

Set default account settings for new domain registrations. Supports default WHOIS contacts, nameservers, DNS, parking, forwarding, stealth, hosting, email forwarding, and renewal options.

Input parameters:

- `params` (object): Setting parameters as key-value pairs (varies by type)
- `setting_type` (string, required): Type of default setting: 'whois', 'ns', 'dns' (basic DNS), 'dns2' (advanced DNS), 'parking', 'forwarding', 'stealth', 'hosting', 'email_forward', 'renew_option', or 'clear' (remove defaults)

### `list_orders` (~25 tokens)

List all orders (purchases, renewals, transfers) in the account history.

### `get_order_status` (~31 tokens)

Check the status of a specific order by ID.

Input parameters:

- `order_id` (string, required): Order ID to check

### `check_processing` (~21 tokens)

Check if there are any pending/processing operations on the account.

### `list_coupons` (~19 tokens)

List all available coupon codes on the account.

### `get_tld_price` (~77 tokens)

Get pricing information for TLDs (top-level domains). Returns registration, renewal, and transfer prices.

Input parameters:

- `count_per_page` (integer): Number of results per page
- `currency` (string): Currency for pricing (e.g., 'USD', 'EUR')
- `page_index` (integer): Page index (0-based)

### `get_auctions` (~58 tokens)

List domain auctions. Can show open (active) or closed (completed) auctions.

Input parameters:

- `params` (object): Additional filter parameters
- `type` (string): Auction type: 'open' for active, 'closed' for completed

### `place_bid` (~71 tokens)

Place a bid on a domain auction. Requires the auction ID and bid amount.

Input parameters:

- `amount` (string, required): Bid amount (e.g., '100.00')
- `auction_id` (string, required): Auction ID to bid on
- `currency` (string): Currency for the bid (e.g., 'USD')

### `manage_backorders` (~85 tokens)

Manage domain backorder requests. You can add a new backorder, delete an existing one, or list all current backorder requests.

Input parameters:

- `action` (string, required): Action: 'add' a new backorder, 'delete' an existing one, or 'list' all
- `domain` (string): Domain name (required for 'add' and 'delete' actions)

### `set_for_sale` (~73 tokens)

List a domain for sale on the Dynadot marketplace with a specified price.

Input parameters:

- `currency` (string): Currency for the price (e.g., 'USD')
- `domain` (string, required): Domain name to list for sale
- `price` (string, required): Asking price (e.g., '1000.00')

### `get_marketplace_listings` (~62 tokens)

View marketplace listings. Can list all available domains or get details of a specific listing by ID.

Input parameters:

- `listing_id` (string): Specific listing ID to get details for (omit to list all)
- `params` (object): Additional filter parameters for listing

### `get_auction_details` (~55 tokens)

Get detailed information about a specific auction, including current bids and auction status.

Input parameters:

- `auction_id` (string, required): Auction ID to get details for
- `include_bids` (boolean): Also fetch bid history for this auction

### `manage_backorder_auctions` (~109 tokens)

View backorder auctions (open or closed) or get details/place a bid on a specific backorder auction.

Input parameters:

- `action` (string, required): Action: 'list_open', 'list_closed', 'details' (get info), or 'bid' (place bid)
- `amount` (string): Bid amount (required for 'bid')
- `auction_id` (string): Auction ID (required for 'details' and 'bid')
- `currency` (string): Currency for the bid

### `buy_expired_domain` (~98 tokens)

Browse and purchase expired closeout domains at discounted prices. Use action 'list' to see available domains or 'buy' to purchase one.

Input parameters:

- `action` (string, required): Action: 'list' available expired domains or 'buy' one
- `currency` (string): Currency for the purchase
- `domain` (string): Domain name to buy (required for 'buy')
- `params` (object): Additional filter parameters for 'list'

### `buy_it_now` (~46 tokens)

Purchase a domain listed on the marketplace at its Buy It Now price.

Input parameters:

- `currency` (string): Currency for the purchase
- `listing_id` (string, required): Listing ID to purchase

### `confirm_marketplace_action` (~72 tokens)

Confirm or reject a marketplace action from Afternic or Sedo integration.

Input parameters:

- `action` (string, required): Action to confirm (e.g., 'accept', 'reject')
- `domain` (string, required): Domain name
- `platform` (string, required): Marketplace platform: 'afternic' or 'sedo'

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/mikusnuz-dynadot/dynadot-mcp#diagnostics

## Score history

- 2026-08-03: 68
- 2026-08-02: 68
- 2026-08-01: 26
- 2026-07-31: 53
- 2026-07-30: 24
- 2026-07-28: 53
- 2026-07-27: 24

## Links

- npm package: https://www.npmjs.com/package/dynadot-mcp
- Socket report: https://socket.dev/npm/package/dynadot-mcp
- Repository: https://github.com/mikusnuz/dynadot-mcp
- Changelog RSS feed: https://verifymcp.io/servers/mikusnuz-dynadot/dynadot-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/mikusnuz-dynadot/dynadot-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/mikusnuz-dynadot/dynadot-mcp
