AIvikings exposes 31 MCP tools for domain registration, domain management, pricing, transfers, managed DNS, contacts, account identity, and prepaid balance checks. These tools let an AI agent work with domains as callable actions instead of asking a human to click through a registrar dashboard.
This reference is the detailed companion to the compact tools list in the AIvikings docs. Use it when you want to understand what each tool does, what parameters it accepts, what it returns, and when an agent should call it.
MCP reference
Quick answer
The AIvikings MCP endpoint is:
https://mcp.aivikings.ai/mcpMCP-compatible clients can discover the tools with tools/list. Calling protected tools requires OAuth authorization for the connected AIvikings account.
Tool groups
31 tools in six groups
Risk levels
How to read the risk pills
For production agents, a practical permission model is to allow low-risk read tools and require confirmation for registration, renewal, transfer, DNS deletion, and other write actions.
Account and identity
5 toolsWho you are, your balance, and account plumbing.
get_current_user
Read
Return the account tied to the current token.
Confirm the connection is authenticated and see which customer the agent is acting as.
No input parameters.
The authenticated flag plus the customer id, name, and email. api_key_id is null on an OAuth/bearer session.
Which AIvikings account am I connected as?
The agent calls get_current_user and replies with the name and email on the account, confirming the connection is live.
{
"tool": "get_current_user",
"arguments": {}
}
get_customer
Read
Fetch the customer record for the current token.
Read the stored profile for the account the token belongs to. A supplied customer id must match the token.
customer_idOptionalstring or integerOptional. Must match the token's own customer if provided.The customer record linked to the bearer token.
Show me my AIvikings account details.
The agent reads the customer record and summarises your profile, such as your email and preferred currency.
{
"tool": "get_customer",
"arguments": {
"customer_id": "cus_XXXXXXXXXXXX"
}
}
create_customer
Write
Create a new customer, without issuing an API key.
Provision a downstream customer record. Does not return credentials.
emailRequiredstringCustomer email.company_nameOptionalstringOptional company name.display_nameOptionalstringOptional display name.preferred_currencyOptionalstringDefaults to USD.referral_codeOptionalstringOptional referral code.referred_byOptionalstringOptional referrer.The created customer record.
Set up a new AIvikings customer for hello@customer.icu.
The agent creates the customer and confirms the new account, noting that no login credentials are issued by this step.
{
"tool": "create_customer",
"arguments": {
"email": "hello@customer.icu",
"preferred_currency": "USD"
}
}
get_prepaid_balance
Read
Return prepaid wallet balances for domain purchases.
Check funds before registering or renewing. Shows USD and EUR wallets.
currencyOptionalstringRequested currency. Defaults to USD.Balance in the requested currency plus a per-wallet breakdown. When automatic conversion is on, a zero balance in one currency does not block a purchase if the other wallet has enough credit.
How much credit do I have left for registering domains?
The agent checks your balance and tells you the available amount on the account.
{
"tool": "get_prepaid_balance",
"arguments": {
"currency": "USD"
}
}
reconcile_provider_client
Write
Link or create the registrar client account for this customer.
One-time plumbing to prevent duplicate registrar client records. Rarely needed by hand.
customer_idOptionalstring or integerOptional. Must match the token if provided.The linked or newly created provider client reference.
My account seems out of sync with the registrar, can you fix the link?
The agent links or recreates your registrar client record and confirms the account is connected, avoiding duplicates.
{
"tool": "reconcile_provider_client",
"arguments": {}
}
Availability and pricing
3 toolsCheck names and see prices before you buy.
check_single_domain_availability
Read
Check availability and price for one domain.
Look up a single exact name and get its price in one call.
domainRequiredstringThe domain to check, e.g. exampledomain.icu.currencyOptionalstringDefaults to USD.A one-item domains array with availability, long_domain flag, domain_type, prices, premium flag, environment, and the provider code and description.
Is myproject.icu available?
The agent checks the one name and tells you whether it is free and what it would cost to register, renew, and transfer.
{
"tool": "check_single_domain_availability",
"arguments": {
"domain": "exampledomain.icu",
"currency": "USD"
}
}
check_domain_availability
Read
Check availability for up to 200 domains at once.
Batch-check a list of candidate names. is_premium flags premium pricing; domain_type only reflects name length.
domainsRequiredstring[]Up to 200 domains to check.currencyOptionalstringDefaults to USD.A domains array, one entry per input name, in the same shape as the single check.
Check whether myproject.icu, myproject.sbs, and myproject.cfd are free.
The agent batch-checks all three and lists which are available with their prices, and which are taken.
{
"tool": "check_domain_availability",
"arguments": {
"domains": [
"myproject.icu",
"myproject.sbs",
"myproject.cfd"
],
"currency": "USD"
}
}
get_domain_pricing
Read
Get a full price schedule for one domain.
Show registration, renewal, and transfer prices, and the per-year registration schedule, before committing.
domainRequiredstringThe domain to price.currencyOptionalstringOmit to use the returned currency. USD and EUR can be requested.Customer-facing registration, renewal, and transfer prices, a registration_prices array by year, min and max registration years, and is_premium. Never exposes upstream cost prices.
How much would it cost to register exampledomain.icu for three years?
The agent pulls the price schedule and gives you the one, two, and three year registration prices plus renewal and transfer costs.
{
"tool": "get_domain_pricing",
"arguments": {
"domain": "exampledomain.icu"
}
}
Registration and lifecycle
5 toolsRegister, renew, inspect, and list domains.
register_domain
Spend or destructive
Register a domain for a number of years. Spends credit.
Buy a name once you have confirmed availability and a registration-ready contact. Uses account default nameservers when none are given.
domainRequiredstringThe domain to register.period_yearsRequiredintegerRegistration length in years.contact_handleOptionalstringA complete reusable contact for all roles. Call list_domain_registration_contacts first.nameserversOptionalstring[]Optional. Defaults to the account's configured nameservers.currencyOptionalstringUSD or EUR. Match the currency used for the price quote.allow_premiumOptionalbooleanSet true only after the user accepts a premium price shown via get_domain_pricing.The created domain record, including status and expiry once provisioned.
Register myproject.icu for one year for me.
The agent confirms availability and your default contact, then registers the domain and reports it as registered with an expiry date. Because this spends credit, a well-configured agent will confirm before buying.
{
"tool": "register_domain",
"arguments": {
"domain": "myproject.icu",
"period_years": 1,
"contact_handle": "contact-2"
}
}
renew_domain
Spend or destructive
Renew a domain for a number of years. Spends credit.
Extend a domain you already own before it expires.
domainRequiredstringThe domain to renew.period_yearsRequiredintegerAdditional years.The updated domain record with the new expiry.
Renew kaffe.icu for another year.
The agent renews the domain and confirms the new expiry date. This spends credit, so the agent typically confirms first.
{
"tool": "renew_domain",
"arguments": {
"domain": "myproject.icu",
"period_years": 1
}
}
get_domain_status
Read
Get registration status and nameservers for one domain.
Inspect a single domain: status, expiry, nameservers, registrant verification, and lock state.
domainRequiredstringThe domain to inspect.Status, expiry, nameservers, long_domain, period, contact handle, registrant verification status and date, provider lock flag, and provider code and description.
What's the status of kaffe.icu and when does it expire?
The agent reports the domain's status, expiry, nameservers, and whether the registrant is verified and the domain is locked.
{
"tool": "get_domain_status",
"arguments": {
"domain": "kaffe.icu"
}
}
list_domains
Read
List domains in the local registrar datastore.
Enumerate everything on the account with status, nameservers, contact handle, and dates.
No input parameters.
A domains array. Each entry has id, domain, status, long_domain, period_years, nameservers, contact_handle, customer_id, expires_at, created_at, and updated_at.
List all the domains on my account.
The agent returns your domains with their status and expiry dates, so you can see everything you own at a glance.
{
"tool": "list_domains",
"arguments": {}
}
reconcile_domains
Read
Compare local domain records with the configured registrar provider records.
Audit for drift between the local datastore and the configured registrar provider.
No input parameters.
A reconciliation summary of matches and differences.
Do my domain records match what the registrar has?
The agent compares local records with configured registrar provider records and tells you whether everything is in sync or flags any differences.
{
"tool": "reconcile_domains",
"arguments": {}
}
Transfers and locks
5 toolsMove domains in, and control transfer locks.
domain_transfer
Spend or destructive
Transfer a domain in to AIvikings. Spends credit.
Bring an existing domain from another registrar, using its auth code.
domainRequiredstringThe domain to transfer in.auth_codeRequiredstringThe EPP/auth code from the losing registrar.period_yearsOptionalintegerDefaults to 1.The transfer request record and its status.
Transfer example.icu to AIvikings, the auth code is ABC-123.
The agent starts the inbound transfer using your auth code and reports that the transfer is pending. This spends credit.
{
"tool": "domain_transfer",
"arguments": {
"domain": "example.icu",
"auth_code": "AUTH-CODE-HERE",
"period_years": 1
}
}
get_transfer_auth_code
Read
Return the EPP transfer auth code for a domain you own.
Retrieve the code needed to transfer a domain out to another registrar. Fetched on demand.
domainRequiredstringA domain owned by the authenticated customer.The current EPP auth code for the domain.
I want to move kaffe.icu to another registrar, what's the auth code?
The agent retrieves and gives you the domain's EPP auth code to hand to the gaining registrar.
{
"tool": "get_transfer_auth_code",
"arguments": {
"domain": "kaffe.icu"
}
}
regenerate_transfer_auth_code
Write
Generate a new auth code, invalidating the old one.
Rotate the transfer code, for example if the previous one may be compromised.
domainRequiredstringA domain owned by the authenticated customer.The new EPP auth code. The previous code stops working.
Reset the transfer code for kaffe.icu, I think the old one leaked.
The agent generates a fresh auth code and gives it to you, and the previous code stops working.
{
"tool": "regenerate_transfer_auth_code",
"arguments": {
"domain": "kaffe.icu"
}
}
lock_domain
Write
Enable the registrar transfer lock.
Protect a domain from being transferred away.
domainRequiredstringA domain owned by the authenticated customer.Confirmation that the transfer lock is on.
Lock kaffe.icu so it can't be transferred away.
The agent enables the transfer lock and confirms the domain is protected.
{
"tool": "lock_domain",
"arguments": {
"domain": "kaffe.icu"
}
}
unlock_domain
Write
Disable the registrar transfer lock.
Prepare a domain for transfer out by removing its lock.
domainRequiredstringA domain owned by the authenticated customer.Confirmation that the transfer lock is off.
Unlock kaffe.icu, I'm about to transfer it out.
The agent removes the transfer lock and confirms the domain is ready to transfer.
{
"tool": "unlock_domain",
"arguments": {
"domain": "kaffe.icu"
}
}
Nameservers and DNS
6 toolsPoint the domain and manage its zone records.
update_nameservers
Write
Replace a domain's nameservers.
Delegate a domain to a different DNS provider or back to AIvikings.
domainRequiredstringThe domain to update.nameserversRequiredstring[]The full replacement nameserver set.The updated nameserver set for the domain.
Point kaffe.icu at AIvikings nameservers.
The agent replaces the domain's nameservers with the ones you name and confirms the new delegation.
{
"tool": "update_nameservers",
"arguments": {
"domain": "kaffe.icu",
"nameservers": [
"ns1.aivikings.net",
"ns2.aivikings.net"
]
}
}
list_dns_records
Read
List the managed DNS records for a domain.
Read the current zone before editing. Use the returned id to update or delete a record.
domainRequiredstringA domain owned by the authenticated customer.A records array. Each record has recordName, recordType, recordContent, recordTTL, recordPriority, and dnszoneRecordID (the id to pass to update or delete). Note the provider spells one field recordWeieght.
Show me the DNS records for kaffe.icu.
The agent lists the current zone, including record types, values, and TTLs, so you can see what is set before changing anything.
{
"tool": "list_dns_records",
"arguments": {
"domain": "kaffe.icu"
}
}
configure_dns_record
Write
Set the A record for a domain or subdomain.
Quick path to point a name at an IP. Use @ or omit record_name for the root; pass a relative name like www or staging.api for a subdomain.
domainRequiredstringThe domain, or a full hostname the server resolves to its parent.record_valueRequiredstringThe IPv4 address for the A record.record_nameOptionalstringRelative name, or @ for the apex. Defaults to @.The A record that was set.
Point kaffe.icu at 87.62.127.19.
The agent sets the root A record to that IP address and confirms the domain now points there.
{
"tool": "configure_dns_record",
"arguments": {
"domain": "kaffe.icu",
"record_name": "@",
"record_value": "87.62.127.19"
}
}
add_dns_record
Write
Add a managed DNS record (A, AAAA, CNAME, MX, TXT, NS, SRV).
Create a new record. Relative names expand under the domain, including nested names; use @ for the apex. SRV needs port and weight.
domainRequiredstringThe domain to add the record to.record_nameRequiredstringRelative name or @ for the apex.record_typeRequiredstringA, AAAA, CNAME, MX, TXT, NS, or SRV.record_valueRequiredstringThe record content.record_ttlOptionalintegerTime to live in seconds. Defaults to 43200.record_priorityOptionalintegerFor MX and SRV. Defaults to 0.record_portOptionalintegerRequired for SRV.record_weightOptionalintegerRequired for SRV.The created record, including its dnszoneRecordID.
Add a mail record for kaffe.icu pointing to mail.kaffe.icu.
The agent adds the MX record with the right priority and confirms it was created.
{
"tool": "add_dns_record",
"arguments": {
"domain": "kaffe.icu",
"record_name": "@",
"record_type": "MX",
"record_value": "mail.kaffe.icu",
"record_priority": 10
}
}
update_dns_record
Write
Replace an existing managed DNS record.
Change a record in place. Call list_dns_records first to get its dnszoneRecordID. All fields describe the desired replacement.
dns_zone_record_idRequiredstringThe dnszoneRecordID from list_dns_records.domainRequiredstringThe domain the record belongs to.record_nameRequiredstringRelative name or @.record_typeRequiredstringThe record type.record_valueRequiredstringThe new content.record_ttlOptionalintegerDefaults to 43200.record_priorityOptionalintegerFor MX and SRV. Defaults to 0.record_portOptionalintegerFor SRV.record_weightOptionalintegerFor SRV.The updated record.
Change the A record on kaffe.icu to 203.0.113.10.
The agent looks up the existing record, replaces it with the new IP, and confirms the change.
{
"tool": "update_dns_record",
"arguments": {
"dns_zone_record_id": "1113100947",
"domain": "kaffe.icu",
"record_name": "@",
"record_type": "A",
"record_value": "203.0.113.10"
}
}
delete_dns_record
Spend or destructive
Permanently delete a managed DNS record.
Remove a record. Call list_dns_records first and pass the exact dnszoneRecordID. This cannot be undone.
dns_zone_record_idRequiredstringThe dnszoneRecordID from list_dns_records.domainRequiredstringThe domain the record belongs to.Confirmation of deletion.
Remove the MX record from kaffe.icu.
The agent finds the record and deletes it. Because deletion is permanent, a careful agent confirms which record before removing it.
{
"tool": "delete_dns_record",
"arguments": {
"dns_zone_record_id": "1113104636",
"domain": "kaffe.icu"
}
}
Contacts and registrant
7 toolsManage reusable contacts and registrant roles.
create_contact
Write
Create a reusable contact for registrations.
Make a contact once and reuse its handle across many domains. Handle is generated if omitted.
nameRequiredstringContact full name.emailRequiredstringContact email.addressRequiredstringStreet address.cityRequiredstringCity.stateRequiredstringState or region.postal_codeRequiredstringPostal code.countryRequiredstringCountry.phone_country_codeRequiredstringPhone country code, e.g. 45.phone_numberRequiredstringPhone number.organizationOptionalstringOptional organization.address_line_2OptionalstringOptional second address line.handleOptionalstringOptional. Generated from initials, digits, and country if omitted.default_registrantOptionalbooleanSet as default registrant.default_adminOptionalbooleanSet as default admin.default_technicalOptionalbooleanSet as default technical.default_billingOptionalbooleanSet as default billing.The created contact, including its handle for use in register_domain.
Save my details as a reusable contact for future registrations.
The agent creates a contact from your details and confirms its handle, which can then be reused across domains.
{
"tool": "create_contact",
"arguments": {
"name": "Alex Customer",
"email": "hello@customer.icu",
"address": "Agent Street 1",
"city": "Copenhagen",
"state": "Copenhagen",
"postal_code": "1000",
"country": "Denmark",
"phone_country_code": "45",
"phone_number": "12345678"
}
}
list_contacts
Read
List reusable contacts for the account.
See existing contacts, their handles, default roles, and how many domains use each.
No input parameters.
Contact records with handle, name, email, address fields, the default_* role flags, used_by_domain_count, and timestamps.
What contacts do I have saved?
The agent lists your reusable contacts, their handles, default roles, and how many domains use each.
{
"tool": "list_contacts",
"arguments": {}
}
get_contact
Read
Get one reusable contact by its handle.
Read a single contact's full details.
contact_handleRequiredstringThe contact handle.The full contact record.
Show me the details for my main contact.
The agent reads that contact by its handle and shows the full record.
{
"tool": "get_contact",
"arguments": {
"contact_handle": "contact-2"
}
}
list_domain_registration_contacts
Read
List contacts usable for registration, with readiness.
Always call before register_domain. Shows which contacts are complete, what fields are missing, and their default roles.
No input parameters.
Registration contact handles, each with a registration-ready flag, any missing required fields, and default role assignments.
Am I ready to register a domain, contact-wise?
The agent checks your registration contacts and tells you which are complete and ready, or what fields are still missing.
{
"tool": "list_domain_registration_contacts",
"arguments": {}
}
assign_domain_registration_contact_roles
Write
Assign default registration roles to one contact.
Make a contact the default for registrant, admin, technical, and/or billing. Replaces the prior default for each role set.
contact_handleRequiredstringThe contact to assign roles to.assign_registrantOptionalbooleanSet as default registrant.assign_adminOptionalbooleanSet as default admin.assign_technicalOptionalbooleanSet as default technical.assign_billingOptionalbooleanSet as default billing.The updated default-role assignments.
Make my main contact the default for all registration roles.
The agent assigns that contact as the default registrant, admin, technical, and billing contact and confirms.
{
"tool": "assign_domain_registration_contact_roles",
"arguments": {
"contact_handle": "contact-2",
"assign_registrant": true,
"assign_admin": true
}
}
remove_domain_registration_contact_roles
Write
Remove default registration roles from one contact.
Clear a contact's default roles. Does not delete the contact. Removing a role without assigning it elsewhere can make registration validation fail unless register_domain is given an explicit contact.
contact_handleRequiredstringThe contact to remove roles from.remove_registrantOptionalbooleanRemove default registrant.remove_adminOptionalbooleanRemove default admin.remove_technicalOptionalbooleanRemove default technical.remove_billingOptionalbooleanRemove default billing.The updated default-role assignments.
Stop using that contact as my default billing contact.
The agent removes the billing role from that contact and confirms, leaving the contact itself intact.
{
"tool": "remove_domain_registration_contact_roles",
"arguments": {
"contact_handle": "contact-2",
"remove_billing": true
}
}
update_registrant_contact
Write
Update the registrant contact for a domain.
Change a domain's registrant. Name, organization, or email changes require acknowledge_transfer_lock=true and can impose a 60-day transfer lock while verification completes.
domainRequiredstringThe domain to update.contact_handleOptionalstringApply an existing reusable contact by handle.nameOptionalstringNew name. Triggers verification.organizationOptionalstringNew organization. Triggers verification.emailOptionalstringNew email. Triggers verification.addressOptionalstringNew street address.cityOptionalstringNew city.stateOptionalstringNew state or region.postal_codeOptionalstringNew postal code.countryOptionalstringNew country.phone_country_codeOptionalstringNew phone country code.phone_numberOptionalstringNew phone number.acknowledge_transfer_lockOptionalbooleanRequired for name, org, or email changes. Acknowledges the possible 60-day lock.The updated registrant details. A provider-accepted change is reported as verification pending until the registrant completes verification.
Change the registrant on kaffe.icu to my saved business contact.
The agent applies the contact to the domain. If the name, organisation, or email changes, it warns that verification is required and a 60-day transfer lock may apply.
{
"tool": "update_registrant_contact",
"arguments": {
"domain": "kaffe.icu",
"contact_handle": "contact-2"
}
}
Workflow patterns
How agents usually chain the tools
- Call
get_current_userto confirm the connected account. - Call
get_prepaid_balancebefore any action that spends credit. - Call
check_single_domain_availabilityorcheck_domain_availabilityto find available names. - Call
get_domain_pricingbefore asking the user to approve a registration, renewal, or transfer. - Call
list_domain_registration_contactsbeforeregister_domain. - Call
register_domain,renew_domain, ordomain_transferonly after the user has approved the spend. - Call
get_domain_status,update_nameservers, or DNS record tools to complete routing and verification.
Related guides