Spaceship MCP — Tài liệu tham khảo công cụ

Spaceship MCP kết nối trợ lý AI của bạn (chẳng hạn như Claude) với tài khoản Spaceship của bạn. Thông qua đó, trợ lý có thể kiểm tra và đăng ký tên miền, quản lý liên hệ tên miền, đồng thời đọc hoặc chỉnh sửa bản ghi DNS thay mặt bạn — bạn chỉ cần yêu cầu bằng ngôn ngữ thông thường, và trợ lý sẽ gọi đúng công cụ.

Bắt đầu

Bạn cần có tài khoản Spaceship. Spaceship MCP có tại https://mcp.spaceship.com/mcp.

Cách bạn kết nối phụ thuộc vào trợ lý AI của bạn:

  • Claude (web và desktop) — mở Settings, chọn Connectors, tìm Spaceship trong thư mục connectors và thêm nó. Claude của Anthropic hiện là ứng dụng khách mà chúng tôi đã xác minh Spaceship MCP hoạt động cùng.

    NB: Mặc dù việc đăng ký tên miền qua Spaceship MCP nhìn chung được hỗ trợ đầy đủ, khả năng này hiện vẫn chưa khả dụng cụ thể thông qua connector Claude. Tìm kiếm, tra cứu tên miền, quản lý liên hệ và quản lý bản ghi DNS đã khả dụng và được xác minh là hoạt động với Claude ngay hôm nay.

  • Các ứng dụng khách MCP khác — thêm máy chủ MCP từ xa và trỏ nó tới https://mcp.spaceship.com/mcp. Các ứng dụng khách khác có thể hoạt động, nhưng chúng tôi chưa xác minh chúng.

Khi bạn kết nối, bạn sẽ được yêu cầu đăng nhập vào Spaceship và cấp cho trợ lý quyền truy cập vào tài khoản của bạn. Trợ lý có thể sử dụng công cụ nào phụ thuộc vào quyền truy cập bạn phê duyệt — nếu một công cụ bị từ chối vì chưa được cấp quyền truy cập, hãy kết nối lại và phê duyệt quyền mà công cụ đó cần.

Tổng quan công cụ

  • Công cụ: contacts_save

    Chức năng: Lưu chi tiết liên hệ và nhận ID liên hệ

  • Công cụ: contacts_get

    Chức năng: Đọc một liên hệ đã lưu theo ID của liên hệ đó

  • Công cụ: contacts_list

    Chức năng: Liệt kê tất cả liên hệ đã lưu để tìm và dùng lại một liên hệ

  • Công cụ: domains_list

    Chức năng: Liệt kê các tên miền của bạn hoặc tra cứu một tên miền

  • Công cụ: domains_check_availability

    Chức năng: Kiểm tra xem tên miền có sẵn để đăng ký hay không

  • Công cụ: domain_register

    Chức năng: Đăng ký (mua) một tên miền — sẽ tốn tiền

  • Công cụ: domain_set_contacts

    Chức năng: Gán liên hệ cho tên miền bạn sở hữu

  • Công cụ: domain_set_nameservers

    Chức năng: Chuyển một tên miền sang nameserver cơ bản hoặc tùy chỉnh

  • Công cụ: dns_records_get

    Chức năng: Đọc bản ghi DNS cho một tên miền

  • Công cụ: dns_records_save

    Chức năng: Thêm bản ghi DNS hoặc cập nhật TTL của chúng

  • Công cụ: dns_records_delete

    Chức năng: Xóa bản ghi DNS

  • Công cụ: async_operation_get

    Chức năng: Kiểm tra trạng thái của một thao tác chạy lâu

Liên hệ: được tham chiếu bằng id

Bất cứ nơi nào cần liên hệ (domain_register, domain_set_contacts), mỗi vai trò nhận một contactId chuỗi — không bao giờ là chi tiết liên hệ nội tuyến. Hãy lưu liên hệ trước bằng contacts_save (trả về contactId của liên hệ), sau đó truyền id đó ở nơi chấp nhận liên hệ. Không có tính năng tự động lưu nội tuyến; một vai trò không thể nhận một đối tượng liên hệ đầy đủ. Bạn cũng có thể dùng lại một contactId từ kết quả contacts_list hoặc từ kết quả domains_list mà bạn đọc được.

Một contactId là một chuỗi gồm 27–32 ký tự chữ và số. Chỉ cần truyền lại nó ở nơi chấp nhận liên hệ.

Quy trình làm việc phổ biến

Một số công cụ được thiết kế để dùng cùng nhau: đầu ra của công cụ này trở thành đầu vào của công cụ tiếp theo.

Đăng ký (mua) tên miền

  1. contacts_save — lưu các liên hệ người đăng ký, quản trị, kỹ thuật và thanh toán (nếu bạn chưa có id của họ) và giữ lại contactId được trả về cho từng liên hệ. Các liên hệ phải tồn tại trước khi bạn có thể đăng ký.

  2. domains_check_availability — kiểm tra (các) tên bạn muốn. Chỉ tiếp tục khi resultavailable. Mỗi tên khả dụng bao gồm price bằng USD để đăng ký tên đó (cả tiêu chuẩn lẫn cao cấp), hoặc priceUnavailableReason khi không thể xác định, cùng với minRegisterPeriodInYearsmaxRegisterPeriodInYears — thời hạn mà TLD cho phép. Lưu ý price bao gồm price.pricedYears năm, đây là thời hạn ngắn nhất mà TLD cho phép và không phải lúc nào cũng là 1.

  3. domain_register (xem trước) — gọi với confirmationToken chưa được đặt để nhận status: confirmation_required, một confirmationToken mới và price sẽ được tính phí. Không có khoản nào được tính. Văn bản phản hồi của công cụ là một xác nhận đầy đủ — thời hạn, bảng phân tích giá, tự động gia hạn, quyền riêng tư WHOIS, nguồn thanh toán và các liên hệ người đăng ký/quản trị/kỹ thuật/thanh toán — hãy hiển thị nguyên văn cho người dùng. Chọn years trong khoảng từ minRegisterPeriodInYears đến maxRegisterPeriodInYears từ bước 2 — giá trị ngoài phạm vi sẽ bị từ chối ngay. Truyền từng vai trò liên hệ dưới dạng contactId mà bạn đã lưu ở bước 1.

  4. domain_register (chấp nhận/từ chối) — sau khi người dùng đồng ý, hãy gọi lại với chính xác cùng các đối số cộng với confirmationToken đó và confirmationResponse: "accept". Việc này sẽ tính phí vào phương thức thanh toán mặc định của tài khoản và không thể hoàn tác. Công cụ trả về ngay với status: pending và một operationId — việc đăng ký sẽ hoàn tất ở chế độ nền. Để hủy thay thế, hãy gọi lại với cùng confirmationTokenconfirmationResponse: "decline" — sẽ không có khoản nào được tính. Token hết hạn sau một thời gian ngắn và gắn với chính xác các đối số và mức giá mà nó được cấp cho; nếu thiếu, hết hạn hoặc không còn khớp, lệnh gọi sẽ trả về một xác nhận hoàn toàn mới thay vì lỗi — tuyệt đối không tính phí. Nếu không thể xác định giá ở một trong hai lệnh gọi, công cụ sẽ trả về status: price_unavailable thay thế và không có khoản nào được tính.

  5. async_operation_get — truyền operationId từ bước 4 để kiểm tra tiến trình. Lặp lại cho đến khi status trở thành success hoặc failed.

contacts_save ──▶ domains_check_availability ──▶ domain_register ──▶ domain_register ──▶ async_operation_get
(các id contactId) (khả dụng? + giá + (token chưa đặt: (token + (pending →
min/maxRegisterPeriod) xác nhận, accept: operationId, success/failed)
confirmationToken, pending)
không tính phí)

Cập nhật liên hệ trên tên miền bạn sở hữu

  1. domain_set_contacts — gán liên hệ cho tên miền bằng contactId (hãy lưu chúng bằng contacts_save trước nếu cần). Việc này hoàn tất ngay lập tức và trả về verificationStatus: verification nghĩa là người đăng ký phải xác nhận địa chỉ email của họ trước khi thay đổi được áp dụng hoàn toàn (một email sẽ được gửi cho họ), success nghĩa là đã được xác nhận, và null nghĩa là không cần xác nhận cho tên miền đó.

Thay đổi nameserver của tên miền

  1. domains_list — tìm tên miền và xem nameservers hiện tại của nó ({ provider, hosts }).

  2. domain_set_nameservers — chuyển nó sang nameserver mặc định của Spaceship với provider: "basic" (không có hosts), hoặc trỏ nó đến nameserver riêng của bạn với provider: "custom" và danh sách 2–12 hosts. Công cụ trả về { provider, hosts } kết quả, và một lệnh gọi domains_list tiếp theo sẽ phản ánh thay đổi. Việc áp dụng lại trạng thái mà tên miền đã ở sẵn sẽ trả về lỗi xác thực thay vì không làm gì — hãy coi đó là điều được mong đợi, không phải lỗi cần thử lại.

Quản lý bản ghi DNS

  1. domains_list — tìm tên miền bạn muốn quản lý (hoặc truyền trực tiếp tên của nó nếu bạn biết).

  2. dns_records_get — đọc các bản ghi hiện tại của tên miền.

  3. dns_records_save hoặc dns_records_delete — thêm, cập nhật hoặc xóa bản ghi. Các bản ghi được trả về bởi dns_records_get có cùng cấu trúc mà các công cụ lưu và xóa chấp nhận (xóa chỉ bỏ qua ttl), vì vậy trợ lý có thể đọc, điều chỉnh và ghi lại. Việc khớp không phân biệt chữ hoa chữ thường ngoại trừ bản ghi TXT, vốn phân biệt chữ hoa chữ thường.

Xem lại danh mục của bạn

  • domains_list — duyệt qua tất cả tên miền của bạn theo trang với sắp xếp, hoặc lấy một tên miền duy nhất theo tên. Mỗi tên miền bao gồm ngày hết hạn, cài đặt tự động gia hạn, trạng thái, nameserver, bảo vệ quyền riêng tư và các ID liên hệ được gán.

  • contacts_list — duyệt qua tất cả liên hệ đã lưu trên tài khoản của bạn để tìm và dùng lại một liên hệ hiện có (theo ID liên hệ của nó) thay vì tạo bản sao.

  • contacts_get — tra cứu chi tiết đằng sau bất kỳ ID liên hệ nào bạn thấy trên một tên miền hoặc trong kết quả contacts_list.

Tham chiếu công cụ

Mỗi công cụ trả về kết quả dưới dạng JSON có cấu trúc. Các thao tác chạy lâu (hiện tại chỉ có domain_register) trả về tham chiếu thao tác để thăm dò bằng async_operation_get; tất cả công cụ khác hoàn tất ngay lập tức.

Liên hệ

Liên hệ là những người hoặc tổ chức gắn với một đăng ký tên miền (người đăng ký, quản trị, kỹ thuật, thanh toán). Một liên hệ được tham chiếu ở mọi nơi bằng contact ID của nó — một chuỗi không trong suốt.

contacts_save — Lưu liên hệ

Lưu chi tiết liên hệ và trả về ID liên hệ được tạo. Việc xác thực một số trường (chẳng hạn như stateProvincepostalCode) phụ thuộc vào quốc gia được chọn.

  • Tham số: firstName

    Bắt buộc:

    Kiểu & ràng buộc: Chuỗi, 1–64 ký tự. Có thể bao gồm dấu gạch nối và dấu nháy đơn.

  • Tham số: lastName

    Bắt buộc:

    Kiểu & ràng buộc: Chuỗi, 1–64 ký tự. Có thể bao gồm dấu gạch nối và dấu nháy đơn.

  • Tham số: email

    Bắt buộc:

    Kiểu & ràng buộc: Địa chỉ email hợp lệ, tối đa 254 ký tự.

  • Tham số: address1

    Bắt buộc:

    Kiểu & ràng buộc: Dòng địa chỉ 1. Chuỗi, 1–128 ký tự.

  • Tham số: city

    Bắt buộc:

    Kiểu & ràng buộc: Chuỗi, 1–64 ký tự.

  • Tham số: country

    Bắt buộc:

    Kiểu & ràng buộc: Mã quốc gia gồm hai chữ cái (ISO 3166-1 alpha-2), ví dụ: US.

  • Tham số: phone

    Bắt buộc:

    Kiểu & ràng buộc: Định dạng quốc tế +CountryCode.Number, ví dụ: +1.2025551234. Tối đa 32 ký tự.

  • Tham số: organization

    Bắt buộc: Không

    Kiểu & ràng buộc: Tên tổ chức/công ty. 1–128 ký tự.

  • Tham số: address2

    Bắt buộc: Không

    Kiểu & ràng buộc: Dòng địa chỉ 2. 1–128 ký tự.

  • Tham số: stateProvince

    Bắt buộc: Không

    Kiểu & ràng buộc: Tên bang/tỉnh, 1–64 ký tự. Có thể bắt buộc tùy theo quốc gia.

  • Tham số: postalCode

    Bắt buộc: Không

    Kiểu & ràng buộc: 1–16 ký tự. Có thể bắt buộc tùy theo quốc gia.

  • Tham số: phoneExt

    Bắt buộc: Không

    Kiểu & ràng buộc: Số máy lẻ điện thoại, 1–16 ký tự.

  • Tham số: fax

    Bắt buộc: Không

    Loại & ràng buộc: Số fax, cùng định dạng +CountryCode.Number, tối đa 32 ký tự.

  • Tham số: faxExt

    Bắt buộc: Không

    Loại & ràng buộc: Phần mở rộng fax, 1–16 ký tự.

  • Tham số: taxNumber

    Bắt buộc: Không

    Loại & ràng buộc: Mã số thuế, 1–32 ký tự.

Trả về

{ "contactId": "..." }

contactId (27–32 ký tự chữ và số) là giá trị bạn truyền cho domain_register, domain_set_contactscontacts_get.

contacts_get — Lấy liên hệ

Đọc chi tiết của một liên hệ đã lưu theo ID liên hệ của nó. ID liên hệ đến từ contacts_save, contacts_list hoặc trường contacts trong kết quả của domains_list.

  • Tham số: contactId

    Bắt buộc:

    Loại & ràng buộc: ID liên hệ, 27–32 ký tự chữ và số.

Trả về{ contact } với:

  • Trường: firstName, lastName, email, address1, city, country, phone, postalCode

    Loại: Chuỗi

  • Trường: organization, address2, stateProvince, phoneExt, fax, faxExt, taxNumber

    Loại: Chuỗi hoặc null

contacts_list — Liệt kê liên hệ

Liệt kê tất cả liên hệ đã lưu trong tài khoản của bạn, ताकि bạn có thể tìm và dùng lại một liên hệ hiện có (theo ID liên hệ của nó) thay vì tạo bản sao hoặc phải tìm trong các tên miền của mình. Danh sách được phân trang và có thể sắp xếp, nhất quán với domains_list.

  • Tham số: take

    Bắt buộc: Không

    Loại & ràng buộc: Số mục trên mỗi trang, 1–100. Mặc định 10.

  • Tham số: skip

    Bắt buộc: Không

    Loại & ràng buộc: Số mục cần bỏ qua, từ 0 trở lên. Mặc định 0.

  • Tham số: orderBy

    Bắt buộc: Không

    Loại & ràng buộc: Tối đa 8 khóa sắp xếp: name, email, organization; thêm tiền tố - để sắp xếp giảm dần (ví dụ -name).

Trả về{ items, total } trong đó total là số liên hệ duy nhất trong tài khoản (loại trùng theo ID liên hệ, không phải kích thước trang), và mỗi mục chứa đủ thông tin để phân biệt các liên hệ mà không cần gọi tiếp theo. Nếu tài khoản có các mục trùng lặp cho cùng một ID liên hệ, chúng sẽ được gộp thành một, vì vậy total đếm các liên hệ riêng biệt thay vì các hàng thô phía máy chủ:

  • Trường: contactId

    Loại: Chuỗi (27–32 ký tự chữ và số). Truyền cho contacts_get, domain_register hoặc domain_set_contacts.

  • Trường: name

    Loại: Chuỗi — tên của liên hệ.

  • Trường: email

    Loại: Chuỗi hoặc null khi liên hệ không có email trong hồ sơ.

  • Trường: organization

    Loại: Chuỗi hoặc null khi liên hệ không có tổ chức trong hồ sơ.

{
"items": [
{ "contactId": "1anq5bsl9haBy21rOV9aeDWrARBsV", "name": "Ada Lovelace", "email": "ada@example.com", "organization": "Analytical Engines" }
],
"total": 1
}

Tên miền

Các đầu vào tên miền (domain/domainName) chấp nhận Unicode (IDN) hoặc ASCII (A-label) — theo cách nào thì công cụ cũng tự động chuẩn hóa tên sang punycode trước khi sử dụng. domains_check_availabilitydomain_register còn yêu cầu TLD mà Spaceship hỗ trợ đăng ký: tên miền có TLD không được hỗ trợ sẽ được coi là không khả dụng thay vì được kiểm tra hoặc tính phí. Các công cụ tên miền khác (domains_list, domain_set_contacts, domain_set_nameservers) và các công cụ DNS chỉ chuẩn hóa tên và không bao giờ từ chối dựa trên hỗ trợ TLD.

domains_list — Liệt kê tên miền

Truy xuất danh sách tên miền của bạn có phân trang. Truyền domain để thay vào đó lấy một tên miền duy nhất theo tên (khi đó phân trang và sắp xếp sẽ bị bỏ qua, và kết quả sẽ bao gồm một note cho biết điều đó nếu chúng đã được cung cấp).

  • Tham số: domain

    Bắt buộc: Không

    Loại & ràng buộc: Tên miền đầy đủ để lấy một tên miền duy nhất. Chấp nhận Unicode (IDN) hoặc ASCII (A-label) — tự động chuẩn hóa sang punycode.

  • Tham số: take

    Bắt buộc: Không

    Loại & ràng buộc: Số mục trên mỗi trang, 1–100. Mặc định 10.

  • Tham số: skip

    Bắt buộc: Không

    Loại & ràng buộc: Số mục cần bỏ qua, từ 0 trở lên. Mặc định 0.

  • Tham số: orderBy

    Bắt buộc: Không

    Loại & ràng buộc: Tối đa 8 khóa sắp xếp: name, unicodeName, registrationDate, expirationDate; thêm tiền tố - để sắp xếp giảm dần (ví dụ -expirationDate).

Trả về{ items, total } trong đó mỗi mục mô tả một tên miền:

  • Trường: name / unicodeName

    Ý nghĩa: Tên miền ở dạng ASCII và Unicode.

  • Trường: isPremium

    Ý nghĩa: Tên miền có phải là tên premium hay không.

  • Trường: autoRenew

    Ý nghĩa: Tự động gia hạn có được bật hay không.

  • Trường: registrationDate / expirationDate

    Ý nghĩa: Dấu thời gian đăng ký và hết hạn.

  • Trường: lifecycleStatus

    Ý nghĩa: creating, registered, grace1, grace2 hoặc redemption.

  • Trường: verificationStatus

    Ý nghĩa: verification, success, failed hoặc null khi không áp dụng.

  • Trường: eppStatuses

    Ý nghĩa: Mã trạng thái registry (ví dụ: khóa chuyển nhượng).

  • Trường: suspensions

    Ý nghĩa: Các trạng thái tạm ngưng đang hoạt động, mỗi trạng thái có một reasonCode.

  • Trường: privacyProtection

    Ý nghĩa: { level: "public" | "high", contactForm: boolean }.

  • Trường: nameservers

    Ý nghĩa: { provider: "basic" | "custom", hosts: [...] }.

  • Trường: contacts

    Ý nghĩa: ID liên hệ: registrant, cộng với admin/tech/billing (có thể là null) và attributes (danh sách ID liên hệ thuộc tính mở rộng hoặc null). Có thể đọc qua contacts_get.

Spaceship MCP điền mọi trường ở trên — bao gồm contacts, eppStatuses, suspensions, verificationStatus, nameservers, một autoRenew thực, và một unicodeName riêng biệt khi tên miền có trường đó — cho cả danh sách nhiều mục và truy xuất một tên miền.

domains_check_availability — Kiểm tra tính khả dụng của tên miền

Kiểm tra xem một hoặc nhiều tên miền có sẵn để đăng ký hay không. Sử dụng endpoint tên miền đơn cho một tên và endpoint hàng loạt cho nhiều tên. Tên miền có TLD không được hỗ trợ đăng ký sẽ hoàn toàn không được gửi tới bước kiểm tra khả dụng — nó được trả về ngay lập tức là tldNotSupported.

  • Tham số: domains

    Bắt buộc:

    Loại & ràng buộc: 1–20 tên miền đầy đủ. Mỗi tên chấp nhận Unicode (IDN) hoặc ASCII (A-label) — tự động chuẩn hóa sang punycode.

Trả về{ results }, một mục cho mỗi tên được yêu cầu:

  • Trường: domain

    Ý nghĩa: Tên đã được kiểm tra.

  • Trường: result

    Ý nghĩa: available, taken, invalidDomainName, tldNotSupported hoặc unexpectedError.

  • Trường: premiumPricing

    Ý nghĩa: Đối với tên premium: danh sách { operation, price, currency } trong đó operationregister, transfer, renew hoặc restore. Trống đối với tên thông thường.

  • Trường: price

    Ý nghĩa: Đối với các tên available (tiêu chuẩn và premium): giá USD để đăng ký tên miền trong thời hạn ngắn nhất mà TLD cho phép{ amount, currency: "USD", pricedYears?, pricePerYear?, icannFee?, isPremium }. amount là tổng số tiền phải trả cho toàn bộ thời hạn đó; pricedYears cho biết số năm mà giá này bao gồm. Không báo giá trước giảm giá hoặc giá "was". icannFee là phí ICANN (USD) đã được bao gồm trong amount, được trả về riêng để có thể giải thích chi tiết; nó chỉ xuất hiện khi TLD có tính phí.

  • Trường: pricePerYear

    Ý nghĩa: Bên trong price: amount chia cho pricedYears, để luôn có sẵn con số theo năm để so sánh. Khi pricedYears là 1 thì đó là giá thực cho một năm; lớn hơn 1 thì đó là giá trung bình mỗi năm của cả thời hạn, không phải thời hạn mà bạn có thể mua.

  • Trường: minRegisterPeriodInYears / maxRegisterPeriodInYears

    Ý nghĩa: Đối với các tên available: thời hạn đăng ký ngắn nhất và dài nhất mà TLD đó thực sự cho phép, dưới dạng hai số đơn giản. Dùng chúng để chọn years hợp lệ cho domain_register. Cả hai đều bị bỏ qua khi không thể xác định thời hạn được phép.

  • Trường: priceUnavailableReason

    Ý nghĩa: Xuất hiện thay cho price khi không thể xác định giá cho một tên khả dụng. Bản thân việc kiểm tra vẫn thành công.

Chỉ các tên khả dụng mới có giá; kết quả taken/không hợp lệ không có cả price lẫn priceUnavailableReason.

Hầu hết TLD cho phép một năm, nhưng một số thì không..ai, chẳng hạn, có thời hạn tối thiểu là hai năm. Với những trường hợp đó, price.amount là tổng cho thời hạn tối thiểu — không phải giá một năm mà bạn có thể áp dụng — và price.pricedYears cho biết điều đó:

{
"domain": "example.ai",
"result": "available",
"premiumPricing": [],
"price": { "amount": 159.96, "currency": "USD", "pricedYears": 2, "pricePerYear": 79.98, "isPremium": false },
"minRegisterPeriodInYears": 2,
"maxRegisterPeriodInYears": 10
}

pricePerYear có mặt ở đây — 159.96 chia cho hai năm mà nó bao gồm sẽ ra 79.98. Đây là tổng chia cho thời hạn, không phải mức giá bạn có thể trả cho một năm riêng lẻ (không thể mua đăng ký .ai trong một năm). Luôn hiển thị amount cùng với pricedYears ("$159.96 cho 2 năm"), không bao giờ chỉ hiển thị riêng amount. Với TLD thông thường, pricedYears1pricePerYear bằng amount.

domain_register — Đăng ký tên miền

Đăng ký (mua) một tên miền. Thao tác này sẽ tính phí vào phương thức thanh toán mặc định của tài khoản bạn và không thể hoàn tác. Trình tự được khuyến nghị: domains_check_availabilitydomain_register. Tên miền có TLD không được hỗ trợ đăng ký sẽ bị từ chối ngay lập tức — trước mọi bước kiểm tra khả dụng, định giá hoặc tính phí.

years phải nằm trong khoảng được phép riêng của TLD. Giới hạn 110 bên dưới là giới hạn ngoài cùng cho tất cả TLD; mỗi TLD có phạm vi hẹp hơn. .ai cho phép 2–10, .co.io cho phép 1–5, .sg cho phép 1–2, .fr chính xác là 1. Giá trị years nằm ngoài phạm vi đó sẽ bị từ chối với lỗi xác thực nêu rõ phạm vi được phép — trước mọi bước kiểm tra khả dụng, định giá hoặc tính phí — và giá trị này không được âm thầm điều chỉnh cho bạn:

.ai domains cannot be registered for 1 year: this TLD allows 210 years. Call domains_check_availability for this domain to see its allowed registration period.

Trước tiên hãy đọc minRegisterPeriodInYears/maxRegisterPeriodInYears từ domains_check_availability rồi chọn một giá trị years nằm trong khoảng đó. Cùng một bước kiểm tra sẽ được chạy lại ở lệnh xác nhận (confirmationResponse: "accept"), vì vậy không thể bỏ qua bằng cách xác nhận.

Xác nhận hai bước trước khi tính phí. Gọi lần đầu với confirmationToken chưa được đặt: công cụ sẽ định giá lại tên miền mới nhất, tạo xác nhận đầy đủ — thời hạn, bảng phân tích giá (bao gồm mọi phí ICANN và việc tên miền có phải premium hay không), tự động gia hạn, quyền riêng tư WHOIS, nguồn thanh toán và các liên hệ registrant/admin/tech/billing (liên hệ giống hệt registrant sẽ được hiển thị là "same as registrant") — rồi trả về status: "confirmation_required" cùng với price đó và một confirmationToken mới. Không có gì được đăng ký hoặc bị tính phí trong lần gọi này. Xác nhận đầy đủ là văn bản phản hồi của công cụ; hãy hiển thị nguyên trạng cho người dùng. Khi họ đồng ý, hãy gọi lại với chính xác cùng các đối số cộng thêm confirmationToken này và confirmationResponse: "accept" để gửi giao dịch mua, hoặc confirmationResponse: "decline" để hủy — sẽ không có khoản phí nào khi từ chối. Token được gắn với chính xác các đối số này và mức giá đã báo, đồng thời hết hạn sau một thời gian ngắn: token bị thiếu, hết hạn, bị sửa đổi hoặc không còn khớp trong lệnh xác nhận sẽ chỉ đơn giản trả về một xác nhận hoàn toàn mới với token mới — không bao giờ là lỗi, không bao giờ bị tính phí. Nếu không thể xác định giá ở bất kỳ lần gọi nào, công cụ sẽ trả về status: "price_unavailable" thay vì token và không bao giờ tính phí; hãy thử lại sau. Lệnh đã xác nhận sẽ trả về ngay lập tức với status: "pending" và một operationId — việc đăng ký sẽ hoàn tất ở nền; kiểm tra bằng async_operation_get.

  • Tham số: domain

    Bắt buộc:

    Loại & ràng buộc: Tên miền đầy đủ để đăng ký, ví dụ example.com. Chấp nhận Unicode (IDN) hoặc ASCII (A-label) — tự động chuẩn hóa sang punycode.

  • Tham số: years

    Bắt buộc:

    Loại & ràng buộc: Thời hạn đăng ký tính theo năm. 110 là giới hạn ngoài cùng; phạm vi được chấp nhận là phạm vi riêng của TLD — xem minRegisterPeriodInYears/maxRegisterPeriodInYears từ domains_check_availability. Các giá trị ngoài phạm vi sẽ bị từ chối, không được điều chỉnh.

  • Tham số: autoRenew

    Bắt buộc:

    Loại & ràng buộc: Boolean. Khi true, tên miền sẽ tự động gia hạn khi hết hạn bằng phương thức thanh toán mặc định của tài khoản.

  • Tham số: privacy.level

    Bắt buộc:

    Loại & ràng buộc: high ẩn thông tin liên hệ của registrant khỏi WHOIS công khai; public sẽ công bố chúng.

  • Tham số: privacy.userConsent

    Bắt buộc:

    Loại & ràng buộc: Boolean. Phải xác nhận rằng bạn đồng ý với cài đặt quyền riêng tư đã chọn.

  • Tham số: contacts.registrant

    Bắt buộc:

    Loại & ràng buộc: contactId dạng chuỗi (27–32 ký tự chữ và số), từ contacts_save.

  • Tham số: contacts.admin

    Bắt buộc:

    Loại & ràng buộc: contactId dạng chuỗi (27–32 ký tự chữ và số), từ contacts_save.

  • Tham số: contacts.tech

    Bắt buộc:

    Loại & ràng buộc: contactId chuỗi (27–32 ký tự chữ và số), từ contacts_save.

  • Tham số: contacts.billing

    Bắt buộc:

    Loại & ràng buộc: contactId chuỗi (27–32 ký tự chữ và số), từ contacts_save.

  • Tham số: contacts.attributes

    Bắt buộc: Không

    Loại & ràng buộc: Mảng ID liên hệ thuộc tính mở rộng (tối đa 5); chỉ bắt buộc với một số TLD nhất định, nếu không thì bỏ qua hoặc dùng null.

  • Tham số: confirmationToken

    Bắt buộc: Không

    Loại & ràng buộc: Chuỗi, tối đa 4096 ký tự. Mã token do máy chủ cấp, được trả về từ một lệnh gọi domain_register trước đó cho chính xác các đối số này. Bỏ qua ở lệnh gọi đầu tiên cho một lần thử đăng ký mới. Hết hạn sau một thời gian ngắn và gắn với chính xác các đối số và mức giá mà nó được cấp cho — gửi lại nguyên trạng, cùng với confirmationResponse, để xử lý nó.

  • Tham số: confirmationResponse

    Bắt buộc: Có điều kiện

    Loại & ràng buộc: "accept" hoặc "decline". Chỉ có ý nghĩa khi đi cùng một confirmationToken hợp lệ. "accept" gửi đăng ký (có tính phí) được hiển thị trong xác nhận đó; "decline" hủy mà không tính phí. Bỏ qua ở lệnh gọi đầu tiên.

Trả về — sau lệnh gọi đầu tiên (chưa tính phí):

{
"domain": "example.com",
"years": 1,
"status": "confirmation_required",
"price": {
"amount": 9.08,
"currency": "USD",
"pricedYears": 1,
"pricePerYear": 9.08,
"icannFee": 0.2,
"isPremium": false
},
"confirmationToken": "v1.eyJ2IjoxLCJwIjoi...aWQiOjF9.9F3q7z_5c8Vb...",
"note": "Nothing has been charged yet. Show the confirmation to the user and, once they agree, call domain_register again with this confirmationToken and confirmationResponse=\"accept\" to complete the purchase, or confirmationResponse=\"decline\" to cancel."
}

Cùng với JSON này, văn bản phản hồi của công cụ là toàn bộ nội dung xác nhận để hiển thị cho người dùng — nội dung này nhắc lại tên miền, thời hạn và giá ở trên, cộng với các dòng cho Auto-renew: on/off, WHOIS privacy: on/off, Payment source: Spaceship account funds, và từng liên hệ registrant/admin/tech/billing (tên, email, quốc gia — một liên hệ trùng với registrant sẽ hiển thị là "same as registrant"), sau đó là hướng dẫn cho lệnh gọi tiếp theo. Với thời hạn nhiều năm, price.amount là tổng cho toàn bộ thời hạn và price.pricePerYear là tổng đó chia cho thời hạn — ví dụ: years: 5 trên .com trả về { "amount": 48.52, "pricedYears": 5, "pricePerYear": 9.70 }, và example.ai với years: 2 trả về { "amount": 159.96, "pricedYears": 2, "pricePerYear": 79.98 }.

Trả về — sau confirmationResponse: "accept" (đã gửi đăng ký):

{
"domain": "example.com",
"years": 1,
"status": "pending",
"operationId": "...",
"price": {
"amount": 9.08,
"currency": "USD",
"pricedYears": 1,
"pricePerYear": 9.08,
"icannFee": 0.2,
"isPremium": false
},
"note": "Registration of example.com submitted. Ask again, or call async_operation_get with this operationId, to check status."
}

Trả về — sau confirmationResponse: "decline" (chưa tính phí):

{
"domain": "example.com",
"years": 1,
"status": "cancelled",
"price": { "amount": 9.08, "currency": "USD", "pricedYears": 1, "pricePerYear": 9.08, "icannFee": 0.2, "isPremium": false },
"note": "Registration of example.com was not submitted because the purchase was not confirmed."
}

Trả về — nếu không thể xác định giá, ở một trong hai lệnh gọi:

{
"domain": "example.com",
"years": 1,
"status": "price_unavailable",
"priceUnavailableReason": "Price is currently unavailable for this domain.",
"note": "Registration of example.com could not be priced right now, so nothing was confirmed or charged. Try again shortly."
}

status có thể là:

  • Trạng thái: confirmation_required

    Ý nghĩa: Xem trước — chưa tính phí. Hiển thị văn bản phản hồi cho người dùng, sau đó gọi lại với confirmationTokenconfirmationResponse này. Cũng được trả về, với một token mới, khi confirmationToken đã gửi bị thiếu, hết hạn, bị can thiệp hoặc không còn khớp với đối số/giá hiện tại — không bao giờ là lỗi.

  • Trạng thái: cancelled

    Ý nghĩa: Giao dịch mua đã bị từ chối (confirmationResponse: "decline"), nên không có gì được gửi đi.

  • Trạng thái: pending

    Ý nghĩa: Đã gửi; cơ quan đăng ký đang hoàn tất ở chế độ nền. Thăm dò async_operation_get với operationId.

  • Trạng thái: price_unavailable

    Ý nghĩa: Không thể xác định giá, nên không có token nào được cấp và không có khoản nào bị tính phí. Hãy thử lại sau.

operationId là một chuỗi phẳng — truyền nó cho async_operation_get, công cụ này sẽ báo liệu việc đăng ký cuối cùng thành công hay thất bại. price hiển thị tại confirmation_required chính xác là số tiền sẽ được tính khi confirmationResponse: "accept"price.amount là tổng cho toàn bộ thời hạn đó và price.pricedYears cho biết thời hạn, vì vậy luôn hiển thị cả hai cùng nhau. Khi TLD có phí ICANN, price.amount đã bao gồm phí đó và price.icannFee cho biết số tiền phí để có thể giải thích.

domain_set_contacts — Đặt liên hệ tên miền

Thay đổi các liên hệ được gán cho tên miền bạn sở hữu. Hoàn tất ngay lập tức (không có thao tác nào để thăm dò).

  • Tham số: domainName

    Bắt buộc:

    Loại & ràng buộc: Tên miền đủ điều kiện đầy đủ. Chấp nhận Unicode (IDN) hoặc ASCII (A-label) — tự động chuẩn hóa sang punycode.

  • Tham số: registrant

    Bắt buộc:

    Loại & ràng buộc: contactId chuỗi (27–32 ký tự chữ và số), từ contacts_save.

  • Tham số: admin

    Bắt buộc: Không

    Loại & ràng buộc: contactId chuỗi (27–32 ký tự chữ và số) hoặc null.

  • Tham số: tech

    Bắt buộc: Không

    Loại & ràng buộc: contactId chuỗi (27–32 ký tự chữ và số) hoặc null.

  • Tham số: billing

    Bắt buộc: Không

    Loại & ràng buộc: contactId chuỗi (27–32 ký tự chữ và số) hoặc null.

  • Tham số: attributes

    Bắt buộc: Không

    Loại & ràng buộc: Mảng ID liên hệ thuộc tính mở rộng (tối đa 5); chỉ bắt buộc với một số TLD nhất định, nếu không thì bỏ qua hoặc dùng null.

Trả về

{ "verificationStatus": "verification" }

Giá trị verificationStatus được trả về phản ánh việc xác minh email theo ICANN RAA: verification — registrant phải xác nhận địa chỉ email của họ (một email xác nhận sẽ được gửi); success — đã xác nhận; null — xác minh RAA không áp dụng cho tên miền này.

domain_set_nameservers — Đặt máy chủ tên miền

Thay đổi nameserver ở cấp registrar của một tên miền. Hoàn tất ngay lập tức (không có thao tác nào để thăm dò). Thay đổi này sẽ được phản ánh bởi domains_list sau đó.

  • Tham số: domainName

    Bắt buộc:

    Loại & ràng buộc: Tên miền đủ điều kiện đầy đủ. Chấp nhận Unicode (IDN) hoặc ASCII (A-label) — tự động chuẩn hóa sang punycode.

  • Tham số: provider

    Bắt buộc:

    Loại & ràng buộc: basic (nameserver mặc định của Spaceship) hoặc custom (máy chủ của riêng bạn).

  • Tham số: hosts

    Bắt buộc: Có điều kiện

    Loại & ràng buộc: Bắt buộc khi providercustom: 2–12 hostname nameserver (mỗi hostname là một FQDN hợp lệ, 4–255 ký tự). Phải bỏ qua khi providerbasic.

Trả về

{ "provider": "custom", "hosts": ["ns1.example.com", "ns2.example.com"] }

Áp dụng lại trạng thái mà tên miền đã ở sẵn (ví dụ: đặt basic khi nó đã là basic) sẽ trả về lỗi xác thực thay vì thành công không thay đổi gì — hãy coi đó là kết quả dự kiến, không phải lỗi cần thử lại.

Bản ghi DNS

Giá trị domainName mà các công cụ này nhận vào chấp nhận Unicode (IDN) hoặc ASCII (A-label) và được tự động chuẩn hóa sang punycode; hỗ trợ TLD không được thực thi ở đây.

dns_records_get — Lấy bản ghi DNS

Truy xuất danh sách phân trang các bản ghi tài nguyên DNS cho một tên miền.

  • Tham số: domainName

    Bắt buộc:

    Loại & ràng buộc: Tên miền có các bản ghi cần lấy.

  • Tham số: take

    Bắt buộc: Không

    Loại & ràng buộc: Số mục trên mỗi trang, 1–500. Mặc định là 100.

  • Tham số: skip

    Bắt buộc: Không

    Loại & ràng buộc: Số mục cần bỏ qua, từ 0 trở lên. Mặc định là 0.

  • Tham số: orderBy

    Bắt buộc: Không

    Loại & ràng buộc: Tối đa 8 khóa sắp xếp: type, -type, name, -name.

Trả về{ items, total }. Mỗi mục là một bản ghi như được mô tả trong Hình dạng bản ghi, cộng với trường group tùy chọn cho biết bản ghi đến từ đâu (custom — do bạn tạo, product — được quản lý bởi một sản phẩm Spaceship, personalNs — nameserver cá nhân).

dns_records_save — Lưu bản ghi DNS

Thêm bản ghi DNS tùy chỉnh hoặc cập nhật TTL của các bản ghi hiện có. Các bản ghi được đối sánh không phân biệt chữ hoa chữ thường, ngoại trừ bản ghi TXT (phân biệt chữ hoa chữ thường).

  • Tham số: domainName

    Bắt buộc:

    Loại & ràng buộc: Tên miền có các bản ghi cần cập nhật.

  • Tham số: records

    Bắt buộc:

    Loại & ràng buộc: 1–500 bản ghi — xem Hình dạng bản ghi. Mỗi bản ghi có thể bao gồm ttl tùy chọn.

  • Tham số: force

    Bắt buộc: Không

    Loại & ràng buộc: Boolean. Bỏ qua bước kiểm tra giải quyết xung đột và buộc cập nhật zone.

Trả về{ "saved": <number> }, số lượng bản ghi đã gửi. Phản hồi thành công nghĩa là tất cả bản ghi đã được chấp nhận; nếu bất kỳ bản ghi nào thất bại, toàn bộ lệnh gọi sẽ trả về lỗi thay vì thành công.

dns_records_delete — Xóa bản ghi DNS

Xóa các bản ghi DNS tùy chỉnh. Không thể hoàn tác việc xóa. Các bản ghi được đối sánh không phân biệt chữ hoa chữ thường, ngoại trừ bản ghi TXT (phân biệt chữ hoa chữ thường).

  • Tham số: domainName

    Bắt buộc:

    Loại & ràng buộc: Tên miền có các bản ghi cần xóa.

  • Tham số: records

    Bắt buộc:

    Loại & ràng buộc: 1–500 bản ghi xác định các bản ghi hiện có — cùng hình dạng như khi lưu, nhưng không có ttl.

Trả về{ "deleted": <number> }, số lượng bản ghi đã gửi. Nếu bất kỳ bản ghi nào không thể đối sánh, toàn bộ lệnh gọi sẽ thất bại và không có gì bị xóa.

Hình dạng bản ghi

Mỗi bản ghi có:

  • type — một trong 13 loại được hỗ trợ bên dưới.

  • name — tên bản ghi không bao gồm tên miền: dùng @ cho chính tên miền đó (apex) và * cho ký tự đại diện.

  • ttl (chỉ khi lưu, tùy chọn) — thời gian lưu đệm tính bằng giây, 60–3600.

Các trường theo từng loại:

  • Loại: A

    Trường: address — địa chỉ IPv4.

  • Loại: AAAA

    Trường: address — địa chỉ IPv6.

  • Loại: CNAME

    Trường: cname — tên miền chuẩn tắc (tối đa 253 ký tự).

  • Loại: ALIAS

    Trường: aliasName — tên miền chuẩn tắc; hành vi giống CNAME cho apex, nơi CNAME không được phép.

  • Loại: NS

    Trường: nameserver — tên nameserver.

  • Loại: PTR

    Trường: pointer — tên miền cho địa chỉ IP đã cho.

  • Loại: TXT

    Trường: value — giá trị văn bản (đối sánh phân biệt chữ hoa chữ thường).

  • Loại: MX

    Trường: exchange — máy chủ thư; preference — độ ưu tiên (0–65535, số thấp được ưu tiên hơn).

  • Loại: CAA

    Trường: flag0 hoặc 128 (bit quan trọng); tagissue, issuewild, hoặc iodef; value — mã định danh CA với các tham số tùy chọn.

  • Loại: SRV

    Trường: service (ví dụ: _sip); protocol (ví dụ: _tcp); priorityweight (0–65535); port (1–65535); target — tên miền máy chủ.

  • Loại: TLSA

    Trường: usage, selector, matching (mỗi trường 0–255); port* hoặc _<165535>; protocol (ví dụ: _tcp); associationData — hàm băm chứng chỉ hoặc dữ liệu.

  • Loại: HTTPS

    Trường: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN hoặc .; tùy chọn port (* hoặc _<165535>), scheme (phải là _https khi port được đặt), svcParams.

  • Loại: SVCB

    Trường: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN hoặc .; tùy chọn port, scheme (ví dụ: _tcp), svcParams.

Các thao tác bất đồng bộ

async_operation_get — Lấy trạng thái thao tác bất đồng bộ

Kiểm tra một thao tác chạy lâu được khởi động bởi công cụ khác (hiện tại là domain_register). Gọi công cụ này với operationId được đặt thành operationId mà công cụ đó đã trả về, và lặp lại cho đến khi statussuccess hoặc failed.

  • Tham số: operationId

    Bắt buộc:

    Kiểu & ràng buộc: Chuỗi chữ và số, tối đa 36 ký tự, được trả về bởi công cụ đã khởi động thao tác.

Trả về

  • Trường: operationId

    Ý nghĩa: Thao tác đang được thăm dò.

  • Trường: status

    Ý nghĩa: pending, success, hoặc failed.

  • Trường: type

    Ý nghĩa: Loại thao tác, hoặc null.

  • Trường: details

    Ý nghĩa: Chi tiết bổ sung về thao tác, hoặc null.

  • Trường: createdAt / modifiedAt

    Ý nghĩa: Thời điểm thao tác được tạo / cập nhật lần cuối (modifiedAt có thể là null).

Lỗi

Khi một lệnh gọi thất bại, công cụ trả về lỗi với mã và detail dễ hiểu cho con người giải thích điều gì đã xảy ra lỗi — ví dụ như đầu vào không hợp lệ (tên miền hoặc ID liên hệ sai định dạng), tên miền hoặc liên hệ không tồn tại, hoặc xung đột với trạng thái hiện tại. Nếu một công cụ bị từ chối vì trợ lý chưa được cấp quyền truy cập vào công cụ đó, hãy kết nối lại Spaceship MCP và phê duyệt quyền truy cập mà nó yêu cầu.

Cần có địa chỉ email hợp lệ