Spaceship MCP — Referensi Alat

Spaceship MCP menghubungkan asisten AI Anda (seperti Claude) ke akun Spaceship Anda. Melaluinya, asisten dapat memeriksa dan mendaftarkan domain, mengelola kontak domain, serta membaca atau mengedit catatan DNS atas nama Anda — Anda cukup meminta dalam bahasa biasa, dan asisten akan memanggil alat yang tepat.

Memulai

Anda memerlukan akun Spaceship. Spaceship MCP tersedia di https://mcp.spaceship.com/mcp.

Cara Anda terhubung bergantung pada AI assistant Anda:

  • Claude (web dan desktop) — buka Settings, pilih Connectors, temukan Spaceship di direktori connector, lalu tambahkan. Claude dari Anthropic saat ini adalah klien yang telah kami verifikasi berfungsi dengan Spaceship MCP.

    NB: Meskipun pendaftaran domain melalui Spaceship MCP secara keseluruhan didukung penuh, kemampuan ini belum tersedia melalui connector Claude secara khusus. Pencarian, pencarian domain, pengelolaan kontak, dan pengelolaan catatan DNS sudah tersedia dan terverifikasi berfungsi dengan Claude saat ini.

  • Klien MCP lainnya — tambahkan server MCP jarak jauh dan arahkan ke https://mcp.spaceship.com/mcp. Klien lain mungkin berfungsi, tetapi kami belum memverifikasinya.

Saat Anda terhubung, Anda akan diminta untuk masuk ke Spaceship dan memberi asisten akses ke akun Anda. Alat mana yang dapat digunakan asisten bergantung pada akses yang Anda setujui — jika alat ditolak karena akses tidak diberikan, sambungkan kembali dan setujui akses yang dibutuhkannya.

Sekilas tentang alat

  • Alat: contacts_save

    Fungsinya: Simpan detail kontak dan dapatkan ID kontak

  • Alat: contacts_get

    Fungsinya: Membaca kontak yang disimpan berdasarkan ID-nya

  • Alat: contacts_list

    Fungsinya: Cantumkan semua kontak yang disimpan untuk menemukan dan menggunakan kembali salah satunya

  • Alat: domains_list

    Fungsinya: Cantumkan domain Anda, atau cari satu domain

  • Alat: domains_check_availability

    Fungsinya: Periksa apakah domain tersedia untuk didaftarkan

  • Alat: domain_register

    Fungsinya: Mendaftarkan (membeli) domain — menghabiskan uang

  • Alat: domain_set_contacts

    Fungsinya: Tetapkan kontak ke domain yang Anda miliki

  • Alat: domain_set_nameservers

    Fungsinya: Alihkan domain ke nameserver basic atau custom

  • Alat: dns_records_get

    Fungsinya: Membaca catatan DNS untuk domain

  • Alat: dns_records_save

    Fungsinya: Menambahkan catatan DNS atau memperbarui TTL-nya

  • Alat: dns_records_delete

    Fungsinya: Menghapus catatan DNS

  • Alat: async_operation_get

    Fungsinya: Memeriksa status operasi yang berjalan lama

Kontak: direferensikan berdasarkan id

Di mana pun kontak diwajibkan (domain_register, domain_set_contacts), setiap peran menerima contactId string — jangan pernah detail kontak inline. Simpan kontak terlebih dahulu dengan contacts_save (yang mengembalikan contactId-nya), lalu teruskan id tersebut di tempat kontak diterima. Tidak ada penyimpanan otomatis inline; sebuah peran tidak dapat menerima objek kontak lengkap. Anda juga dapat menggunakan kembali contactId dari hasil contacts_list atau yang Anda baca dari hasil domains_list.

contactId adalah string berisi 27–32 karakter alfanumerik. Cukup teruskan kembali di tempat kontak diterima.

Alur kerja umum

Beberapa alat dirancang untuk digunakan bersama: output dari satu alat menjadi input untuk alat berikutnya.

Daftarkan (beli) domain

  1. contacts_save — simpan kontak registran, admin, teknis, dan penagihan (jika Anda belum memiliki ID mereka) dan simpan contactId yang dikembalikan untuk masing-masing. Kontak harus sudah ada sebelum Anda dapat mendaftar.

  2. domains_check_availability — periksa nama yang Anda inginkan. Lanjutkan hanya saat result adalah available. Setiap nama yang tersedia mencakup price dalam USD untuk mendaftarkannya (baik standar maupun premium), atau priceUnavailableReason saat hal itu tidak dapat ditentukan, ditambah minRegisterPeriodInYears dan maxRegisterPeriodInYears — masa berlaku yang diizinkan TLD. Perhatikan bahwa price mencakup price.pricedYears tahun, yang merupakan masa berlaku terpendek yang diizinkan TLD dan tidak selalu 1.

  3. domain_register (pratinjau) — panggil dengan confirmationToken tidak diatur untuk mendapatkan status: confirmation_required, confirmationToken baru, dan price yang akan ditagihkan. Tidak ada biaya yang dibebankan. Teks respons alat adalah konfirmasi lengkap — masa berlaku, rincian harga, perpanjangan otomatis, privasi WHOIS, sumber pembayaran, dan kontak registran/admin/teknis/penagihan — tampilkan kepada pengguna apa adanya. Pilih years antara minRegisterPeriodInYears dan maxRegisterPeriodInYears dari langkah 2 — nilai di luar rentang akan langsung ditolak. Berikan setiap peran kontak sebagai contactId yang Anda simpan di langkah 1.

  4. domain_register (terima/tolak) — setelah pengguna setuju, panggil lagi dengan argumen yang persis sama ditambah confirmationToken tersebut dan confirmationResponse: "accept". Ini menagih metode pembayaran default akun dan tidak dapat dibatalkan. Ini segera mengembalikan status: pending dan operationId — pendaftaran selesai di latar belakang. Untuk membatalkan, panggil lagi dengan confirmationToken yang sama dan confirmationResponse: "decline" — tidak ada biaya yang dibebankan. Token kedaluwarsa setelah waktu singkat dan terikat pada argumen serta harga persis saat token itu diterbitkan; jika hilang, kedaluwarsa, atau tidak lagi cocok, panggilan akan mengembalikan konfirmasi baru alih-alih kesalahan — tidak pernah penagihan. Jika harga tidak dapat ditentukan pada salah satu panggilan, alat akan mengembalikan status: price_unavailable dan tidak ada biaya yang dibebankan.

  5. async_operation_get — berikan operationId dari langkah 4 untuk memeriksa progres. Ulangi sampai status menjadi success atau failed.

contacts_save ──▶ domains_check_availability ──▶ domain_register ──▶ domain_register ──▶ async_operation_get
(ID contactId) (tersedia? + harga + (token tidak diatur: (token + (pending →
min/maxRegisterPeriod) konfirmasi, accept: operationId, success/failed)
confirmationToken, pending)
tanpa biaya)

Perbarui kontak pada domain yang Anda miliki

  1. domain_set_contacts — tetapkan kontak ke domain berdasarkan contactId (simpan terlebih dahulu dengan contacts_save jika perlu). Ini selesai segera dan mengembalikan verificationStatus: verification berarti registran harus mengonfirmasi alamat email mereka sebelum perubahan diterapkan sepenuhnya (email dikirim kepada mereka), success berarti sudah dikonfirmasi, dan null berarti tidak diperlukan konfirmasi untuk domain tersebut.

Ubah nameserver domain

  1. domains_list — temukan domain dan lihat nameservers saat ini ({ provider, hosts }).

  2. domain_set_nameservers — alihkan ke nameserver default Spaceship dengan provider: "basic" (tanpa hosts), atau arahkan ke milik Anda sendiri dengan provider: "custom" dan daftar hosts sebanyak 2–12. Ini mengembalikan hasil { provider, hosts }, dan domains_list berikutnya mencerminkan perubahan tersebut. Menerapkan kembali status yang sudah dimiliki domain akan mengembalikan kesalahan validasi, bukan no-op — anggap itu sebagai hal yang diharapkan, bukan kegagalan yang perlu dicoba ulang.

Kelola catatan DNS

  1. domains_list — temukan domain yang ingin Anda kelola (atau berikan namanya langsung jika Anda mengetahuinya).

  2. dns_records_get — baca catatan saat ini untuk domain.

  3. dns_records_save atau dns_records_delete — tambahkan, perbarui, atau hapus catatan. Catatan yang dikembalikan oleh dns_records_get memiliki bentuk yang sama dengan yang diterima alat simpan dan hapus (hapus hanya menghilangkan ttl), sehingga asisten dapat membaca, menyesuaikan, dan menulis kembali. Pencocokan tidak peka huruf besar/kecil kecuali untuk catatan TXT, yang peka huruf besar/kecil.

Tinjau portofolio Anda

  • domains_list — telusuri semua domain Anda per halaman dengan pengurutan, atau ambil satu domain berdasarkan nama. Setiap domain mencakup tanggal kedaluwarsa, pengaturan perpanjangan otomatis, status, nameserver, perlindungan privasi, dan ID kontak yang ditetapkan.

  • contacts_list — telusuri semua kontak yang disimpan di akun Anda per halaman untuk menemukan dan menggunakan kembali kontak yang sudah ada (berdasarkan ID kontaknya) alih-alih membuat duplikat.

  • contacts_get — cari detail di balik ID kontak apa pun yang Anda lihat pada domain atau dalam hasil contacts_list.

Referensi alat

Setiap alat mengembalikan hasilnya sebagai JSON terstruktur. Operasi berjalan lama (saat ini hanya domain_register) mengembalikan referensi operasi untuk dipolling dengan async_operation_get; semua alat lainnya selesai segera.

Kontak

Kontak adalah orang atau organisasi yang terkait dengan pendaftaran domain (registran, admin, teknis, penagihan). Sebuah kontak dirujuk di mana-mana dengan ID kontak-nya — sebuah string opak.

contacts_save — Simpan Kontak

Menyimpan detail kontak dan mengembalikan ID kontak yang dihasilkan. Validasi beberapa bidang (seperti stateProvince dan postalCode) bergantung pada negara yang dipilih.

  • Parameter: firstName

    Wajib: Ya

    Tipe & batasan: String, 1–64 karakter. Dapat menyertakan tanda hubung dan apostrof.

  • Parameter: lastName

    Wajib: Ya

    Tipe & batasan: String, 1–64 karakter. Dapat menyertakan tanda hubung dan apostrof.

  • Parameter: email

    Wajib: Ya

    Tipe & batasan: Alamat email yang valid, maks. 254 karakter.

  • Parameter: address1

    Wajib: Ya

    Tipe & batasan: Baris alamat 1. String, 1–128 karakter.

  • Parameter: city

    Wajib: Ya

    Tipe & batasan: String, 1–64 karakter.

  • Parameter: country

    Wajib: Ya

    Tipe & batasan: Kode negara dua huruf (ISO 3166-1 alpha-2), mis. US.

  • Parameter: phone

    Wajib: Ya

    Tipe & batasan: Format internasional +CountryCode.Number, mis. +1.2025551234. Maks. 32 karakter.

  • Parameter: organization

    Wajib: Tidak

    Tipe & batasan: Nama organisasi/perusahaan. 1–128 karakter.

  • Parameter: address2

    Wajib: Tidak

    Tipe & batasan: Baris alamat 2. 1–128 karakter.

  • Parameter: stateProvince

    Wajib: Tidak

    Tipe & batasan: Nama negara bagian/provinsi, 1–64 karakter. Mungkin diwajibkan tergantung negaranya.

  • Parameter: postalCode

    Wajib: Tidak

    Tipe & batasan: 1–16 karakter. Mungkin diwajibkan tergantung negaranya.

  • Parameter: phoneExt

    Wajib: Tidak

    Tipe & batasan: Ekstensi telepon, 1–16 karakter.

  • Parameter: fax

    Wajib: Tidak

    Tipe & batasan: Nomor faks, format sama +CountryCode.Number, maks. 32 karakter.

  • Parameter: faxExt

    Wajib: Tidak

    Tipe & batasan: Ekstensi faks, 1–16 karakter.

  • Parameter: taxNumber

    Wajib: Tidak

    Tipe & batasan: Nomor pajak, 1–32 karakter.

Mengembalikan

{ "contactId": "..." }

contactId (27–32 karakter alfanumerik) adalah yang Anda teruskan ke domain_register, domain_set_contacts, dan contacts_get.

contacts_get — Ambil Kontak

Membaca detail kontak yang disimpan berdasarkan ID kontaknya. ID kontak berasal dari contacts_save, contacts_list, atau kolom contacts dari hasil domains_list.

  • Parameter: contactId

    Wajib: Ya

    Tipe & batasan: ID kontak, 27–32 karakter alfanumerik.

Mengembalikan{ contact } dengan:

  • Kolom: firstName, lastName, email, address1, city, country, phone, postalCode

    Tipe: String

  • Kolom: organization, address2, stateProvince, phoneExt, fax, faxExt, taxNumber

    Tipe: String atau null

contacts_list — Daftar Kontak

Mencantumkan semua kontak yang disimpan di akun Anda, sehingga Anda dapat menemukan dan menggunakan kembali kontak yang sudah ada (berdasarkan ID kontaknya) alih-alih membuat duplikat atau mencarinya di antara domain Anda. Daftar ini dipaginasi dan dapat diurutkan, konsisten dengan domains_list.

  • Parameter: take

    Wajib: Tidak

    Tipe & batasan: Item per halaman, 1–100. Default 10.

  • Parameter: skip

    Wajib: Tidak

    Tipe & batasan: Item yang dilewati, 0 atau lebih. Default 0.

  • Parameter: orderBy

    Wajib: Tidak

    Tipe & batasan: Hingga 8 kunci pengurutan: name, email, organization; awali dengan - untuk urutan menurun (mis. -name).

Mengembalikan{ items, total } di mana total adalah jumlah kontak unik di akun (dideduplikasi berdasarkan ID kontak, bukan ukuran halaman), dan setiap item memuat cukup informasi untuk membedakan kontak tanpa panggilan lanjutan. Jika akun memiliki entri duplikat untuk ID kontak yang sama, entri tersebut digabung menjadi satu, sehingga total menghitung kontak yang berbeda, bukan baris mentah sisi server:

  • Kolom: contactId

    Tipe: String (27–32 alfanumerik). Teruskan ke contacts_get, domain_register, atau domain_set_contacts.

  • Kolom: name

    Tipe: String — nama kontak.

  • Kolom: email

    Tipe: String atau null jika kontak tidak memiliki email yang tercatat.

  • Kolom: organization

    Tipe: String atau null jika kontak tidak memiliki organisasi yang tercatat.

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

Domain

Input nama domain (domain/domainName) menerima Unicode (IDN) atau ASCII (A-label) — bagaimanapun caranya, alat menormalkan nama ke punycode secara otomatis sebelum digunakan. domains_check_availability dan domain_register juga memerlukan TLD yang didukung Spaceship untuk pendaftaran: domain dengan TLD yang tidak didukung diperlakukan sebagai tidak tersedia alih-alih diperiksa atau ditagih. Alat domain lainnya (domains_list, domain_set_contacts, domain_set_nameservers) dan alat DNS hanya menormalkan nama dan tidak pernah menolak berdasarkan dukungan TLD.

domains_list — Daftar Domain

Mengambil daftar domain Anda yang dipaginasi. Teruskan domain untuk mengambil satu domain berdasarkan nama sebagai gantinya (paginasi dan pengurutan kemudian diabaikan, dan hasilnya menyertakan note yang menyatakan hal itu jika keduanya diberikan).

  • Parameter: domain

    Wajib: Tidak

    Tipe & batasan: Nama domain yang sepenuhnya memenuhi syarat untuk mengambil satu domain. Menerima Unicode (IDN) atau ASCII (A-label) — dinormalkan ke punycode secara otomatis.

  • Parameter: take

    Wajib: Tidak

    Tipe & batasan: Item per halaman, 1–100. Default 10.

  • Parameter: skip

    Wajib: Tidak

    Tipe & batasan: Item yang dilewati, 0 atau lebih. Default 0.

  • Parameter: orderBy

    Wajib: Tidak

    Tipe & batasan: Hingga 8 kunci pengurutan: name, unicodeName, registrationDate, expirationDate; awali dengan - untuk urutan menurun (mis. -expirationDate).

Mengembalikan{ items, total } di mana setiap item mendeskripsikan sebuah domain:

  • Kolom: name / unicodeName

    Arti: Nama domain dalam bentuk ASCII dan Unicode.

  • Kolom: isPremium

    Arti: Apakah domain tersebut merupakan nama premium.

  • Kolom: autoRenew

    Arti: Apakah perpanjangan otomatis diaktifkan.

  • Kolom: registrationDate / expirationDate

    Arti: Stempel waktu pendaftaran dan kedaluwarsa.

  • Kolom: lifecycleStatus

    Arti: creating, registered, grace1, grace2, atau redemption.

  • Kolom: verificationStatus

    Arti: verification, success, failed, atau null jika tidak berlaku.

  • Kolom: eppStatuses

    Arti: Kode status registry (mis. kunci transfer).

  • Kolom: suspensions

    Arti: Penangguhan aktif, masing-masing dengan reasonCode.

  • Kolom: privacyProtection

    Arti: { level: "public" | "high", contactForm: boolean }.

  • Kolom: nameservers

    Arti: { provider: "basic" | "custom", hosts: [...] }.

  • Kolom: contacts

    Arti: ID kontak: registrant, ditambah admin/tech/billing (dapat berupa null) dan attributes (daftar ID kontak atribut yang diperluas, atau null). Dapat dibaca melalui contacts_get.

Spaceship MCP mengisi setiap kolom di atas — termasuk contacts, eppStatuses, suspensions, verificationStatus, nameservers, autoRenew yang nyata, dan unicodeName yang berbeda jika domain memilikinya — baik untuk daftar multi-item maupun pengambilan satu domain.

domains_check_availability — Periksa Ketersediaan Domain

Memeriksa apakah satu atau beberapa nama domain tersedia untuk didaftarkan. Menggunakan endpoint domain tunggal untuk satu nama dan endpoint massal untuk beberapa nama. Domain dengan TLD yang tidak didukung untuk pendaftaran tidak dikirim ke pemeriksaan ketersediaan sama sekali — domain tersebut langsung dikembalikan sebagai tldNotSupported.

  • Parameter: domains

    Wajib: Ya

    Tipe & batasan: 1–20 nama domain yang sepenuhnya memenuhi syarat. Masing-masing menerima Unicode (IDN) atau ASCII (A-label) — dinormalkan ke punycode secara otomatis.

Mengembalikan{ results }, satu entri per nama yang diminta:

  • Kolom: domain

    Arti: Nama yang diperiksa.

  • Kolom: result

    Arti: available, taken, invalidDomainName, tldNotSupported, atau unexpectedError.

  • Kolom: premiumPricing

    Arti: Untuk nama premium: daftar { operation, price, currency } di mana operation adalah register, transfer, renew, atau restore. Kosong untuk nama biasa.

  • Kolom: price

    Arti: Untuk nama available (standar dan premium): harga USD untuk mendaftarkan domain selama jangka waktu terpendek yang diizinkan TLD{ amount, currency: "USD", pricedYears?, pricePerYear?, icannFee?, isPremium }. amount adalah total yang harus dibayar untuk seluruh jangka waktu tersebut; pricedYears menyatakan berapa tahun yang dicakup. Tidak ada harga sebelum diskon atau harga "sebelumnya" yang dilaporkan. icannFee adalah biaya ICANN (USD) yang sudah termasuk dalam amount, dikembalikan secara terpisah agar rinciannya dapat dijelaskan; ini hanya muncul ketika TLD dikenai biaya.

  • Kolom: pricePerYear

    Arti: Di dalam price: amount dibagi dengan pricedYears, sehingga angka tahunan selalu tersedia untuk perbandingan. Saat pricedYears adalah 1, itu adalah harga satu tahun yang sebenarnya; di atas itu, itu adalah rata-rata per tahun dari jangka waktu tersebut, bukan jangka waktu yang bisa Anda beli.

  • Kolom: minRegisterPeriodInYears / maxRegisterPeriodInYears

    Arti: Untuk nama available: periode pendaftaran terpendek dan terpanjang yang benar-benar diizinkan TLD tersebut, sebagai dua angka biasa. Gunakan ini untuk memilih years yang valid untuk domain_register. Keduanya dihilangkan jika periode yang diizinkan tidak dapat ditentukan.

  • Kolom: priceUnavailableReason

    Arti: Muncul sebagai pengganti price ketika harga tidak dapat ditentukan untuk nama yang tersedia. Pemeriksaan itu sendiri tetap berhasil.

Hanya nama yang tersedia yang diberi harga; hasil taken/invalid tidak memuat price maupun priceUnavailableReason.

Sebagian besar TLD mengizinkan satu tahun, tetapi beberapa tidak..ai, misalnya, memiliki minimum dua tahun. Untuk kasus tersebut, price.amount adalah total untuk jangka waktu minimum — bukan harga satu tahun yang bisa Anda gunakan — dan price.pricedYears menyatakannya:

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

pricePerYear ada di sini — 159.96 dibagi dengan dua tahun yang dicakup menghasilkan 79.98. Ini adalah total dibagi jangka waktu, bukan harga yang bisa Anda bayar untuk satu tahun (pendaftaran .ai selama satu tahun tidak dapat dibeli). Selalu tampilkan amount bersama pricedYears ("$159.96 untuk 2 tahun"), jangan pernah amount saja. Untuk TLD biasa, pricedYears adalah 1 dan pricePerYear sama dengan amount.

domain_register — Daftarkan Domain

Mendaftarkan (membeli) domain. Ini menagih metode pembayaran default akun Anda dan tidak dapat dibatalkan. Urutan yang disarankan: domains_check_availabilitydomain_register. Domain dengan TLD yang tidak didukung untuk pendaftaran langsung ditolak — sebelum pemeriksaan ketersediaan, penetapan harga, atau penagihan apa pun.

years harus berada dalam periode yang diizinkan TLD itu sendiri. Batas 110 di bawah ini adalah batas luar di semua TLD; setiap TLD lebih sempit. .ai mengizinkan 2–10, .co dan .io mengizinkan 1–5, .sg 1–2, .fr tepat 1. Nilai years di luar rentang tersebut ditolak dengan kesalahan validasi yang menyebutkan rentang yang diizinkan — sebelum pemeriksaan ketersediaan, penetapan harga, atau penagihan apa pun — dan nilainya tidak diam-diam disesuaikan untuk Anda:

.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.

Baca minRegisterPeriodInYears/maxRegisterPeriodInYears dari domains_check_availability terlebih dahulu dan pilih years di dalamnya. Pemeriksaan yang sama dijalankan ulang pada panggilan konfirmasi (confirmationResponse: "accept"), sehingga tidak pernah bisa dilewati dengan mengonfirmasi.

Konfirmasi dua langkah sebelum penagihan. Panggil terlebih dahulu dengan confirmationToken tidak diatur: alat menetapkan harga domain secara baru, membuat konfirmasi lengkap — jangka waktu, rincian harga (termasuk biaya ICANN apa pun dan apakah domain premium), perpanjangan otomatis, privasi WHOIS, sumber pembayaran, dan kontak registrant/admin/tech/billing (kontak yang identik dengan registrant ditampilkan sebagai "same as registrant") — lalu mengembalikan status: "confirmation_required" dengan price tersebut dan confirmationToken baru. Tidak ada yang didaftarkan atau ditagih pada panggilan ini. Konfirmasi lengkap adalah teks respons alat; tampilkan kepada pengguna apa adanya. Setelah mereka setuju, panggil lagi dengan argumen yang persis sama ditambah confirmationToken ini dan confirmationResponse: "accept" untuk mengirim pembelian, atau confirmationResponse: "decline" untuk membatalkannya — tidak ada yang ditagih saat penolakan. Token terikat pada argumen yang persis ini dan harga yang dikutip, serta kedaluwarsa setelah waktu singkat: token yang hilang, kedaluwarsa, dirusak, atau tidak lagi cocok pada panggilan konfirmasi hanya akan mengembalikan konfirmasi baru dengan token baru — tidak pernah kesalahan, tidak pernah penagihan. Jika harga tidak dapat ditentukan pada salah satu panggilan, alat mengembalikan status: "price_unavailable" alih-alih token dan tidak pernah menagih; coba lagi nanti. Panggilan yang dikonfirmasi langsung mengembalikan status: "pending" dan operationId — pendaftaran selesai di latar belakang; periksa dengan async_operation_get.

  • Parameter: domain

    Wajib: Ya

    Tipe & batasan: Nama domain yang sepenuhnya memenuhi syarat untuk didaftarkan, mis. example.com. Menerima Unicode (IDN) atau ASCII (A-label) — dinormalkan ke punycode secara otomatis.

  • Parameter: years

    Wajib: Ya

    Tipe & batasan: Periode pendaftaran dalam tahun. 110 adalah batas luar; rentang yang diterima adalah milik TLD itu sendiri — lihat minRegisterPeriodInYears/maxRegisterPeriodInYears dari domains_check_availability. Nilai di luar rentang ditolak, bukan disesuaikan.

  • Parameter: autoRenew

    Wajib: Ya

    Tipe & batasan: Boolean. Saat true, domain diperpanjang secara otomatis saat kedaluwarsa menggunakan metode pembayaran default akun.

  • Parameter: privacy.level

    Wajib: Ya

    Tipe & batasan: high menyembunyikan detail kontak registrant dari WHOIS publik; public memublikasikannya.

  • Parameter: privacy.userConsent

    Wajib: Ya

    Tipe & batasan: Boolean. Harus mengonfirmasi bahwa Anda menyetujui pengaturan privasi yang dipilih.

  • Parameter: contacts.registrant

    Wajib: Ya

    Tipe & batasan: contactId string (27–32 alfanumerik), dari contacts_save.

  • Parameter: contacts.admin

    Wajib: Ya

    Tipe & batasan: contactId string (27–32 alfanumerik), dari contacts_save.

  • Parameter: contacts.tech

    Wajib: Ya

    Tipe & batasan: contactId string (27–32 alfanumerik), dari contacts_save.

  • Parameter: contacts.billing

    Wajib: Ya

    Tipe & batasan: contactId string (27–32 alfanumerik), dari contacts_save.

  • Parameter: contacts.attributes

    Wajib: Tidak

    Tipe & batasan: Array ID kontak atribut tambahan (hingga 5); hanya wajib untuk TLD tertentu, jika tidak abaikan atau gunakan null.

  • Parameter: confirmationToken

    Wajib: Tidak

    Tipe & batasan: String, hingga 4096 karakter. Token yang diterbitkan server dan dikembalikan oleh panggilan domain_register sebelumnya untuk argumen yang persis sama ini. Abaikan pada panggilan pertama untuk percobaan pendaftaran baru. Kedaluwarsa setelah waktu singkat dan terikat pada argumen serta harga persis saat token diterbitkan — kirim ulang tanpa perubahan, bersama dengan confirmationResponse, untuk menindaklanjutinya.

  • Parameter: confirmationResponse

    Wajib: Bersyarat

    Tipe & batasan: "accept" atau "decline". Hanya bermakna bersama confirmationToken yang valid. "accept" mengirim pendaftaran (yang ditagihkan) yang ditampilkan dalam konfirmasi tersebut; "decline" membatalkannya tanpa penagihan. Abaikan pada panggilan pertama.

Hasil — setelah panggilan pertama (belum ada biaya):

{
"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."
}

Bersamaan dengan JSON ini, teks respons alat adalah konfirmasi lengkap yang harus ditampilkan kepada pengguna — menegaskan kembali domain, masa berlaku, dan harga di atas, ditambah baris untuk Auto-renew: on/off, WHOIS privacy: on/off, Payment source: Spaceship account funds, dan masing-masing kontak registrant/admin/tech/billing (nama, email, negara — kontak yang sama dengan registrant akan berbunyi "same as registrant"), diikuti instruksi untuk panggilan berikutnya. Untuk masa berlaku multi-tahun, price.amount adalah total untuk seluruh masa berlaku dan price.pricePerYear adalah total tersebut dibagi masa berlaku — mis. years: 5 pada .com mengembalikan { "amount": 48.52, "pricedYears": 5, "pricePerYear": 9.70 }, dan example.ai dengan years: 2 mengembalikan { "amount": 159.96, "pricedYears": 2, "pricePerYear": 79.98 }.

Hasil — setelah confirmationResponse: "accept" (pendaftaran dikirim):

{
"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."
}

Hasil — setelah confirmationResponse: "decline" (belum ada biaya):

{
"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."
}

Hasil — jika harga tidak dapat ditentukan, pada salah satu panggilan:

{
"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 dapat berupa:

  • Status: confirmation_required

    Arti: Pratinjau — belum ada biaya. Tampilkan teks respons kepada pengguna, lalu panggil lagi dengan confirmationToken dan confirmationResponse ini. Juga dikembalikan, dengan token baru, ketika confirmationToken yang dikirim tidak ada, kedaluwarsa, dirusak, atau tidak lagi cocok dengan argumen/harga saat ini — bukan error.

  • Status: cancelled

    Arti: Pembelian ditolak (confirmationResponse: "decline"), jadi tidak ada yang dikirim.

  • Status: pending

    Arti: Sudah dikirim; registry sedang menyelesaikannya di latar belakang. Poll async_operation_get dengan operationId.

  • Status: price_unavailable

    Arti: Harga tidak dapat ditentukan, jadi tidak ada token yang diterbitkan dan tidak ada biaya yang ditagihkan. Coba lagi nanti.

operationId adalah string datar — teruskan ke async_operation_get, yang melaporkan apakah pendaftaran pada akhirnya berhasil atau gagal. price yang ditampilkan pada confirmation_required adalah persis yang akan ditagihkan pada confirmationResponse: "accept"price.amount adalah total untuk seluruh masa berlaku tersebut dan price.pricedYears menyatakan masa berlakunya, jadi selalu tampilkan keduanya bersama. Saat TLD dikenai biaya ICANN, price.amount sudah mencakupnya dan price.icannFee menyatakan jumlah biayanya agar dapat dijelaskan.

domain_set_contacts — Tetapkan Kontak Domain

Mengubah kontak yang ditetapkan ke domain yang Anda miliki. Selesai seketika (tidak ada operasi untuk dipoll).

  • Parameter: domainName

    Wajib: Ya

    Tipe & batasan: Nama domain yang sepenuhnya memenuhi syarat. Menerima Unicode (IDN) atau ASCII (A-label) — dinormalisasi ke punycode secara otomatis.

  • Parameter: registrant

    Wajib: Ya

    Tipe & batasan: contactId string (27–32 alfanumerik), dari contacts_save.

  • Parameter: admin

    Wajib: Tidak

    Tipe & batasan: contactId string (27–32 alfanumerik) atau null.

  • Parameter: tech

    Wajib: Tidak

    Tipe & batasan: contactId string (27–32 alfanumerik) atau null.

  • Parameter: billing

    Wajib: Tidak

    Tipe & batasan: contactId string (27–32 alfanumerik) atau null.

  • Parameter: attributes

    Wajib: Tidak

    Tipe & batasan: Array ID kontak atribut tambahan (hingga 5); hanya wajib untuk TLD tertentu, jika tidak abaikan atau gunakan null.

Hasil

{ "verificationStatus": "verification" }

Nilai verificationStatus yang dikembalikan mencerminkan verifikasi email ICANN RAA: verification — registrant harus mengonfirmasi alamat email mereka (email konfirmasi dikirim); success — sudah dikonfirmasi; null — verifikasi RAA tidak berlaku untuk domain ini.

domain_set_nameservers — Tetapkan Nameserver Domain

Mengubah nameserver tingkat registrar untuk sebuah domain. Selesai seketika (tidak ada operasi untuk dipoll). Perubahan ini kemudian tercermin oleh domains_list.

  • Parameter: domainName

    Wajib: Ya

    Tipe & batasan: Nama domain yang sepenuhnya memenuhi syarat. Menerima Unicode (IDN) atau ASCII (A-label) — dinormalisasi ke punycode secara otomatis.

  • Parameter: provider

    Wajib: Ya

    Tipe & batasan: basic (nameserver default Spaceship) atau custom (host Anda sendiri).

  • Parameter: hosts

    Wajib: Bersyarat

    Tipe & batasan: Wajib saat provider adalah custom: 2–12 hostname nameserver (masing-masing FQDN valid, 4–255 karakter). Harus diabaikan saat provider adalah basic.

Hasil

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

Menerapkan ulang status yang sudah dimiliki domain (mis. menetapkan basic saat domain sudah basic) akan mengembalikan error validasi, bukan keberhasilan no-op — anggap itu sebagai hasil yang diharapkan, bukan kegagalan yang perlu dicoba ulang.

Catatan DNS

domainName yang digunakan alat-alat ini menerima Unicode (IDN) atau ASCII (A-label) dan dinormalisasi ke punycode secara otomatis; dukungan TLD tidak diberlakukan di sini.

dns_records_get — Ambil Catatan DNS

Mengambil daftar berpaginasi dari catatan resource DNS untuk sebuah domain.

  • Parameter: domainName

    Wajib: Ya

    Tipe & batasan: Domain yang catatannya akan diambil.

  • Parameter: take

    Wajib: Tidak

    Tipe & batasan: Item per halaman, 1–500. Default 100.

  • Parameter: skip

    Wajib: Tidak

    Tipe & batasan: Item yang dilewati, 0 atau lebih. Default 0.

  • Parameter: orderBy

    Wajib: Tidak

    Tipe & batasan: Hingga 8 kunci pengurutan: type, -type, name, -name.

Hasil{ items, total }. Setiap item adalah catatan seperti dijelaskan dalam Bentuk catatan, ditambah field group opsional yang menunjukkan asal catatan (custom — dibuat oleh Anda, product — dikelola oleh produk Spaceship, personalNs — nameserver pribadi).

dns_records_save — Simpan Catatan DNS

Menambahkan catatan DNS kustom atau memperbarui TTL catatan yang ada. Catatan dicocokkan tanpa membedakan huruf besar/kecil, kecuali catatan TXT (peka huruf besar/kecil).

  • Parameter: domainName

    Wajib: Ya

    Tipe & batasan: Domain yang catatannya akan diperbarui.

  • Parameter: records

    Wajib: Ya

    Tipe & batasan: 1–500 catatan — lihat Bentuk catatan. Masing-masing dapat menyertakan ttl opsional.

  • Parameter: force

    Wajib: Tidak

    Tipe & batasan: Boolean. Melewati pemeriksaan penyelesaian konflik dan memaksa pembaruan zona.

Hasil{ "saved": <number> }, jumlah catatan yang dikirim. Respons yang berhasil berarti semua catatan diterima; jika ada catatan yang gagal, seluruh panggilan akan mengembalikan error.

dns_records_delete — Hapus Catatan DNS

Menghapus catatan DNS kustom. Penghapusan tidak dapat dibatalkan. Catatan dicocokkan tanpa membedakan huruf besar/kecil, kecuali catatan TXT (peka huruf besar/kecil).

  • Parameter: domainName

    Wajib: Ya

    Tipe & batasan: Domain yang catatannya akan dihapus.

  • Parameter: records

    Wajib: Ya

    Tipe & batasan: 1–500 catatan yang mengidentifikasi catatan yang ada — bentuk yang sama seperti simpan, tetapi tanpa ttl.

Hasil{ "deleted": <number> }, jumlah catatan yang dikirim. Jika ada catatan yang tidak dapat dicocokkan, seluruh panggilan gagal dan tidak ada yang dihapus.

Bentuk catatan

Setiap catatan memiliki:

  • type — salah satu dari 13 tipe yang didukung di bawah ini.

  • name — nama catatan tidak termasuk domain: gunakan @ untuk domain itu sendiri (apex) dan * untuk wildcard.

  • ttl (hanya simpan, opsional) — waktu cache dalam detik, 60–3600.

Field khusus tipe:

  • Tipe: A

    Field: address — alamat IPv4.

  • Tipe: AAAA

    Field: address — alamat IPv6.

  • Tipe: CNAME

    Field: cname — nama domain kanonis (maks. 253 karakter).

  • Tipe: ALIAS

    Field: aliasName — nama domain kanonis; perilaku mirip CNAME untuk apex, tempat CNAME tidak diizinkan.

  • Tipe: NS

    Field: nameserver — nama nameserver.

  • Tipe: PTR

    Field: pointer — nama domain untuk alamat IP yang diberikan.

  • Tipe: TXT

    Field: value — nilai teks (dicocokkan dengan peka huruf besar/kecil).

  • Tipe: MX

    Field: exchange — server email; preference — prioritas (0–65535, yang lebih rendah lebih diutamakan).

  • Tipe: CAA

    Field: flag0 atau 128 (bit kritis); tagissue, issuewild, atau iodef; value — pengenal CA dengan parameter opsional.

  • Tipe: SRV

    Field: service (mis. _sip); protocol (mis. _tcp); priority dan weight (0–65535); port (1–65535); target — nama domain server.

  • Tipe: TLSA

    Bidang: usage, selector, matching (masing-masing 0–255); port* atau _<165535>; protocol (mis. _tcp); associationData — hash sertifikat atau data.

  • Tipe: HTTPS

    Bidang: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN atau .; opsional port (* atau _<165535>), scheme (harus _https saat port ditetapkan), svcParams.

  • Tipe: SVCB

    Bidang: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN atau .; opsional port, scheme (mis. _tcp), svcParams.

Operasi asinkron

async_operation_get — Dapatkan Status Operasi Asinkron

Memeriksa operasi berjalan lama yang dimulai oleh alat lain (saat ini domain_register). Panggil dengan operationId diatur ke operationId yang dikembalikan alat tersebut, lalu ulangi sampai status adalah success atau failed.

  • Parameter: operationId

    Wajib: Ya

    Tipe & batasan: String alfanumerik, maks. 36 karakter, dikembalikan oleh alat yang memulai operasi.

Mengembalikan

  • Bidang: operationId

    Arti: Operasi yang dipolling.

  • Bidang: status

    Arti: pending, success, atau failed.

  • Bidang: type

    Arti: Tipe operasi, atau null.

  • Bidang: details

    Arti: Detail tambahan tentang operasi, atau null.

  • Bidang: createdAt / modifiedAt

    Arti: Saat operasi dibuat / terakhir diperbarui (modifiedAt dapat berupa null).

Kesalahan

Saat panggilan gagal, alat mengembalikan kesalahan dengan kode dan detail yang dapat dibaca manusia yang menjelaskan apa yang salah — misalnya input tidak valid (nama domain atau ID kontak yang salah format), domain atau kontak yang tidak ada, atau konflik dengan status saat ini. Jika alat ditolak karena asisten tidak diberi akses ke alat tersebut, sambungkan kembali Spaceship MCP dan setujui akses yang dimintanya.

Email yang valid diperlukan