Spaceship MCP — Dokumentacja narzędzi

Spaceship MCP łączy Twojego asystenta AI (takiego jak Claude) z Twoim kontem Spaceship. Dzięki temu asystent może sprawdzać i rejestrować domeny, zarządzać kontaktami domen oraz odczytywać lub edytować rekordy DNS w Twoim imieniu — wystarczy, że zapytasz zwykłym językiem, a asystent wywoła odpowiednie narzędzia.

Pierwsze kroki

Potrzebujesz konta Spaceship. Spaceship MCP jest dostępny pod adresem https://mcp.spaceship.com/mcp.

Sposób połączenia zależy od Twojego asystenta AI:

  • Claude (web i desktop) — otwórz Ustawienia, wybierz Connectors, znajdź Spaceship w katalogu konektorów i dodaj go. Claude od Anthropic jest obecnie klientem, z którym potwierdziliśmy działanie Spaceship MCP.

    Uwaga: Chociaż rejestracja domen przez Spaceship MCP jest ogólnie w pełni obsługiwana, ta funkcja nie jest jeszcze dostępna konkretnie przez konektor Claude. Wyszukiwanie, sprawdzanie domen, zarządzanie kontaktami i rekordami DNS są już dostępne i potwierdzono, że działają dziś z Claude.

  • Inni klienci MCP — dodaj zdalny serwer MCP i wskaż go na https://mcp.spaceship.com/mcp. Inni klienci mogą działać, ale jeszcze ich nie zweryfikowaliśmy.

Podczas łączenia zostaniesz poproszony o zalogowanie się do Spaceship i przyznanie asystentowi dostępu do Twojego konta. To, z których narzędzi asystent może korzystać, zależy od zatwierdzonego przez Ciebie dostępu — jeśli narzędzie zostanie odrzucone, ponieważ dostęp nie został przyznany, połącz się ponownie i zatwierdź potrzebny mu dostęp.

Przegląd narzędzi

  • Narzędzie: contacts_save

    Co robi: Zapisuje dane kontaktowe i pobiera identyfikator kontaktu

  • Narzędzie: contacts_get

    Co robi: Odczytuje zapisany kontakt na podstawie jego ID

  • Narzędzie: contacts_list

    Co robi: Wyświetla wszystkie zapisane kontakty, aby znaleźć i ponownie użyć jednego z nich

  • Narzędzie: domains_list

    Co robi: Wyświetla Twoje domeny lub wyszukuje jedną domenę

  • Narzędzie: domains_check_availability

    Co robi: Sprawdza, czy domeny są dostępne do rejestracji

  • Narzędzie: domain_register

    Co robi: Rejestruje (kupuje) domenę — wydaje pieniądze

  • Narzędzie: domain_set_contacts

    Co robi: Przypisuje kontakty do domeny, którą posiadasz

  • Narzędzie: domain_set_nameservers

    Co robi: Przełącza domenę na podstawowe lub niestandardowe serwery nazw

  • Narzędzie: dns_records_get

    Co robi: Odczytuje rekordy DNS dla domeny

  • Narzędzie: dns_records_save

    Co robi: Dodaje rekordy DNS lub aktualizuje ich TTL

  • Narzędzie: dns_records_delete

    Co robi: Usuwa rekordy DNS

  • Narzędzie: async_operation_get

    Co robi: Sprawdza status długotrwałej operacji

Kontakty: odwołanie przez identyfikator

Wszędzie tam, gdzie wymagany jest kontakt (domain_register, domain_set_contacts), każda rola przyjmuje contactId jako ciąg znaków — nigdy wbudowanych danych kontaktowych. Najpierw zapisz kontakt za pomocą contacts_save (które zwraca jego contactId), a następnie przekaż ten identyfikator tam, gdzie kontakt jest akceptowany. Nie ma wbudowanego automatycznego zapisu; rola nie może otrzymać pełnego obiektu kontaktu. Możesz też ponownie użyć contactId z wyniku contacts_list lub odczytanego z wyniku domains_list.

contactId to ciąg 27–32 znaków alfanumerycznych. Po prostu przekaż go z powrotem tam, gdzie kontakt jest akceptowany.

Typowe przepływy pracy

Kilka narzędzi zaprojektowano do wspólnego użycia: dane wyjściowe jednego stają się danymi wejściowymi następnego.

Zarejestruj (kup) domenę

  1. contacts_save — zapisz kontakty rejestrującego, administratora, techniczny i rozliczeniowy (jeśli nie masz jeszcze ich identyfikatorów) i zachowaj zwrócone contactId dla każdego z nich. Kontakty muszą istnieć, zanim będzie można zarejestrować domenę.

  2. domains_check_availability — sprawdź nazwę lub nazwy, które chcesz. Kontynuuj tylko wtedy, gdy result ma wartość available. Każda dostępna nazwa zawiera cenę rejestracji w USD w polu price (zarówno standardową, jak i premium) albo priceUnavailableReason, gdy nie można jej ustalić, a także minRegisterPeriodInYears i maxRegisterPeriodInYears — okres dozwolony przez TLD. Pamiętaj, że price obejmuje price.pricedYears lat, co jest najkrótszym okresem dozwolonym przez TLD i nie zawsze wynosi 1.

  3. domain_register (podgląd) — wywołaj z nieustawionym confirmationToken, aby otrzymać status: confirmation_required, nowy confirmationToken oraz price, która zostanie naliczona. Nic nie jest obciążane. Tekst odpowiedzi narzędzia to pełne potwierdzenie — okres, rozbicie ceny, automatyczne odnawianie, prywatność WHOIS, źródło płatności oraz kontakty rejestrującego/admina/techniczny/rozliczeniowy — pokaż go użytkownikowi bez zmian. Wybierz years pomiędzy minRegisterPeriodInYears a maxRegisterPeriodInYears z kroku 2 — wartość spoza zakresu zostanie od razu odrzucona. Przekaż każdą rolę kontaktu jako contactId zapisane w kroku 1.

  4. domain_register (akceptacja/odrzucenie) — po zgodzie użytkownika wywołaj ponownie z dokładnie tymi samymi argumentami plus tym confirmationToken oraz confirmationResponse: "accept". To obciąża domyślną metodę płatności konta i jest nieodwracalne. Zwraca natychmiast status: pending oraz operationId — rejestracja kończy się w tle. Aby zamiast tego anulować, wywołaj ponownie z tym samym confirmationToken oraz confirmationResponse: "decline" — nic nie zostanie naliczone. Token wygasa po krótkim czasie i jest powiązany z dokładnymi argumentami oraz ceną, dla których został wydany; jeśli go brakuje, wygasł lub już nie pasuje, wywołanie zwraca zupełnie nowe potwierdzenie zamiast błędu — nigdy obciążenie. Jeśli ceny nie da się ustalić przy którymkolwiek wywołaniu, narzędzie zwraca zamiast tego status: price_unavailable i nic nie zostaje naliczone.

  5. async_operation_get — przekaż operationId z kroku 4, aby sprawdzić postęp. Powtarzaj, aż status zmieni się na success lub failed.

contacts_save ──▶ domains_check_availability ──▶ domain_register ──▶ domain_register ──▶ async_operation_get
(identyfikatory contactId) (dostępna? + cena + (token nieustawiony: (token + (pending →
min/maxRegisterPeriod) potwierdzenie, accept: operationId, success/failed)
confirmationToken, pending)
bez opłaty)

Zaktualizuj kontakty domeny, którą posiadasz

  1. domain_set_contacts — przypisz kontakty do domeny za pomocą contactId (najpierw zapisz je przez contacts_save, jeśli to konieczne). To kończy się natychmiast i zwraca verificationStatus: verification oznacza, że rejestrujący musi potwierdzić swój adres e-mail, zanim zmiana zostanie w pełni zastosowana (zostanie do niego wysłany e-mail), success oznacza, że jest już potwierdzony, a null oznacza, że dla tej domeny nie jest wymagane potwierdzenie.

Zmień serwery nazw domeny

  1. domains_list — znajdź domenę i zobacz jej bieżące nameservers ({ provider, hosts }).

  2. domain_set_nameservers — przełącz ją na domyślne serwery nazw Spaceship za pomocą provider: "basic" (bez hosts) albo wskaż własne za pomocą provider: "custom" i listy 2–12 hosts. Zwraca wynikowe { provider, hosts }, a kolejne domains_list odzwierciedla zmianę. Ponowne zastosowanie stanu, w którym domena już się znajduje, zwraca błąd walidacji zamiast braku działania — traktuj to jako oczekiwane, a nie jako niepowodzenie wymagające ponowienia.

Zarządzaj rekordami DNS

  1. domains_list — znajdź domenę, którą chcesz zarządzać (lub przekaż jej nazwę bezpośrednio, jeśli ją znasz).

  2. dns_records_get — odczytaj bieżące rekordy domeny.

  3. dns_records_save lub dns_records_delete — dodawaj, aktualizuj lub usuwaj rekordy. Rekordy zwracane przez dns_records_get mają ten sam format, który akceptują narzędzia zapisu i usuwania (usuwanie po prostu pomija ttl), więc asystent może odczytać, dostosować i zapisać je z powrotem. Dopasowanie nie uwzględnia wielkości liter, z wyjątkiem rekordów TXT, które rozróżniają wielkość liter.

Przejrzyj swoje portfolio

  • domains_list — przeglądaj strona po stronie wszystkie swoje domeny z sortowaniem lub pobierz pojedynczą domenę po nazwie. Każda domena zawiera datę wygaśnięcia, ustawienie automatycznego odnawiania, status, serwery nazw, ochronę prywatności i przypisane identyfikatory kontaktów.

  • contacts_list — przeglądaj strona po stronie wszystkie kontakty zapisane na Twoim koncie, aby znaleźć i ponownie użyć istniejącego kontaktu (według jego identyfikatora kontaktu) zamiast tworzyć duplikat.

  • contacts_get — sprawdź szczegóły kryjące się za dowolnym identyfikatorem kontaktu, który widzisz przy domenie lub w wyniku contacts_list.

Dokumentacja narzędzi

Każde narzędzie zwraca wynik jako uporządkowany JSON. Długotrwałe operacje (obecnie tylko domain_register) zwracają odwołanie do operacji do odpytywania przez async_operation_get; wszystkie pozostałe narzędzia kończą się natychmiast.

Kontakty

Kontakty to osoby lub organizacje powiązane z rejestracją domeny (rejestrujący, administrator, techniczny, rozliczeniowy). Do kontaktu wszędzie odwołuje się jego identyfikator kontaktu — nieprzezroczysty ciąg znaków.

contacts_save — Zapisz kontakt

Zapisuje dane kontaktowe i zwraca wygenerowany identyfikator kontaktu. Walidacja niektórych pól (takich jak stateProvince i postalCode) zależy od wybranego kraju.

  • Parametr: firstName

    Wymagane: Tak

    Typ i ograniczenia: Ciąg znaków, 1–64 znaki. Może zawierać myślniki i apostrofy.

  • Parametr: lastName

    Wymagane: Tak

    Typ i ograniczenia: Ciąg znaków, 1–64 znaki. Może zawierać myślniki i apostrofy.

  • Parametr: email

    Wymagane: Tak

    Typ i ograniczenia: Prawidłowy adres e-mail, maks. 254 znaki.

  • Parametr: address1

    Wymagane: Tak

    Typ i ograniczenia: Wiersz adresu 1. Ciąg znaków, 1–128 znaków.

  • Parametr: city

    Wymagane: Tak

    Typ i ograniczenia: Ciąg znaków, 1–64 znaki.

  • Parametr: country

    Wymagane: Tak

    Typ i ograniczenia: Dwuliterowy kod kraju (ISO 3166-1 alpha-2), np. US.

  • Parametr: phone

    Wymagane: Tak

    Typ i ograniczenia: Format międzynarodowy +CountryCode.Number, np. +1.2025551234. Maks. 32 znaki.

  • Parametr: organization

    Wymagane: Nie

    Typ i ograniczenia: Nazwa organizacji/firmy. 1–128 znaków.

  • Parametr: address2

    Wymagane: Nie

    Typ i ograniczenia: Wiersz adresu 2. 1–128 znaków.

  • Parametr: stateProvince

    Wymagane: Nie

    Typ i ograniczenia: Nazwa stanu/prowincji, 1–64 znaki. Może być wymagana w zależności od kraju.

  • Parametr: postalCode

    Wymagane: Nie

    Typ i ograniczenia: 1–16 znaków. Może być wymagany w zależności od kraju.

  • Parametr: phoneExt

    Wymagane: Nie

    Typ i ograniczenia: Numer wewnętrzny telefonu, 1–16 znaków.

  • Parametr: fax

    Wymagane: Nie

    Typ i ograniczenia: Numer faksu, ten sam format +CountryCode.Number, maks. 32 znaki.

  • Parametr: faxExt

    Wymagane: Nie

    Typ i ograniczenia: Wewnętrzny numer faksu, 1–16 znaków.

  • Parametr: taxNumber

    Wymagane: Nie

    Typ i ograniczenia: Numer podatkowy, 1–32 znaki.

Zwraca

{ "contactId": "..." }

contactId (27–32 znaki alfanumeryczne) to wartość przekazywana do domain_register, domain_set_contacts i contacts_get.

contacts_get — Pobierz kontakt

Odczytuje szczegóły zapisanego kontaktu na podstawie jego identyfikatora kontaktu. Identyfikatory kontaktów pochodzą z contacts_save, contacts_list lub z pola contacts w wynikach domains_list.

  • Parametr: contactId

    Wymagane: Tak

    Typ i ograniczenia: Identyfikator kontaktu, 27–32 znaki alfanumeryczne.

Zwraca{ contact } zawierający:

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

    Typ: String

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

    Typ: String lub null

contacts_list — Lista kontaktów

Wyświetla wszystkie kontakty zapisane na Twoim koncie, aby umożliwić znalezienie i ponowne użycie istniejącego kontaktu (według jego identyfikatora kontaktu) zamiast tworzenia duplikatu lub przeszukiwania domen. Lista jest stronicowana i sortowalna, zgodnie z domains_list.

  • Parametr: take

    Wymagane: Nie

    Typ i ograniczenia: Liczba elementów na stronę, 1–100. Domyślnie 10.

  • Parametr: skip

    Wymagane: Nie

    Typ i ograniczenia: Liczba pomijanych elementów, 0 lub więcej. Domyślnie 0.

  • Parametr: orderBy

    Wymagane: Nie

    Typ i ograniczenia: Do 8 kluczy sortowania: name, email, organization; poprzedź - dla kolejności malejącej (np. -name).

Zwraca{ items, total }, gdzie total to liczba unikalnych kontaktów na koncie (bez duplikatów według identyfikatora kontaktu, a nie rozmiar strony), a każdy element zawiera wystarczająco dużo informacji, by odróżnić kontakty bez dodatkowego wywołania. Jeśli konto ma zduplikowane wpisy dla tego samego identyfikatora kontaktu, są one scalane do jednego, więc total liczy odrębne kontakty, a nie surowe wiersze po stronie serwera:

  • Pole: contactId

    Typ: String (27–32 znaki alfanumeryczne). Przekaż do contacts_get, domain_register lub domain_set_contacts.

  • Pole: name

    Typ: String — nazwa kontaktu.

  • Pole: email

    Typ: String lub null, gdy dla kontaktu nie ma zapisanego adresu e-mail.

  • Pole: organization

    Typ: String lub null, gdy dla kontaktu nie ma zapisanej organizacji.

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

Domeny

Pola wejściowe nazwy domeny (domain/domainName) akceptują Unicode (IDN) lub ASCII (A-label) — w obu przypadkach narzędzie automatycznie normalizuje nazwę do punycode przed użyciem. domains_check_availability i domain_register dodatkowo wymagają TLD obsługiwanego przez Spaceship do rejestracji: domena, której TLD nie jest obsługiwane, jest traktowana jako niedostępna zamiast być sprawdzana lub obciążana opłatą. Pozostałe narzędzia domenowe (domains_list, domain_set_contacts, domain_set_nameservers) oraz narzędzia DNS tylko normalizują nazwę i nigdy nie odrzucają jej z powodu obsługi TLD.

domains_list — Lista domen

Pobiera stronicowaną listę Twoich domen. Przekaż domain, aby zamiast tego pobrać pojedynczą domenę po nazwie (stronicowanie i sortowanie są wtedy ignorowane, a wynik zawiera note informującą o tym, jeśli zostały podane).

  • Parametr: domain

    Wymagane: Nie

    Typ i ograniczenia: W pełni kwalifikowana nazwa domeny do pobrania pojedynczej domeny. Akceptuje Unicode (IDN) lub ASCII (A-label) — automatycznie normalizowana do punycode.

  • Parametr: take

    Wymagane: Nie

    Typ i ograniczenia: Liczba elementów na stronę, 1–100. Domyślnie 10.

  • Parametr: skip

    Wymagane: Nie

    Typ i ograniczenia: Liczba pomijanych elementów, 0 lub więcej. Domyślnie 0.

  • Parametr: orderBy

    Wymagane: Nie

    Typ i ograniczenia: Do 8 kluczy sortowania: name, unicodeName, registrationDate, expirationDate; poprzedź - dla kolejności malejącej (np. -expirationDate).

Zwraca{ items, total }, gdzie każdy element opisuje domenę:

  • Pole: name / unicodeName

    Znaczenie: Nazwa domeny w formie ASCII i Unicode.

  • Pole: isPremium

    Znaczenie: Czy domena jest nazwą premium.

  • Pole: autoRenew

    Znaczenie: Czy automatyczne odnawianie jest włączone.

  • Pole: registrationDate / expirationDate

    Znaczenie: Znaczniki czasu rejestracji i wygaśnięcia.

  • Pole: lifecycleStatus

    Znaczenie: creating, registered, grace1, grace2 lub redemption.

  • Pole: verificationStatus

    Znaczenie: verification, success, failed lub null, gdy nie dotyczy.

  • Pole: eppStatuses

    Znaczenie: Kody statusu rejestru (np. blokady transferu).

  • Pole: suspensions

    Znaczenie: Aktywne zawieszenia, każde z polem reasonCode.

  • Pole: privacyProtection

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

  • Pole: nameservers

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

  • Pole: contacts

    Znaczenie: Identyfikatory kontaktów: registrant oraz admin/tech/billing (mogą mieć wartość null) oraz attributes (lista identyfikatorów kontaktów atrybutów rozszerzonych lub null). Można je odczytać przez contacts_get.

Spaceship MCP wypełnia każde z powyższych pól — w tym contacts, eppStatuses, suspensions, verificationStatus, nameservers, rzeczywiste autoRenew oraz odrębne unicodeName, jeśli domena je ma — zarówno dla list wieloelementowych, jak i pobrań pojedynczej domeny.

domains_check_availability — Sprawdź dostępność domeny

Sprawdza, czy jedna lub więcej nazw domen jest dostępna do rejestracji. Dla jednej nazwy używa punktu końcowego pojedynczej domeny, a dla wielu — punktu końcowego zbiorczego. Domena, której TLD nie jest obsługiwane do rejestracji, w ogóle nie jest wysyłana do sprawdzenia dostępności — jest natychmiast zwracana jako tldNotSupported.

  • Parametr: domains

    Wymagane: Tak

    Typ i ograniczenia: 1–20 w pełni kwalifikowanych nazw domen. Każda akceptuje Unicode (IDN) lub ASCII (A-label) — automatycznie normalizowana do punycode.

Zwraca{ results }, po jednym wpisie dla każdej żądanej nazwy:

  • Pole: domain

    Znaczenie: Sprawdzana nazwa.

  • Pole: result

    Znaczenie: available, taken, invalidDomainName, tldNotSupported lub unexpectedError.

  • Pole: premiumPricing

    Znaczenie: Dla nazw premium: lista { operation, price, currency }, gdzie operation to register, transfer, renew lub restore. Puste dla zwykłych nazw.

  • Pole: price

    Znaczenie: Dla nazw available (standardowych i premium): cena w USD za rejestrację domeny na najkrótszy okres dozwolony przez TLD{ amount, currency: "USD", pricedYears?, pricePerYear?, icannFee?, isPremium }. amount to łączna kwota do zapłaty za cały ten okres; pricedYears określa, ile lat obejmuje. Nie jest podawana cena sprzed rabatu ani cena „było”. icannFee to opłata ICANN (USD) już uwzględniona w amount, zwracana osobno, aby można było wyjaśnić rozbicie ceny; pojawia się tylko wtedy, gdy TLD obejmuje taką opłatę.

  • Pole: pricePerYear

    Znaczenie: Wewnątrz price: amount podzielone przez pricedYears, dzięki czemu zawsze dostępna jest wartość roczna do porównania. Gdy pricedYears wynosi 1, jest to rzeczywista cena za jeden rok; powyżej 1 jest to średnia roczna dla całego okresu, a nie okres, który można kupić.

  • Pole: minRegisterPeriodInYears / maxRegisterPeriodInYears

    Znaczenie: Dla nazw available: najkrótszy i najdłuższy okres rejestracji faktycznie dozwolony przez to TLD, jako dwie zwykłe liczby. Użyj ich, aby wybrać prawidłowe years dla domain_register. Oba pola są pomijane, gdy nie udało się ustalić dozwolonego okresu.

  • Pole: priceUnavailableReason

    Znaczenie: Obecne zamiast price, gdy nie udało się ustalić ceny dla dostępnej nazwy. Samo sprawdzenie nadal kończy się powodzeniem.

Wycena jest dostępna tylko dla nazw dostępnych; wyniki taken/invalid nie zawierają ani price, ani priceUnavailableReason.

Większość TLD pozwala na jeden rok, ale nie wszystkie..ai ma na przykład minimum dwa lata. W takich przypadkach price.amount to łączna kwota za minimalny okres — a nie cena za jeden rok, którą można zastosować — a price.pricedYears to wskazuje:

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

pricePerYear jest tutaj obecne — 159.96 podzielone przez dwa lata, które obejmuje, daje 79.98. To suma podzielona przez okres, a nie cena, którą można zapłacić za jeden rok (nie można kupić rocznej rejestracji .ai). Zawsze pokazuj amount razem z pricedYears („159.96 USD za 2 lata”), nigdy samego amount. Dla zwykłego TLD pricedYears wynosi 1, a pricePerYear jest równe amount.

domain_register — Zarejestruj domenę

Rejestruje (kupuje) domenę. To obciąża domyślną metodę płatności Twojego konta i jest nieodwracalne. Zalecana sekwencja: domains_check_availabilitydomain_register. Domena, której TLD nie jest obsługiwane do rejestracji, jest odrzucana natychmiast — przed jakimkolwiek sprawdzeniem dostępności, wyceną lub obciążeniem.

years musi mieścić się w zakresie dozwolonym przez dane TLD. Zakres 110 poniżej to granica zewnętrzna dla wszystkich TLD; każde TLD ma węższy zakres. .ai pozwala na 2–10, .co i .io pozwalają na 1–5, .sg na 1–2, .fr dokładnie 1. Wartość years spoza tego zakresu jest odrzucana z błędem walidacji wskazującym dozwolony zakres — przed jakimkolwiek sprawdzeniem dostępności, wyceną lub obciążeniem — i wartość ta nie jest po cichu dostosowywana za Ciebie:

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

Najpierw odczytaj minRegisterPeriodInYears/maxRegisterPeriodInYears z domains_check_availability i wybierz years mieszczące się w tym zakresie. To samo sprawdzenie jest uruchamiane ponownie przy wywołaniu potwierdzającym (confirmationResponse: "accept"), więc nie da się go obejść przez potwierdzenie.

Dwuetapowe potwierdzenie przed obciążeniem. Najpierw wywołaj bez ustawionego confirmationToken: narzędzie ponownie wycenia domenę, tworzy pełne potwierdzenie — okres, rozbicie ceny (w tym ewentualną opłatę ICANN i informację, czy domena jest premium), auto-odnawianie, prywatność WHOIS, źródło płatności oraz kontakty registrant/admin/tech/billing (kontakt identyczny z registrant jest pokazany jako „same as registrant”) — i zwraca status: "confirmation_required" wraz z tym price i nowym confirmationToken. Podczas tego wywołania nic nie jest rejestrowane ani rozliczane. Pełne potwierdzenie jest tekstem odpowiedzi narzędzia; pokaż je użytkownikowi bez zmian. Gdy się zgodzi, wywołaj ponownie z dokładnie tymi samymi argumentami plus ten confirmationToken i confirmationResponse: "accept", aby wysłać zakup, lub confirmationResponse: "decline", aby go anulować — przy odrzuceniu nic nie jest naliczane. Token jest powiązany z dokładnie tymi argumentami i podaną ceną oraz wygasa po krótkim czasie: brakujący, wygasły, zmodyfikowany lub już niepasujący token przy wywołaniu potwierdzającym po prostu zwraca zupełnie nowe potwierdzenie z nowym tokenem — nigdy błąd, nigdy obciążenie. Jeśli nie da się ustalić ceny przy którymkolwiek wywołaniu, narzędzie zwraca status: "price_unavailable" zamiast tokena i nigdy nie obciąża konta; spróbuj ponownie później. Potwierdzone wywołanie zwraca natychmiast status: "pending" oraz operationId — rejestracja kończy się w tle; sprawdź ją za pomocą async_operation_get.

  • Parametr: domain

    Wymagane: Tak

    Typ i ograniczenia: W pełni kwalifikowana nazwa domeny do rejestracji, np. example.com. Akceptuje Unicode (IDN) lub ASCII (A-label) — automatycznie normalizowana do punycode.

  • Parametr: years

    Wymagane: Tak

    Typ i ograniczenia: Okres rejestracji w latach. 110 to granica zewnętrzna; akceptowany zakres zależy od danego TLD — zobacz minRegisterPeriodInYears/maxRegisterPeriodInYears z domains_check_availability. Wartości spoza zakresu są odrzucane, a nie dostosowywane.

  • Parametr: autoRenew

    Wymagane: Tak

    Typ i ograniczenia: Boolean. Gdy true, domena odnawia się automatycznie po wygaśnięciu przy użyciu domyślnej metody płatności konta.

  • Parametr: privacy.level

    Wymagane: Tak

    Typ i ograniczenia: high ukrywa dane kontaktowe registranta przed publicznym WHOIS; public je publikuje.

  • Parametr: privacy.userConsent

    Wymagane: Tak

    Typ i ograniczenia: Boolean. Musi potwierdzać zgodę na wybrane ustawienie prywatności.

  • Parametr: contacts.registrant

    Wymagane: Tak

    Typ i ograniczenia: contactId string (27–32 znaki alfanumeryczne), z contacts_save.

  • Parametr: contacts.admin

    Wymagane: Tak

    Typ i ograniczenia: contactId string (27–32 znaki alfanumeryczne), z contacts_save.

  • Parametr: contacts.tech

    Wymagane: Tak

    Typ i ograniczenia: contactId ciąg znaków (27–32 znaki alfanumeryczne), z contacts_save.

  • Parametr: contacts.billing

    Wymagane: Tak

    Typ i ograniczenia: contactId ciąg znaków (27–32 znaki alfanumeryczne), z contacts_save.

  • Parametr: contacts.attributes

    Wymagane: Nie

    Typ i ograniczenia: Tablica identyfikatorów kontaktów z rozszerzonymi atrybutami (do 5); wymagana tylko dla niektórych TLD, w przeciwnym razie pomiń lub użyj null.

  • Parametr: confirmationToken

    Wymagane: Nie

    Typ i ograniczenia: Ciąg znaków, do 4096 znaków. Token wydany przez serwer, zwrócony przez wcześniejsze wywołanie domain_register dla dokładnie tych argumentów. Pomiń przy pierwszym wywołaniu dla nowej próby rejestracji. Wygasa po krótkim czasie i jest powiązany z dokładnymi argumentami oraz ceną, dla których został wydany — wyślij go ponownie bez zmian wraz z confirmationResponse, aby na nim wykonać działanie.

  • Parametr: confirmationResponse

    Wymagane: Warunkowo

    Typ i ograniczenia: "accept" lub "decline". Ma znaczenie tylko razem z prawidłowym confirmationToken. "accept" wysyła rejestrację (obciążaną opłatą) pokazaną w tym potwierdzeniu; "decline" anuluje ją bez obciążania opłatą. Pomiń przy pierwszym wywołaniu.

Zwraca — po pierwszym wywołaniu (nic nie zostało naliczone):

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

Obok tego JSON-a odpowiedź tekstowa narzędzia text jest pełnym potwierdzeniem do pokazania użytkownikowi — powtarza domenę, okres i cenę powyżej, a także zawiera wiersze dla Auto-renew: on/off, WHOIS privacy: on/off, Payment source: Spaceship account funds oraz każdego z kontaktów registrant/admin/tech/billing (imię i nazwisko, e-mail, kraj — kontakt zgodny z registrantem ma opis „same as registrant”), po czym następują instrukcje dotyczące następnego wywołania. W przypadku okresu wieloletniego price.amount to łączna kwota za cały okres, a price.pricePerYear to ta łączna kwota podzielona przez długość okresu — np. years: 5 dla .com zwraca { "amount": 48.52, "pricedYears": 5, "pricePerYear": 9.70 }, a example.ai z years: 2 zwraca { "amount": 159.96, "pricedYears": 2, "pricePerYear": 79.98 }.

Zwraca — po confirmationResponse: "accept" (rejestracja wysłana):

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

Zwraca — po confirmationResponse: "decline" (nic nie zostało naliczone):

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

Zwraca — jeśli nie można ustalić ceny, przy dowolnym wywołaniu:

{
"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 może mieć wartość:

  • Status: confirmation_required

    Znaczenie: Podgląd — nic nie zostało naliczone. Pokaż użytkownikowi tekst odpowiedzi, a następnie wywołaj ponownie z tym confirmationToken i confirmationResponse. Zwracane również, z nowym tokenem, gdy przesłany confirmationToken jest brakujący, wygasły, zmodyfikowany lub nie odpowiada już bieżącym argumentom/cenie — nigdy jako błąd.

  • Status: cancelled

    Znaczenie: Zakup został odrzucony (confirmationResponse: "decline"), więc nic nie zostało wysłane.

  • Status: pending

    Znaczenie: Wysłano; rejestr kończy operację w tle. Odpytuj async_operation_get za pomocą operationId.

  • Status: price_unavailable

    Znaczenie: Nie udało się ustalić ceny, więc nie wydano tokena i nic nie zostało naliczone. Spróbuj ponownie później.

operationId to prosty ciąg znaków — przekaż go do async_operation_get, które informuje, czy rejestracja ostatecznie się powiedzie, czy zakończy niepowodzeniem. price pokazana przy confirmation_required to dokładnie kwota, która zostanie naliczona przy confirmationResponse: "accept"price.amount to suma za cały ten okres, a price.pricedYears określa długość okresu, więc zawsze pokazuj te dwie wartości razem. Gdy TLD obejmuje opłatę ICANN, price.amount już ją zawiera, a price.icannFee podaje jej wysokość, aby można ją było wyjaśnić.

domain_set_contacts — Ustaw kontakty domeny

Zmienia kontakty przypisane do domeny, którą posiadasz. Kończy się natychmiast (brak operacji do odpytywania).

  • Parametr: domainName

    Wymagane: Tak

    Typ i ograniczenia: W pełni kwalifikowana nazwa domeny. Akceptuje Unicode (IDN) lub ASCII (A-label) — automatycznie normalizowana do punycode.

  • Parametr: registrant

    Wymagane: Tak

    Typ i ograniczenia: contactId ciąg znaków (27–32 znaki alfanumeryczne), z contacts_save.

  • Parametr: admin

    Wymagane: Nie

    Typ i ograniczenia: contactId ciąg znaków (27–32 znaki alfanumeryczne) lub null.

  • Parametr: tech

    Wymagane: Nie

    Typ i ograniczenia: contactId ciąg znaków (27–32 znaki alfanumeryczne) lub null.

  • Parametr: billing

    Wymagane: Nie

    Typ i ograniczenia: contactId ciąg znaków (27–32 znaki alfanumeryczne) lub null.

  • Parametr: attributes

    Wymagane: Nie

    Typ i ograniczenia: Tablica identyfikatorów kontaktów z rozszerzonymi atrybutami (do 5); wymagana tylko dla niektórych TLD, w przeciwnym razie pomiń lub użyj null.

Zwraca

{ "verificationStatus": "verification" }

Zwrócone verificationStatus odzwierciedla weryfikację e-mail zgodnie z ICANN RAA: verification — registrant musi potwierdzić swój adres e-mail (wysyłana jest wiadomość potwierdzająca); success — już potwierdzono; null — weryfikacja RAA nie dotyczy tej domeny.

domain_set_nameservers — Ustaw serwery nazw domeny

Zmienia serwery nazw domeny na poziomie rejestratora. Kończy się natychmiast (brak operacji do odpytywania). Zmiana jest następnie widoczna w domains_list.

  • Parametr: domainName

    Wymagane: Tak

    Typ i ograniczenia: W pełni kwalifikowana nazwa domeny. Akceptuje Unicode (IDN) lub ASCII (A-label) — automatycznie normalizowana do punycode.

  • Parametr: provider

    Wymagane: Tak

    Typ i ograniczenia: basic (domyślne serwery nazw Spaceship) lub custom (własne hosty).

  • Parametr: hosts

    Wymagane: Warunkowo

    Typ i ograniczenia: Wymagane, gdy provider ma wartość custom: 2–12 nazw hostów serwerów nazw (każda prawidłowa FQDN, 4–255 znaków). Musi zostać pominięte, gdy provider ma wartość basic.

Zwraca

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

Ponowne zastosowanie stanu, w którym domena już się znajduje (np. ustawienie basic, gdy jest już ustawione basic) zwraca błąd walidacji zamiast powodzenia bez działania — traktuj to jako oczekiwany wynik, a nie niepowodzenie wymagające ponowienia próby.

Rekordy DNS

Pole domainName używane przez te narzędzia akceptuje Unicode (IDN) lub ASCII (A-label) i jest automatycznie normalizowane do punycode; obsługa TLD nie jest tutaj wymuszana.

dns_records_get — Pobierz rekordy DNS

Pobiera stronicowaną listę rekordów zasobów DNS dla domeny.

  • Parametr: domainName

    Wymagane: Tak

    Typ i ograniczenia: Domena, której rekordy mają zostać pobrane.

  • Parametr: take

    Wymagane: Nie

    Typ i ograniczenia: Liczba elementów na stronę, 1–500. Domyślnie 100.

  • Parametr: skip

    Wymagane: Nie

    Typ i ograniczenia: Elementy do pominięcia, 0 lub więcej. Domyślnie 0.

  • Parametr: orderBy

    Wymagane: Nie

    Typ i ograniczenia: Do 8 kluczy sortowania: type, -type, name, -name.

Zwraca{ items, total }. Każdy element jest rekordem opisanym w sekcji Kształty rekordów oraz może zawierać opcjonalne pole group wskazujące, skąd pochodzi rekord (custom — utworzony przez Ciebie, product — zarządzany przez produkt Spaceship, personalNs — osobiste serwery nazw).

dns_records_save — Zapisz rekordy DNS

Dodaje niestandardowe rekordy DNS lub aktualizuje TTL istniejących. Rekordy są dopasowywane bez rozróżniania wielkości liter, z wyjątkiem rekordów TXT (z rozróżnianiem wielkości liter).

  • Parametr: domainName

    Wymagane: Tak

    Typ i ograniczenia: Domena, której rekordy mają zostać zaktualizowane.

  • Parametr: records

    Wymagane: Tak

    Typ i ograniczenia: 1–500 rekordów — zobacz Kształty rekordów. Każdy może zawierać opcjonalne pole ttl.

  • Parametr: force

    Wymagane: Nie

    Typ i ograniczenia: Wartość logiczna. Pomija sprawdzanie rozwiązywania konfliktów i wymusza aktualizację strefy.

Zwraca{ "saved": <number> }, liczbę przesłanych rekordów. Pomyślna odpowiedź oznacza, że wszystkie rekordy zostały zaakceptowane; jeśli którykolwiek rekord zakończy się niepowodzeniem, całe wywołanie zwraca zamiast tego błąd.

dns_records_delete — Usuń rekordy DNS

Usuwa niestandardowe rekordy DNS. Usunięć nie można cofnąć. Rekordy są dopasowywane bez rozróżniania wielkości liter, z wyjątkiem rekordów TXT (z rozróżnianiem wielkości liter).

  • Parametr: domainName

    Wymagane: Tak

    Typ i ograniczenia: Domena, której rekordy mają zostać usunięte.

  • Parametr: records

    Wymagane: Tak

    Typ i ograniczenia: 1–500 rekordów identyfikujących istniejące rekordy — te same kształty co przy zapisie, ale bez ttl.

Zwraca{ "deleted": <number> }, liczbę przesłanych rekordów. Jeśli nie można dopasować któregokolwiek rekordu, całe wywołanie kończy się niepowodzeniem i nic nie zostaje usunięte.

Kształty rekordów

Każdy rekord zawiera:

  • type — jeden z 13 obsługiwanych typów poniżej.

  • name — nazwa rekordu bez domeny: użyj @ dla samej domeny (apex) oraz * dla symbolu wieloznacznego.

  • ttl (tylko zapis, opcjonalnie) — czas pamięci podręcznej w sekundach, 60–3600.

Pola specyficzne dla typu:

  • Typ: A

    Pola: address — adres IPv4.

  • Typ: AAAA

    Pola: address — adres IPv6.

  • Typ: CNAME

    Pola: cname — kanoniczna nazwa domeny (maks. 253 znaki).

  • Typ: ALIAS

    Pola: aliasName — kanoniczna nazwa domeny; zachowanie podobne do CNAME dla apexu, gdzie CNAME nie jest dozwolony.

  • Typ: NS

    Pola: nameserver — nazwa serwera nazw.

  • Typ: PTR

    Pola: pointer — nazwa domeny dla podanego adresu IP.

  • Typ: TXT

    Pola: value — wartość tekstowa (dopasowywana z rozróżnianiem wielkości liter).

  • Typ: MX

    Pola: exchange — serwer pocztowy; preference — priorytet (0–65535, preferowana niższa wartość).

  • Typ: CAA

    Pola: flag0 lub 128 (bit krytyczny); tagissue, issuewild lub iodef; value — identyfikator CA z opcjonalnymi parametrami.

  • Typ: SRV

    Pola: service (np. _sip); protocol (np. _tcp); priority i weight (0–65535); port (1–65535); target — nazwa domeny serwera.

  • Typ: TLSA

    Pola: usage, selector, matching (każde 0–255); port* lub _<165535>; protocol (np. _tcp); associationData — skrót certyfikatu lub dane.

  • Typ: HTTPS

    Pola: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN lub .; opcjonalnie port (* lub _<165535>), scheme (musi być _https, gdy port jest ustawiony), svcParams.

  • Typ: SVCB

    Pola: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN lub .; opcjonalnie port, scheme (np. _tcp), svcParams.

Operacje asynchroniczne

async_operation_get — Pobierz status operacji asynchronicznej

Sprawdza długotrwałą operację uruchomioną przez inne narzędzie (obecnie domain_register). Wywołaj je z parametrem operationId ustawionym na operationId zwrócone przez tamto narzędzie i powtarzaj, aż status będzie mieć wartość success lub failed.

  • Parametr: operationId

    Wymagane: Tak

    Typ i ograniczenia: Ciąg alfanumeryczny, maks. 36 znaków, zwrócony przez narzędzie, które uruchomiło operację.

Zwraca

  • Pole: operationId

    Znaczenie: Odpytywana operacja.

  • Pole: status

    Znaczenie: pending, success lub failed.

  • Pole: type

    Znaczenie: Typ operacji lub null.

  • Pole: details

    Znaczenie: Dodatkowe szczegóły operacji lub null.

  • Pole: createdAt / modifiedAt

    Znaczenie: Kiedy operacja została utworzona / ostatnio zaktualizowana (modifiedAt może mieć wartość null).

Błędy

Gdy wywołanie się nie powiedzie, narzędzie zwraca błąd z kodem i czytelnym dla człowieka polem detail wyjaśniającym, co poszło nie tak — na przykład nieprawidłowe dane wejściowe (błędnie sformatowana nazwa domeny lub identyfikator kontaktu), domenę lub kontakt, które nie istnieją, albo konflikt z bieżącym stanem. Jeśli narzędzie zostanie odrzucone, ponieważ asystent nie otrzymał do niego dostępu, połącz ponownie Spaceship MCP i zatwierdź żądany dostęp.

Wymagany jest prawidłowy adres e-mail