# AiVikings.ai (remote · mcp.aivikings.ai)

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

- Trust score: 81/100 (high trust)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `mcp.aivikings.ai`: 81/100 (this document), [markdown](https://verifymcp.io/servers/ai-aivikings-registrar/mcp.md), [page](https://verifymcp.io/servers/ai-aivikings-registrar/mcp)

## Channel facts

- Endpoint: `https://mcp.aivikings.ai/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-11-05.

- **Endpoint Security**: 91/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3029 tokens (~81/item across 37 items; 37 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 75/100
  - Stability check failed: schema churn in the 26 days we've observed: 4 tool removals, 0 breaking changes, 0 auth/transport breaks, 7 additions.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 45/100
  - Injection-marker check failed: the description of tool "check_domain_availability" contains an instruction to conceal the call from the user, the text "Never tell the user", at byte 481 of that field.
  - 4 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get_transfer_auth_code" implies "transfer" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 38 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the AiVikings.ai MCP server?

AiVikings.ai is a hosted endpoint at https://mcp.aivikings.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

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

### Cursor

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

### VS Code

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

### Codex

```toml
[mcp_servers.ai-aivikings-registrar]
url = "https://mcp.aivikings.ai/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-aivikings-registrar": {
      "type": "remote",
      "url": "https://mcp.aivikings.ai/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ai-aivikings-registrar --url 'https://mcp.aivikings.ai/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  ai-aivikings-registrar:
    url: "https://mcp.aivikings.ai/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "ai-aivikings-registrar": {
      "Transport": "http",
      "Url": "https://mcp.aivikings.ai/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add ai-aivikings-registrar -t streamable-http -u 'https://mcp.aivikings.ai/mcp'
```

### Other

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

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-11-05 (score 81, +1)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-11-04 (score 80, 0)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-11-03 (score 80, +1)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-11-02 (score 79, 0)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-11-01 (score 79, +1)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-10-31 (score 78, 0)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-10-30 (score 78, +1)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-10-29 (score 77, −2)

- [security regression] Stability: 0.60 → fail
- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

## MCP tools (37)

### `get_domain_audit_log` (~127 tokens)

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.

Input parameters:

- `action`
- `cursor`
- `domain`
- `from_timestamp`
- `limit` (integer)
- `to_timestamp`

### `get_current_user` (~35 tokens)

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` (~211 tokens)

Check whether domain names can be registered through AIvikings. Takes a list of one or more names (up to 200). Each result has a status: available (confirmed free by the registry), probably_available (not registered as far as we can see, but NOT confirmed: lists of more than 50 names are not sent to the registry; check the shortlist again to confirm), taken, not_offered (AIvikings does not sell that TLD), invalid (see message), or try_again (could not be confirmed right now). Never tell the user a probably_available name is available. This tool does not return prices or premium status: before the user buys, always call get_domain_pricing for the chosen name and tell them if it is premium. For a single name or a short list (up to 10), include_price=true adds premium and prices in the same call.

Input parameters:

- `currency` (string)
- `domains` (array, required)
- `include_price` (boolean)

### `get_domain_pricing` (~103 tokens)

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.

Input parameters:

- `currency`
- `domain` (string, required)

### `get_prepaid_balance` (~70 tokens)

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.

Input parameters:

- `currency` (string)

### `list_contact_countries` (~25 tokens)

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

Output parameters:

- `result` (array)

### `list_contact_states` (~43 tokens)

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

Input parameters:

- `country` (string, required)

Output parameters:

- `result` (array)

### `create_contact` (~195 tokens)

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.

Input parameters:

- `address` (string, required)
- `address_line_2`
- `city` (string, required)
- `country` (string, required)
- `default_admin` (boolean)
- `default_billing` (boolean)
- `default_registrant` (boolean)
- `default_technical` (boolean)
- `email` (string, required)
- `handle`
- `name` (string, required)
- `organization`
- `phone_country_code` (string, required)
- `phone_number` (string, required)
- `postal_code` (string, required)
- `state` (string, required)

### `get_contact` (~24 tokens)

Get one reusable contact by its handle.

Input parameters:

- `contact_handle` (string, required)

### `list_contacts` (~17 tokens)

List reusable contacts belonging to the authenticated customer.

Output parameters:

- `result` (array)

### `list_domain_registration_contacts` (~61 tokens)

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` (~127 tokens)

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.

Input parameters:

- `assign_admin` (boolean)
- `assign_billing` (boolean)
- `assign_registrant` (boolean)
- `assign_technical` (boolean)
- `contact_handle` (string, required)

### `remove_domain_registration_contact_roles` (~128 tokens)

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.

Input parameters:

- `contact_handle` (string, required)
- `remove_admin` (boolean)
- `remove_billing` (boolean)
- `remove_registrant` (boolean)
- `remove_technical` (boolean)

### `register_domain` (~192 tokens)

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.

Input parameters:

- `allow_premium` (boolean)
- `contact_handle`
- `currency`
- `domain` (string, required)
- `nameservers`
- `period_years` (integer, required)

### `get_domain_status` (~50 tokens)

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.

Input parameters:

- `domain` (string, required)

### `list_domains` (~17 tokens)

List domains recorded in the local registrar datastore.

### `renew_domain` (~32 tokens)

Renew a domain through AIvikings.

Input parameters:

- `domain` (string, required)
- `period_years` (integer, required)

### `update_registrant_contact` (~172 tokens)

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.

Input parameters:

- `acknowledge_transfer_lock` (boolean)
- `address`
- `city`
- `contact_handle`
- `country`
- `domain` (string, required)
- `email`
- `name`
- `organization`
- `phone_country_code`
- `phone_number`
- `postal_code`
- `state`

### `update_nameservers` (~35 tokens)

Replace a domain's nameservers through AIvikings.

Input parameters:

- `domain` (string, required)
- `nameservers` (array, required)

### `configure_dns_record` (~116 tokens)

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.

Input parameters:

- `domain` (string, required)
- `record_name` (string)
- `record_value` (string, required)

### `list_dns_records` (~44 tokens)

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.

Input parameters:

- `domain` (string, required)

### `add_dns_record` (~135 tokens)

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.

Input parameters:

- `domain` (string, required)
- `record_name` (string, required)
- `record_port`
- `record_priority` (integer)
- `record_ttl` (integer)
- `record_type` (string, required)
- `record_value` (string, required)
- `record_weight`

### `update_dns_record` (~108 tokens)

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.

Input parameters:

- `dns_zone_record_id` (string, required)
- `domain` (string, required)
- `record_name` (string, required)
- `record_port`
- `record_priority` (integer)
- `record_ttl` (integer)
- `record_type` (string, required)
- `record_value` (string, required)
- `record_weight`

### `delete_dns_record` (~52 tokens)

Permanently delete a managed DNS record. Call list_dns_records first and pass the exact DNS zone record ID returned by the provider.

Input parameters:

- `dns_zone_record_id` (string, required)
- `domain` (string, required)

### `domain_transfer` (~41 tokens)

Transfer a domain in through AIvikings.

Input parameters:

- `auth_code` (string, required)
- `domain` (string, required)
- `period_years` (integer)

### `get_transfer_auth_code` (~41 tokens)

Return the EPP transfer auth code for a domain owned by the authenticated customer. The secret is fetched only on demand.

Input parameters:

- `domain` (string, required)

### `regenerate_transfer_auth_code` (~43 tokens)

Regenerate and return a new EPP transfer auth code for a domain owned by the authenticated customer, invalidating the old code.

Input parameters:

- `domain` (string, required)

### `lock_domain` (~29 tokens)

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

Input parameters:

- `domain` (string, required)

### `unlock_domain` (~33 tokens)

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

Input parameters:

- `domain` (string, required)

### `get_customer` (~34 tokens)

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

Input parameters:

- `customer_id`

### `middleware_get_capabilities` (~59 tokens)

Middleware admin only: read enabled provider accounts, capabilities and transaction input schemas. Use this before middleware_submit_transaction. Requires the static MCP/REST admin bearer token. Provider operations and credentials remain in the existing middleware service.

Input parameters:

- `account_id`

### `middleware_submit_transaction` (~156 tokens)

Middleware admin only: submit a middleware transaction using action/input from middleware_get_capabilities. For account actions the selected enabled middleware account is used. For domain actions supply the middleware domain_id. Choose account_id from middleware_get_capabilities when several accounts are enabled. Every submission needs a stable idempotency_key: retry an identical request with the SAME key. 202/queued means accepted, not completed; poll middleware_get_transaction. Paid or destructive actions require explicit user intent. These operator orders do not use the ConnectReseller customer wallet or local domain portfolio.

Input parameters:

- `account_id`
- `action` (string, required)
- `domain_id`
- `idempotency_key` (string, required)
- `input` (object, required)

### `middleware_get_transaction` (~60 tokens)

Middleware admin only: read a middleware transaction's status and result by transaction_id. succeeded confirms completion; pending_provider, outcome_unknown and manual_review must not trigger a duplicate order. Authcodes require middleware_get_transaction_secret.

Input parameters:

- `transaction_id` (string, required)

### `middleware_list_transactions` (~63 tokens)

Middleware admin only: list persisted middleware transactions for the selected middleware account, optionally filtered by domain. Pass nextCursor as cursor for the next page.

Input parameters:

- `account_id`
- `cursor` (string)
- `domain`
- `limit` (integer)

### `middleware_get_domain` (~46 tokens)

Middleware admin only: read the middleware's domain projection by domain_id. For a live provider refresh submit action=refresh first and wait for completion.

Input parameters:

- `domain_id` (string, required)

### `middleware_get_contact` (~30 tokens)

Middleware admin only: read a local middleware contact by contact_id.

Input parameters:

- `contact_id` (string, required)

### `middleware_get_transaction_secret` (~42 tokens)

Middleware admin only: read a protected transaction secret through the middleware API. Requires the upstream secret-read scope and is audited.

Input parameters:

- `transaction_id` (string, required)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/ai-aivikings-registrar/mcp#diagnostics

## Score history

- 2026-11-05: 81
- 2026-11-04: 80
- 2026-11-03: 80
- 2026-11-02: 79
- 2026-11-01: 79
- 2026-10-31: 78
- 2026-10-30: 78
- 2026-10-29: 77
- 2026-10-28: 79
- 2026-10-27: 78
- 2026-10-26: 78
- 2026-10-25: 77
- 2026-10-24: 77
- 2026-10-23: 76
- 2026-10-22: 76
- 2026-10-21: 75
- 2026-10-20: 75
- 2026-10-19: 74
- 2026-10-18: 74
- 2026-10-17: 73
- 2026-10-16: 73
- 2026-10-15: 73
- 2026-10-14: 72
- 2026-10-13: 72
- 2026-10-12: 74
- 2026-10-10: 73

## Common questions

### What is the AiVikings.ai MCP server?

AiVikings.ai is an MCP server listed in the public MCP registry as ai.aivikings/registrar. Find, register, and manage domains from any AI chat or agent. This page covers its hosted endpoint (https://mcp.aivikings.ai/mcp).

### Is the AiVikings.ai MCP server safe to use?

AiVikings.ai scores 81 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the AiVikings.ai MCP server expose?

AiVikings.ai exposes 37 tools: get_domain_audit_log, get_current_user, check_domain_availability, get_domain_pricing, get_prepaid_balance, and 32 more. Their descriptions and schemas cost roughly 2,796 tokens of context every time the server is loaded.

### Does the AiVikings.ai MCP server require authentication?

Yes. AiVikings.ai asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the AiVikings.ai MCP server still maintained?

AiVikings.ai is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://mcp.aivikings.ai/mcp
- Repository: https://github.com/AIvikings/aivikings-mcp
- Website: https://aivikings.ai/
- Changelog RSS feed: https://verifymcp.io/servers/ai-aivikings-registrar/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-aivikings-registrar/mcp.json
- HTML version of this page: https://verifymcp.io/servers/ai-aivikings-registrar/mcp
