AiVikings.ai

ai.aivikingsPublished by aivikings.aiOfficial publisherv1.0.3Updated Oct 24, 2026

Find, register, and manage domains from any AI chat or agent

VerifiedStreamable HTTPWeb executableCloud & InfrastructureBusiness & Commerce

Overview

AI-generated overview

Official AiVikings.ai domain registrar MCP server that lets an assistant check availability, register and renew domains, and manage DNS, contacts and transfers.

What you can do
Check availability and pricing for single domains or batches of up to 200 names, with fast or registry-confirmed depth and premium flags. Register, renew and transfer domains, and read domain status, expiry, nameservers and audit history. Add, update, list and delete managed DNS records (A, AAAA, CNAME, MX, TXT, NS, SRV). Create and manage reusable registration contacts and assign registrant, admin, technical and billing roles. Lock or unlock domains, fetch or regenerate EPP transfer auth codes, and read account, customer and prepaid balance details.
When to use it
Use it when you want an assistant to research and buy domain names, keep DNS records for owned domains, or handle renewals, transfers and contact details through the AiVikings.ai registrar without leaving the chat.
Requirements
A remote endpoint at mcp.aivikings.ai over Streamable HTTP; no local install. An AiVikings.ai account is required. Browser clients use OAuth, where the approval page currently asks for an API token from the dashboard; unattended agents send an AiVikings.ai API key as a bearer Authorization header. Optional X-Agent-Id and X-Agent-Name headers label actions in the audit log.
Before you install
Registration, renewal and transfer spend money from the prepaid USD or EUR balance, and premium domains are only registered when allow_premium is passed after the user accepts the quote. Tools write, change and delete data: DNS records, nameservers, registrant contacts, transfer locks and auth codes. get_transfer_auth_code and regenerate_transfer_auth_code return a sensitive EPP secret, and regenerating invalidates the old code. The API key or OAuth token is forwarded to the AiVikings.ai backend

Installation

In SourceWeft

  1. Open AiVikings.ai in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/ai.aivikings%2Fregistrar/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "aivikings-ai": {
      "type": "http",
      "url": "https://mcp.aivikings.ai/mcp"
    }
  }
}

README

AiVikings.ai MCP Server (official)

[License: MIT] [CI]

The official Model Context Protocol server for AiVikings.ai, the domain registrar built for AI agents. It lets ChatGPT, Claude, Cursor and any agent that supports MCP check availability, register and renew domains, and manage DNS, contacts and transfers.

No install needed. AiVikings.ai runs this server at:

https://mcp.aivikings.ai/mcp

Setup guides, the full tool reference and pricing: aivikings.ai/docs/mcp

Connect

You need an AiVikings.ai account. Create one at app.aivikings.ai.

The server uses OAuth. On first use your client opens an AiVikings.ai page where you approve the connection. Today that page asks you to paste the API token from your dashboard.

Claude Code

bash
claude mcp add --transport http aivikings https://mcp.aivikings.ai/mcp

Claude (web and desktop)

Add a custom connector with the URL https://mcp.aivikings.ai/mcp. Step by step: Claude setup.

ChatGPT

Add a connector with the URL https://mcp.aivikings.ai/mcp and OAuth authentication. Step by step: ChatGPT setup.

Cursor

Add to ~/.cursor/mcp.json:

json
{  "mcpServers": {    "aivikings": {      "url": "https://mcp.aivikings.ai/mcp"    }  }}

VS Code

Add to .vscode/mcp.json:

json
{  "servers": {    "aivikings": {      "type": "http",      "url": "https://mcp.aivikings.ai/mcp"    }  }}

Cline and other agents

Agents that install MCP servers for you can follow llms-install.md.

Unattended agents (LangChain, CrewAI, scripts)

Agents without a browser can't complete OAuth. Send your AiVikings.ai API key as a bearer token instead:

json
{  "mcpServers": {    "aivikings": {      "type": "streamableHttp",      "url": "https://mcp.aivikings.ai/mcp",      "headers": {        "Authorization": "Bearer YOUR_AIVIKINGS_API_KEY"      }    }  }}

Optional X-Agent-Id and X-Agent-Name headers label your agent's actions in the domain audit log.

Try it

Once connected, ask your assistant:

  • "Is cartandcup.com available, and what would it cost to register and renew?"
  • "Brainstorm 20 names for a weather analytics project and check which .com and .io domains are free."
  • "Register nightowlanalytics.com for one year using my default contact."
  • "Point the root of nightowlanalytics.com to 203.0.113.10 and add a www CNAME."
  • "Show my domains with their status and expiry dates."

Tools

GroupTools
Search and pricingcheck_domain_availability, check_single_domain_availability, get_domain_pricing
Registration (spends prepaid balance)register_domain, renew_domain, domain_transfer
Domain managementget_domain_status, list_domains, update_nameservers, lock_domain, unlock_domain, get_transfer_auth_code, regenerate_transfer_auth_code, get_domain_audit_log
DNSlist_dns_records, add_dns_record, configure_dns_record, update_dns_record, delete_dns_record
Contactscreate_contact, get_contact, list_contacts, list_domain_registration_contacts, assign_domain_registration_contact_roles, remove_domain_registration_contact_roles, update_registrant_contact, list_contact_countries, list_contact_states
Accountget_current_user, get_prepaid_balance, get_customer

Full descriptions and parameters: tool reference.

Built for agents

  • Prepaid balance. Registrations, renewals and transfers are paid from your prepaid USD or EUR balance. No card is charged by a tool call.
  • Premium domains need a yes. A premium-priced domain is only registered when the agent passes allow_premium=true after the user accepted the quoted price.
  • Safety annotations. Every tool is marked read-only or write, and destructive tools (such as delete_dns_record) are flagged, so clients can ask before running them.
  • Audit log. Every change to a domain is recorded and can be read back with get_domain_audit_log.
  • Pure registrar. No hosting or email upsells in the purchase flow.

Privacy and security

This server is a thin adapter. Each request carries your own OAuth token or API key, which is verified by the AiVikings.ai backend and forwarded with each tool call. The adapter stores no credentials and has no privileged fallback token. Internal backend error details are never passed back to the client.

Support


Self-hosting the adapter

Most users should connect to the hosted server above. This section is for running the adapter yourself in front of an AiVikings.ai backend.

The adapter is a public Streamable HTTP MCP layer over the AiVikings.ai registrar REST API. The tools keep their parameter schemas, descriptions and safety annotations, and call the backend over HTTP. The backend owns business logic, authentication, customer isolation, scopes, provider access and audit persistence.

This repository contains no registrar backend, database models, provider adapters, frontend assets, internal runbooks or production environment files. It installs and builds without access to either private repository.

Run locally

Requires Python 3.12+ and a running AiVikings.ai backend exposing /v1/mcp.

bash
python3 -m venv .venv. .venv/bin/activatepython -m pip install -e ".[dev]"cp .env.example .env# Configure AIVIKINGS_API_BASE_URL to reach the backend.aivikings-mcp

The endpoint is http://127.0.0.1:8081/mcp. Clients send their own AiVikings.ai bearer API key or OAuth access token. The adapter verifies it through the backend and forwards it with each tool call. There is no privileged fallback token. Token revocation and customer/scope checks stay authoritative in the backend. Anonymous initialize, tools/list and ping discovery remain available.

GET /healthz is a local process health check, not an upstream readiness check. /.well-known/oauth-protected-resource advertises the public backend as the OAuth authorization server. AIVIKINGS_API_BASE_URL is an internal HTTP address; AIVIKINGS_PUBLIC_API_BASE_URL and AIVIKINGS_MCP_URL must be externally reachable for real OAuth clients. OAuth issuance and signing secrets remain in the backend.

Docker

bash
docker compose up --build

The standalone Compose default reaches the backend's published port 8080 using host.docker.internal. Set the upstream/public URLs for your deployment. If you copy .env.example first, replace its localhost upstream with an address reachable from inside the container. No private source checkout is mounted.

Tests

bash
pytest

Tests use a simulated HTTP backend and exercise discovery, bearer challenges, per-request identity, tool schemas and error sanitization without a database. Backend rejection is returned as an HTTP-status tool error; private upstream response bodies are not exposed to MCP clients. Review backend logs for details.

The optional Claude demonstration client is installed with python -m pip install -e ".[demo]"; configure its client-side ANTHROPIC_API_KEY and AIVIKINGS_MCP_API_KEY before aivikings-demo-agent. Its sample transcript in examples/ is historical and illustrative.

License

MIT

Source: README.md at commit cda382f

Tools

34

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.

Parameterslimitactioncursordomainto_timestampfrom_timestamp

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.

Takes no parameters.

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.

Parametersdepthdomainsrequiredcurrency

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.

Parametersdepthdomainrequiredcurrency

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.

Parametersdomainrequiredcurrency

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.

Parameterscurrency

list_contact_countries

List exact ConnectReseller country names and IDs for creating or updating contacts.

Takes no parameters.

list_contact_states

List exact ConnectReseller state names for a country name, country ID, or ISO code. Use the returned name in contact requests.

Parameterscountryrequired

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.

Parameterscityrequirednamerequiredemailrequiredstaterequiredhandleaddressrequiredcountryrequiredpostal_coderequiredorganizationphone_numberrequireddefault_adminaddress_line_2+4 more

get_contact

Get one reusable contact by its handle.

Parameterscontact_handlerequired

list_contacts

List reusable contacts belonging to the authenticated customer.

Takes no parameters.

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.

Takes no parameters.

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.

Parametersassign_adminassign_billingcontact_handlerequiredassign_technicalassign_registrant

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.

Parametersremove_admincontact_handlerequiredremove_billingremove_technicalremove_registrant

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.

Parametersdomainrequiredcurrencynameserversperiod_yearsrequiredallow_premiumcontact_handle

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.

Parametersdomainrequired

list_domains

List domains recorded in the local registrar datastore.

Takes no parameters.

renew_domain

Renew a domain through AIvikings.

Parametersdomainrequiredperiod_yearsrequired

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.

Parameterscitynameemailstatedomainrequiredaddresscountrypostal_codeorganizationphone_numbercontact_handlephone_country_code+1 more

update_nameservers

Replace a domain's nameservers through AIvikings.

Parametersdomainrequirednameserversrequired

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.

Parametersdomainrequiredrecord_namerecord_valuerequired

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.

Parametersdomainrequired

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.

Parametersdomainrequiredrecord_ttlrecord_namerequiredrecord_portrecord_typerequiredrecord_valuerequiredrecord_weightrecord_priority

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.

Parametersdomainrequiredrecord_ttlrecord_namerequiredrecord_portrecord_typerequiredrecord_valuerequiredrecord_weightrecord_prioritydns_zone_record_idrequired

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.

Parametersdomainrequireddns_zone_record_idrequired

domain_transfer

Transfer a domain in through AIvikings.

Parametersdomainrequiredauth_coderequiredperiod_years

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.

Parametersdomainrequired

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.

Parametersdomainrequired

lock_domain

Enable the registrar transfer lock for a domain owned by the authenticated customer.

Parametersdomainrequired

unlock_domain

Disable the registrar transfer lock for a domain owned by the authenticated customer before a transfer-out.

Parametersdomainrequired

reconcile_domains

Compare locally recorded domains with AIvikings records.

Takes no parameters.

create_customer

Create a new customer without generating or returning an API key.

Parametersemailrequiredreferred_bycompany_namedisplay_namereferral_codepreferred_currency

get_customer

Get the customer record linked to the current bearer token. A supplied customer ID must match that token.

Parameterscustomer_id

reconcile_provider_client

Link or create the authenticated customer's registrar client account, preventing duplicate creation.

Parameterscustomer_id

Version history

2
  1. v1.0.3LatestOct 24, 2026
  2. v1.0.2Oct 9, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts