AiVikings.ai
Find, register, and manage domains from any AI chat or agent
What it can do
What data it sees
Do you need an account
No: the server works without sign-in
Find, register, and manage domains from any AI chat or agent
How to connect
How to connect AiVikings.ai to Claude
The server address to paste into Claude settings:
https://mcp.aivikings.ai/mcp
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect AiVikings.ai to ChatGPT
The server address to paste into ChatGPT settings:
https://mcp.aivikings.ai/mcp
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect AiVikings.ai to Cursor
The server address to paste into Cursor settings:
https://mcp.aivikings.ai/mcp
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (34)
Raw names from tools/list. Only developers need these.
| get_domain_audit_log | Read 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. |
| get_current_user | Return the authenticated AIvikings customer for the current bearer API key, including name and email when the key belongs to a customer. |
| check_domain_availability | Check 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. |
| check_single_domain_availability | Check 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. |
| get_domain_pricing | Get 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. |
| get_prepaid_balance | Return 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. |
| list_contact_countries | List exact ConnectReseller country names and IDs for creating or updating contacts. |
| list_contact_states | List exact ConnectReseller state names for a country name, country ID, or ISO code. Use the returned name in contact requests. |
| create_contact | Create 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. |
| get_contact | Get one reusable contact by its handle. |
| list_contacts | List reusable contacts belonging to the authenticated customer. |
| list_domain_registration_contacts | List 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. |
| assign_domain_registration_contact_roles | Assign 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. |
| remove_domain_registration_contact_roles | Remove 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. |
| register_domain | Register 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. |
| get_domain_status | Fetch 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. |
| list_domains | List domains recorded in the local registrar datastore. |
| renew_domain | Renew a domain through AIvikings. |
| update_registrant_contact | Update 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. |
| update_nameservers | Replace a domain's nameservers through AIvikings. |
| configure_dns_record | Configure 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. |
| list_dns_records | List 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. |
| add_dns_record | Add 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. |
| update_dns_record | Replace 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. |
| delete_dns_record | Permanently delete a managed DNS record. Call list_dns_records first and pass the exact DNS zone record ID returned by the provider. |
| domain_transfer | Transfer a domain in through AIvikings. |
| get_transfer_auth_code | Return the EPP transfer auth code for a domain owned by the authenticated customer. The secret is fetched only on demand. |
| regenerate_transfer_auth_code | Regenerate and return a new EPP transfer auth code for a domain owned by the authenticated customer, invalidating the old code. |
| lock_domain | Enable the registrar transfer lock for a domain owned by the authenticated customer. |
| unlock_domain | Disable the registrar transfer lock for a domain owned by the authenticated customer before a transfer-out. |
| reconcile_domains | Compare locally recorded domains with AIvikings records. |
| create_customer | Create a new customer without generating or returning an API key. |
| get_customer | Get the customer record linked to the current bearer token. A supplied customer ID must match that token. |
| reconcile_provider_client | Link or create the authenticated customer's registrar client account, preventing duplicate creation. |