AiVikings.ai
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Find, register, and manage domains from any AI chat or agent
| Author | ai.aivikings |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 408 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"AiVikings.ai": {
"url": "https://mcp.aivikings.ai/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (34)
get_domain_audit_logread-onlyRead append-only domain change history for the authenticated customer. Omit domain for portfolio history. Requires audit:read. Results are newest recorded first; pass next_cursor with the same filters for another page. Times must include a timezone. Requested, state_changed, and outcome events share an operation_id. Accepted is not proof of provider completion. History starts when domain auditing was enabled; agent labels are self-reported.
Parameters:
limit— integeractioncursordomainto_timestampfrom_timestamp
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
get_current_userread-onlyReturn the authenticated AIvikings customer for the current bearer API key, including name and email when the key belongs to a customer.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
check_domain_availabilityread-onlyCheck availability for up to 200 domain names through AIvikings. depth="fast" answers in about a second without contacting the registry, for brainstorming many names; depth="confirm" (default) asks the registry about every name that might be free and returns prices. A good flow: check many names with depth="fast", then confirm the shortlist with depth="confirm". Each result has a status: available (confirmed by the registry, with price and is_premium), likely_available (no registration found by fast checks, NOT confirmed and has no price), taken, reserved, pending_delete, invalid, unsupported_tld, or unknown (see reason). Never tell the user a likely_available name is available or quote a price for it: confirm it first with depth="confirm". domain_type only classifies name length. Use get_domain_pricing for full price schedules.
Parameters:
domains(required) — arraydepth— stringcurrency— string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world yes
check_single_domain_availabilityread-onlyCheck availability for one domain through AIvikings. depth="confirm" (default) asks the registry and returns the price; depth="fast" answers quickly without a price. Each result has a status: available (confirmed by the registry, with price and is_premium), likely_available (no registration found by fast checks, NOT confirmed and has no price), taken, reserved, pending_delete, invalid, unsupported_tld, or unknown (see reason). Never tell the user a likely_available name is available or quote a price for it: confirm it first with depth="confirm". domain_type only classifies name length. Use get_domain_pricing for the full price schedule.
Parameters:
domain(required) — stringdepth— stringcurrency— string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world yes
get_domain_pricingread-onlyGet a fresh price quote for one domain. Returns customer-facing registration, renewal, and transfer prices, plus is_premium so the user can be told when premium pricing applies. Omit currency to use the returned currency; USD and EUR can be requested explicitly. Prices are not converted: if the requested currency is unavailable, price fields are null with a price_unavailable_reason. Never exposes upstream cost prices.
Parameters:
domain(required) — stringcurrency
Hints: read-only yes · destructive not declared · idempotent not declared · open-world yes
get_prepaid_balanceread-onlyReturn the authenticated customer's prepaid balance for domain purchases. Returns both USD and EUR wallet balances. When automatic currency conversion is enabled, a zero balance in the requested currency does not block registration if the other wallet has enough credit; register_domain converts only the missing amount automatically.
Parameters:
currency— string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
list_contact_countriesread-onlyList exact ConnectReseller country names and IDs for creating or updating contacts.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
list_contact_statesread-onlyList exact ConnectReseller state names for a country name, country ID, or ISO code. Use the returned name in contact requests.
Parameters:
country(required) — string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
create_contactCreate a reusable contact for domain registration. Use list_contact_countries and list_contact_states to choose valid country and state names. The returned handle can be passed to register_domain and reused for multiple domains. When handle is omitted, it is generated from the company initials (or contact-name initials), four digits, and the country code.
Parameters:
name(required) — stringemail(required) — stringaddress(required) — stringcity(required) — stringstate(required) — stringcountry(required) — stringpostal_code(required) — stringphone_country_code(required) — stringphone_number(required) — stringhandleorganizationdefault_admin— booleanaddress_line_2default_billing— booleandefault_technical— booleandefault_registrant— boolean
Hints: read-only no · destructive no · idempotent no · open-world yes
get_contactread-onlyGet one reusable contact by its handle.
Parameters:
contact_handle(required) — string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
list_contactsread-onlyList reusable contacts belonging to the authenticated customer.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
list_domain_registration_contactsread-onlyList the authenticated customer's registrant/contact handles for domain registrations. Returns whether each contact is complete enough for registration, its missing required fields, its default domain-contact roles, and the handle to pass to register_domain. Always call this before attempting a domain registration.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
assign_domain_registration_contact_rolesAssign one existing contact handle as the default for selected domain-registration roles. Set assign_registrant, assign_admin, assign_technical, and/or assign_billing to true; false leaves that role unchanged. Assigning a role replaces any previous default for that role. Use this when registration validation reports a missing registrant, admin, technical, or billing contact.
Parameters:
contact_handle(required) — stringassign_admin— booleanassign_billing— booleanassign_technical— booleanassign_registrant— boolean
Hints: read-only no · destructive no · idempotent no · open-world yes
remove_domain_registration_contact_rolesdestructiveRemove selected default domain-registration roles from one existing contact handle. Set remove_registrant, remove_admin, remove_technical, and/or remove_billing to true; false leaves that role unchanged. This does not delete the contact. Removing a role without assigning it to another contact can make registration validation fail unless register_domain is called with an explicit registration-ready contact_handle.
Parameters:
contact_handle(required) — stringremove_admin— booleanremove_billing— booleanremove_technical— booleanremove_registrant— boolean
Hints: read-only no · destructive yes · idempotent no · open-world yes
register_domainRegister a domain through AIvikings using the authenticated account's configurable default nameservers when nameservers are omitted. Call list_domain_registration_contacts first and pass contact_handle to use one complete reusable contact for registrant, admin, technical, and billing roles. If there is no registration-ready contact, call create_contact before registration. Set currency to the same USD or EUR currency used for the price quote; otherwise the customer's preferred currency is used. If that wallet is short and automatic conversion is enabled, only the missing amount is converted from the other supported wallet. For a premium domain, first show the current get_domain_pricing quote to the user and set allow_premium=true only after the user explicitly accepts that price.
Parameters:
domain(required) — stringperiod_years(required) — integercurrencynameserversallow_premium— booleancontact_handle
Hints: read-only no · destructive no · idempotent no · open-world yes
get_domain_statusread-onlyFetch the latest domain status, expiry and nameservers from the registrar and refresh the saved AIvikings record. Use this for an on-demand update, including pending transfers.
Parameters:
domain(required) — string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world yes
list_domainsread-onlyList domains recorded in the local registrar datastore.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
renew_domainRenew a domain through AIvikings.
Parameters:
domain(required) — stringperiod_years(required) — integer
Hints: read-only no · destructive no · idempotent no · open-world yes
update_registrant_contactdestructiveUpdate the registrant contact for a domain owned by the authenticated customer. Pass contact_handle by itself to apply an existing reusable contact without copying its fields into a new contact record. Name, organization, or email changes require acknowledge_transfer_lock=true because they initiate registrant verification and can impose a 60-day inter-registrar transfer lock. A provider-accepted change is reported as verification pending until the registrant completes that step.
Parameters:
domain(required) — stringcitynameemailstateaddresscountrypostal_codeorganizationphone_numbercontact_handlephone_country_codeacknowledge_transfer_lock— boolean
Hints: read-only no · destructive yes · idempotent no · open-world yes
update_nameserversdestructiveReplace a domain's nameservers through AIvikings.
Parameters:
domain(required) — stringnameservers(required) — array
Hints: read-only no · destructive yes · idempotent no · open-world yes
configure_dns_recorddestructiveConfigure an A record for a domain through AIvikings. Use record_name=@ or omit it for the root/apex record. To create a subdomain, pass a relative name such as www for www.example.com or staging.api for staging.api.example.com. For compatibility, a complete hostname such as www.example.com may also be passed as domain; the server will resolve it against the authenticated customer's longest matching parent domain.
Parameters:
domain(required) — stringrecord_value(required) — stringrecord_name— string
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_dns_recordsread-onlyList the managed DNS records for a domain owned by the authenticated customer. Use the returned DNS zone record ID when updating or deleting a record.
Parameters:
domain(required) — string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world yes
add_dns_recordAdd a managed DNS record to a domain owned by the authenticated customer. Supported types are A, AAAA, CNAME, MX, TXT, NS, and SRV. Relative names are expanded below the domain, including nested names such as staging.api; use @ for the zone apex. SRV records require port and weight.
Parameters:
domain(required) — stringrecord_name(required) — stringrecord_type(required) — stringrecord_value(required) — stringrecord_ttl— integerrecord_portrecord_weightrecord_priority— integer
Hints: read-only no · destructive no · idempotent no · open-world yes
update_dns_recorddestructiveReplace an existing managed DNS record. Call list_dns_records first and pass its DNS zone record ID. All record fields must describe the desired replacement.
Parameters:
domain(required) — stringdns_zone_record_id(required) — stringrecord_name(required) — stringrecord_type(required) — stringrecord_value(required) — stringrecord_ttl— integerrecord_portrecord_weightrecord_priority— integer
Hints: read-only no · destructive yes · idempotent no · open-world yes
delete_dns_recorddestructivePermanently delete a managed DNS record. Call list_dns_records first and pass the exact DNS zone record ID returned by the provider.
Parameters:
domain(required) — stringdns_zone_record_id(required) — string
Hints: read-only no · destructive yes · idempotent no · open-world yes
domain_transferTransfer a domain in through AIvikings.
Parameters:
domain(required) — stringauth_code(required) — stringperiod_years— integer
Hints: read-only no · destructive no · idempotent no · open-world yes
get_transfer_auth_coderead-onlyReturn the EPP transfer auth code for a domain owned by the authenticated customer. The secret is fetched only on demand.
Parameters:
domain(required) — string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
regenerate_transfer_auth_codedestructiveRegenerate and return a new EPP transfer auth code for a domain owned by the authenticated customer, invalidating the old code.
Parameters:
domain(required) — string
Hints: read-only no · destructive yes · idempotent no · open-world yes
lock_domaindestructiveEnable the registrar transfer lock for a domain owned by the authenticated customer.
Parameters:
domain(required) — string
Hints: read-only no · destructive yes · idempotent no · open-world yes
unlock_domaindestructiveDisable the registrar transfer lock for a domain owned by the authenticated customer before a transfer-out.
Parameters:
domain(required) — string
Hints: read-only no · destructive yes · idempotent no · open-world yes
reconcile_domainsread-onlyCompare locally recorded domains with AIvikings records.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world yes
create_customerCreate a new customer without generating or returning an API key.
Parameters:
email(required) — stringreferred_bycompany_namedisplay_namereferral_codepreferred_currency— string
Hints: read-only no · destructive no · idempotent no · open-world yes
get_customerread-onlyGet the customer record linked to the current bearer token. A supplied customer ID must match that token.
Parameters:
customer_id
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
reconcile_provider_clientLink or create the authenticated customer's registrar client account, preventing duplicate creation.
Parameters:
customer_id
Hints: read-only no · destructive no · idempotent no · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.