Skip to content

AiVikings.ai

by aivikings.ai · remote · no sign-in to list tools · v1.0.2 · published by ai.aivikings

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

Deletes · 9Final · 1Changes · 92 high findings

34 tools: 9 can delete or cancel things, 1 do something that can't be undone, 9 change things and 15 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

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

Findings

Matches of fixed checks, with the text they matched.

2 high
  • The description contains "Never tell the user", an instruction to keep something from the user.

    Matched text

    description: "...supported_tld, or unknown (see reason). Never tell the user a likely_available name is available or..."

    What this check looks for
  • The description contains "Never tell the user", an instruction to keep something from the user.

    Matched text

    description: "...supported_tld, or unknown (see reason). Never tell the user a likely_available name is available or..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

34 tools

Deletes or cancels 9Claude Code: deny
  • configure_dns_recordConfigure an A record for a domain through AIvikings.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • delete_dns_recordPermanently delete a managed DNS record.No findings

    Why it is in this group

    • The name "delete_dns_record" says "delete": a word for removing or ending something.
    • The description says "Permanently delete".
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Permanently delete a managed DNS record. Call list_dns_records first and pass the exact DNS zone record ID returned by the provider.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • lock_domainEnable the registrar transfer lock for a domain owned by the authenticated customer.No findings

    Why it is in this group

    • The name "lock_domain" says "lock": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Enable the registrar transfer lock for a domain owned by the authenticated customer.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • regenerate_transfer_auth_codeRegenerate and return a new EPP transfer auth code for a domain owned by the authenticated customer, invalidating the old code.No findings

    Why it is in this group

    • The name "regenerate_transfer_auth_code" says "transfer": a word for a change that another call does not undo.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Regenerate and return a new EPP transfer auth code for a domain owned by the authenticated customer, invalidating the old code.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • remove_domain_registration_contact_rolesRemove selected default domain-registration roles from one existing contact handle.No findings

    Why it is in this group

    • The name "remove_domain_registration_contact_roles" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • unlock_domainDisable the registrar transfer lock for a domain owned by the authenticated customer before a transfer-out.No findings

    Why it is in this group

    • The name "unlock_domain" says "unlock": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Disable the registrar transfer lock for a domain owned by the authenticated customer before a transfer-out.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • update_dns_recordReplace an existing managed DNS record.No findings

    Why it is in this group

    • The name "update_dns_record" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • update_nameserversReplace a domain's nameservers through AIvikings.No findings

    Why it is in this group

    • The name "update_nameservers" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Replace a domain's nameservers through AIvikings.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • update_registrant_contactUpdate the registrant contact for a domain owned by the authenticated customer.No findings

    Why it is in this group

    • The name "update_registrant_contact" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
Can't be undone 1Claude Code: ask
  • domain_transferTransfer a domain in through AIvikings.No findings

    Why it is in this group

    • The name "domain_transfer" says "transfer": a word for a change that another call does not undo.
    Description, as the server wrote it
    Transfer a domain in through AIvikings.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Changes things 9Claude Code: ask
  • add_dns_recordAdd a managed DNS record to a domain owned by the authenticated customer.No findings

    Why it is in this group

    • The name "add_dns_record" says "add": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • assign_domain_registration_contact_rolesAssign one existing contact handle as the default for selected domain-registration roles.No findings

    Why it is in this group

    • The name "assign_domain_registration_contact_roles" says "assign": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • check_domain_availabilityCheck availability for up to 200 domain names through AIvikings.1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • High

      The description contains "Never tell the user", an instruction to keep something from the user.

      Matched text

      description: "...supported_tld, or unknown (see reason). Never tell the user a likely_available name is available or..."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • check_single_domain_availabilityCheck availability for one domain through AIvikings.1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • High

      The description contains "Never tell the user", an instruction to keep something from the user.

      Matched text

      description: "...supported_tld, or unknown (see reason). Never tell the user a likely_available name is available or..."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • create_contactCreate a reusable contact for domain registration.No findings

    Why it is in this group

    • The name "create_contact" says "create": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_customerCreate a new customer without generating or returning an API key.No findings

    Why it is in this group

    • The name "create_customer" says "create": a word for a change.
    Description, as the server wrote it
    Create a new customer without generating or returning an API key.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • reconcile_provider_clientLink or create the authenticated customer's registrar client account, preventing duplicate creation.No findings

    Why it is in this group

    • The description's first verb is "link": a word for a change.
    Description, as the server wrote it
    Link or create the authenticated customer's registrar client account, preventing duplicate creation.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • register_domainRegister a domain through AIvikings using the authenticated account's configurable default nameservers when nameservers are omitted.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • renew_domainRenew a domain through AIvikings.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Renew a domain through AIvikings.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Only reads 15Claude Code: allow
  • get_contactGet one reusable contact by its handle.No findings

    Why it is in this group

    • The name "get_contact" says "get": a word for reading.
    Description, as the server wrote it
    Get one reusable contact by its handle.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_current_userReturn the authenticated AIvikings customer for the current bearer API key, including name and email when the key belongs to a customer.No findings

    Why it is in this group

    • The name "get_current_user" says "get": a word for reading.
    Description, as the server wrote it
    Return the authenticated AIvikings customer for the current bearer API key, including name and email when the key belongs to a customer.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_customerGet the customer record linked to the current bearer token.No findings

    Why it is in this group

    • The name "get_customer" says "get": a word for reading.
    Description, as the server wrote it
    Get the customer record linked to the current bearer token. A supplied customer ID must match that token.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_domain_audit_logRead append-only domain change history for the authenticated customer.No findings

    Why it is in this group

    • The name "get_domain_audit_log" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_domain_pricingGet a fresh price quote for one domain.No findings

    Why it is in this group

    • The name "get_domain_pricing" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • get_domain_statusFetch the latest domain status, expiry and nameservers from the registrar and refresh the saved AIvikings record.No findings

    Why it is in this group

    • The name "get_domain_status" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • get_prepaid_balanceReturn the authenticated customer's prepaid balance for domain purchases.No findings

    Why it is in this group

    • The name "get_prepaid_balance" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_transfer_auth_codeReturn the EPP transfer auth code for a domain owned by the authenticated customer.No findings

    Why it is in this group

    • The name "get_transfer_auth_code" says "get": a word for reading.
    Description, as the server wrote it
    Return the EPP transfer auth code for a domain owned by the authenticated customer. The secret is fetched only on demand.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_contact_countriesList exact ConnectReseller country names and IDs for creating or updating contacts.No findings

    Why it is in this group

    • The name "list_contact_countries" says "list": a word for reading.
    Description, as the server wrote it
    List exact ConnectReseller country names and IDs for creating or updating contacts.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_contact_statesList exact ConnectReseller state names for a country name, country ID, or ISO code.No findings

    Why it is in this group

    • The name "list_contact_states" says "list": a word for reading.
    Description, as the server wrote it
    List exact ConnectReseller state names for a country name, country ID, or ISO code. Use the returned name in contact requests.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_contactsList reusable contacts belonging to the authenticated customer.No findings

    Why it is in this group

    • The name "list_contacts" says "list": a word for reading.
    Description, as the server wrote it
    List reusable contacts belonging to the authenticated customer.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_dns_recordsList the managed DNS records for a domain owned by the authenticated customer.No findings

    Why it is in this group

    • The name "list_dns_records" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • list_domain_registration_contactsList the authenticated customer's registrant/contact handles for domain registrations.No findings

    Why it is in this group

    • The name "list_domain_registration_contacts" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_domainsList domains recorded in the local registrar datastore.No findings

    Why it is in this group

    • The name "list_domains" says "list": a word for reading.
    Description, as the server wrote it
    List domains recorded in the local registrar datastore.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • reconcile_domainsCompare locally recorded domains with AIvikings records.No findings

    Why it is in this group

    • The description's first verb is "compare": a word for reading.
    Description, as the server wrote it
    Compare locally recorded domains with AIvikings records.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.2. Values in angle brackets are yours to fill in.

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

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__registrar__get_domain_audit_log",
      "mcp__registrar__get_current_user",
      "mcp__registrar__get_domain_pricing",
      "mcp__registrar__get_prepaid_balance",
      "mcp__registrar__list_contact_countries",
      "mcp__registrar__list_contact_states",
      "mcp__registrar__get_contact",
      "mcp__registrar__list_contacts",
      "mcp__registrar__list_domain_registration_contacts",
      "mcp__registrar__get_domain_status",
      "mcp__registrar__list_domains",
      "mcp__registrar__list_dns_records",
      "mcp__registrar__get_transfer_auth_code",
      "mcp__registrar__reconcile_domains",
      "mcp__registrar__get_customer"
    ],
    "ask": [
      "mcp__registrar__check_domain_availability",
      "mcp__registrar__check_single_domain_availability",
      "mcp__registrar__create_contact",
      "mcp__registrar__assign_domain_registration_contact_roles",
      "mcp__registrar__register_domain",
      "mcp__registrar__renew_domain",
      "mcp__registrar__add_dns_record",
      "mcp__registrar__domain_transfer",
      "mcp__registrar__create_customer",
      "mcp__registrar__reconcile_provider_client"
    ],
    "deny": [
      "mcp__registrar__remove_domain_registration_contact_roles",
      "mcp__registrar__update_registrant_contact",
      "mcp__registrar__update_nameservers",
      "mcp__registrar__configure_dns_record",
      "mcp__registrar__update_dns_record",
      "mcp__registrar__delete_dns_record",
      "mcp__registrar__regenerate_transfer_auth_code",
      "mcp__registrar__lock_domain",
      "mcp__registrar__unlock_domain"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as registrar. Review it before you use it.