Spaceship MCP는 AI 어시스턴트(예: Claude)를 Spaceship 계정에 연결합니다. 이를 통해 어시스턴트는 도메인을 확인하고 등록하며, 도메인 연락처를 관리하고, 사용자를 대신해 DNS 레코드를 읽거나 편집할 수 있습니다 — 사용자는 자연어로 요청만 하면 되고, 어시스턴트가 적절한 도구를 호출합니다.
Spaceship 계정이 필요합니다. AI 어시스턴트에 Spaceship MCP를 추가하면 Spaceship에 로그인하고 어시스턴트에 계정 접근 권한을 부여하라는 요청을 받게 됩니다. 어시스턴트가 사용할 수 있는 도구는 사용자가 승인한 접근 권한에 따라 달라집니다 — 접근 권한이 부여되지 않아 도구가 거부되면 다시 연결하고 필요한 접근 권한을 승인하세요.
도구: contacts_save
기능: 연락처 세부 정보를 저장하고 연락처 ID 받기
도구: contacts_get
기능: ID로 저장된 연락처 읽기
도구: domains_list
기능: 도메인 목록 보기 또는 단일 도메인 조회
도구: domains_check_availability
기능: 도메인이 등록 가능한지 확인
도구: domain_register
기능: 도메인 등록(구매) — 비용이 청구됨
도구: domain_set_contacts
기능: 소유한 도메인에 연락처 할당
도구: dns_records_get
기능: 도메인의 DNS 레코드 읽기
도구: dns_records_save
기능: DNS 레코드 추가 또는 TTL 업데이트
도구: dns_records_delete
기능: DNS 레코드 삭제
도구: async_operation_get
기능: 장시간 실행 작업의 상태 확인
여러 도구는 함께 사용되도록 설계되어 있습니다. 하나의 출력이 다음 도구의 입력이 됩니다.
domains_check_availability — 원하는 이름을 확인합니다. result가 available일 때만 진행하세요. 프리미엄 이름의 가격은 premiumPricing에 포함됩니다.
contacts_save — 등록용 연락처 세부 정보를 저장합니다. contactId를 반환합니다. 모든 역할에 하나의 contactId를 재사용하거나 여러 연락처를 저장할 수 있습니다.
domain_register — 도메인을 등록하며 연락처 ID를 contacts.registrant, contacts.admin, contacts.tech 및 contacts.billing로 전달합니다. 이 작업은 계정의 기본 결제 수단으로 청구되며 되돌릴 수 없습니다. 즉시 operationId와 status: pending를 반환하며 — 등록은 백그라운드에서 완료됩니다.
async_operation_get — 진행 상황을 확인하려면 3단계의 operationId를 전달하세요. status가 success 또는 failed가 될 때까지 반복합니다.
domains_check_availability ──▶ contacts_save ──▶ domain_register ──▶ async_operation_get(available?) (contactId) (operationId) (pending → success/failed)
contacts_save — 새 연락처 세부 정보를 저장합니다. contactId를 반환합니다(또는 contacts_get를 통해 확인 가능한 기존 ID를 재사용할 수 있습니다).
domain_set_contacts — 연락처 ID를 도메인에 할당합니다. 이 작업은 즉시 완료되며 verificationStatus를 반환합니다. verification은 등록자가 변경 사항이 완전히 적용되기 전에 이메일 주소를 확인해야 함을 의미하며(이메일이 발송됨), success는 이미 확인되었음을 의미하고, null은 해당 도메인에 확인이 필요 없음을 의미합니다.
domains_list — 관리하려는 도메인을 찾습니다(이름을 알고 있다면 직접 전달해도 됩니다).
dns_records_get — 도메인의 현재 레코드를 읽습니다.
dns_records_save 또는 dns_records_delete — 레코드를 추가, 업데이트 또는 제거합니다. dns_records_get가 반환하는 레코드는 저장 및 삭제 도구가 허용하는 것과 동일한 형식입니다(삭제는 ttl만 생략). 따라서 assistant는 읽고, 조정하고, 다시 쓸 수 있습니다. 일치는 TXT 레코드를 제외하고 대소문자를 구분하지 않으며, TXT 레코드는 대소문자를 구분합니다.
domains_list — 정렬과 함께 모든 도메인을 페이지별로 확인하거나 이름으로 단일 도메인을 가져옵니다. 각 도메인에는 만료일, 자동 갱신 설정, 상태, 네임서버, 개인정보 보호, 할당된 연락처 ID가 포함됩니다.
contacts_get — 도메인에서 보이는 연락처 ID 뒤에 있는 세부 정보를 조회합니다.
모든 도구는 결과를 구조화된 JSON으로 반환합니다. 장기 실행 작업(현재는 domain_register만 해당)은 async_operation_get로 폴링할 작업 ID를 반환하며, 다른 모든 도구는 즉시 완료됩니다.
연락처는 도메인 등록에 연결된 개인 또는 조직(등록자, 관리자, 기술 담당자, 청구 담당자)입니다. 연락처는 어디서나 contact ID로 참조됩니다 — 27–32자의 영숫자 문자열입니다.
contacts_save — 연락처 저장연락처 세부 정보를 저장하고 생성된 연락처 ID를 반환합니다. 일부 필드(예: stateProvince 및 postalCode)의 유효성 검사는 선택한 국가에 따라 달라집니다.
매개변수: firstName
필수: 예
유형 및 제약 조건: 문자열, 1–64자. 하이픈과 아포스트로피를 포함할 수 있습니다.
매개변수: lastName
필수: 예
유형 및 제약 조건: 문자열, 1–64자. 하이픈과 아포스트로피를 포함할 수 있습니다.
매개변수: email
필수: 예
유형 및 제약 조건: 유효한 이메일 주소, 최대 254자.
매개변수: address1
필수: 예
유형 및 제약 조건: 주소 줄 1. 문자열, 1–128자.
매개변수: city
필수: 예
유형 및 제약 조건: 문자열, 1–64자.
매개변수: country
필수: 예
유형 및 제약 조건: 두 글자 국가 코드(ISO 3166-1 alpha-2), 예: US.
매개변수: phone
필수: 예
유형 및 제약 조건: 국제 형식 +CountryCode.Number, 예: +1.2025551234. 최대 32자.
매개변수: organization
필수: 아니요
유형 및 제약 조건: 조직/회사 이름. 1–128자.
매개변수: address2
필수: 아니요
유형 및 제약 조건: 주소 줄 2. 1–128자.
매개변수: stateProvince
필수: 아니요
유형 및 제약 조건: 주/도 이름, 1–64자. 국가에 따라 필수일 수 있습니다.
매개변수: postalCode
필수: 아니요
유형 및 제약 조건: 1–16자. 국가에 따라 필수일 수 있습니다.
매개변수: phoneExt
필수: 아니요
유형 및 제약 조건: 전화 내선번호, 1–16자.
매개변수: fax
필수: 아니요
유형 및 제약 조건: 팩스 번호, 동일한 +CountryCode.Number 형식, 최대 32자.
매개변수: faxExt
필수: 아니요
유형 및 제약 조건: 팩스 내선번호, 1–16자.
매개변수: taxNumber
필수: 아니요
유형 및 제약 조건: 세금 번호, 1–32자.
반환값
{ "contactId": "..." }
contactId (27–32자의 영숫자 문자)는 domain_register, domain_set_contacts 및 contacts_get에 전달하는 값입니다.
contacts_get — 연락처 가져오기연락처 ID로 저장된 연락처의 세부 정보를 읽습니다. (모든 연락처를 나열하는 도구는 없으며 — 연락처 ID는 contacts_save 또는 contacts 필드의 domains_list 결과에서 가져옵니다.)
매개변수: contactId
필수: 예
유형 및 제약 조건: 연락처 ID, 27–32자의 영숫자.
반환값 — { contact }, 포함 항목:
필드: firstName, lastName, email, address1, city, country, phone, postalCode
유형: 문자열
필드: organization, address2, stateProvince, phoneExt, fax, faxExt, taxNumber
유형: 문자열 또는 null
domains_list — 도메인 목록도메인의 페이지네이션된 목록을 가져옵니다. 대신 단일 도메인을 이름으로 가져오려면 domain을 전달하세요(이 경우 페이지네이션과 정렬은 무시되며, 제공된 경우 결과에 이를 알리는 note가 포함됩니다).
매개변수: domain
필수 여부: 아니요
유형 및 제약 조건: 단일 도메인을 가져오기 위한 정규화된 도메인 이름(ASCII/A-label).
매개변수: take
필수 여부: 아니요
유형 및 제약 조건: 페이지당 항목 수, 1–100. 기본값 10.
매개변수: skip
필수 여부: 아니요
유형 및 제약 조건: 건너뛸 항목 수, 0 이상. 기본값 0.
매개변수: orderBy
필수 여부: 아니요
유형 및 제약 조건: 최대 8개의 정렬 키: name, unicodeName, registrationDate, expirationDate; 내림차순은 - 접두사를 사용합니다(예: -expirationDate).
반환값 — { items, total }, 각 항목은 하나의 도메인을 설명합니다:
필드: name / unicodeName
의미: ASCII 및 Unicode 형식의 도메인 이름.
필드: isPremium
의미: 도메인이 프리미엄 이름인지 여부.
필드: autoRenew
의미: 자동 갱신이 활성화되어 있는지 여부.
필드: registrationDate / expirationDate
의미: 등록 및 만료 타임스탬프.
필드: lifecycleStatus
의미: creating, registered, grace1, grace2 또는 redemption.
필드: verificationStatus
의미: verification, success, failed 또는 해당되지 않을 때 null.
필드: eppStatuses
의미: 레지스트리 상태 코드(예: 이전 잠금).
필드: suspensions
의미: 활성 정지 목록이며, 각 항목에는 reasonCode가 있습니다.
필드: privacyProtection
의미: { level: "public" | "high", contactForm: boolean }.
필드: nameservers
의미: { provider: "basic" | "custom", hosts: [...] }.
필드: contacts
의미: 연락처 ID: registrant 및 admin/tech/billing/attributes(null일 수 있음). contacts_get을 통해 읽을 수 있습니다.
domains_check_availability — 도메인 사용 가능 여부 확인하나 이상의 도메인 이름이 등록 가능한지 확인합니다.
매개변수: domains
필수 여부: 예
유형 및 제약 조건: 1–20개의 정규화된 도메인 이름(ASCII/A-label).
반환값 — { results }, 요청된 각 이름당 하나의 항목:
필드: domain
의미: 확인한 이름.
필드: result
의미: available, taken, invalidDomainName, tldNotSupported 또는 unexpectedError.
필드: premiumPricing
의미: 프리미엄 이름의 경우: { operation, price, currency } 목록이며, 여기서 operation은 register, transfer, renew 또는 restore입니다. 일반 이름의 경우 비어 있습니다.
domain_register — 도메인 등록도메인을 등록(구매)합니다. 이 작업은 계정의 기본 결제 수단으로 청구되며 되돌릴 수 없습니다. 권장 순서: domains_check_availability → contacts_save → domain_register. 이 도구는 보류 상태로 즉시 반환하며, 등록 자체는 백그라운드에서 완료됩니다 — async_operation_get으로 확인하세요.
매개변수: domain
필수 여부: 예
유형 및 제약 조건: 등록할 정규화된 도메인 이름, 예: example.com.
매개변수: years
필수 여부: 예
유형 및 제약 조건: 등록 기간(년), 1–10.
매개변수: autoRenew
필수 여부: 예
유형 및 제약 조건: 불리언. true이면 계정의 기본 결제 수단을 사용해 만료 시 도메인이 자동으로 갱신됩니다.
매개변수: privacy.level
필수 여부: 예
유형 및 제약 조건: high는 등록자의 연락처 세부 정보를 공개 WHOIS에서 숨기고, public은 이를 공개합니다.
매개변수: privacy.userConsent
필수 여부: 예
유형 및 제약 조건: 불리언. 선택한 개인정보 보호 설정에 동의함을 확인해야 합니다.
매개변수: contacts.registrant
필수 여부: 예
유형 및 제약 조건: 연락처 ID(contacts_save에서 가져옴).
매개변수: contacts.admin
필수 여부: 예
유형 및 제약 조건: 연락처 ID.
매개변수: contacts.tech
필수 여부: 예
유형 및 제약 조건: 연락처 ID.
매개변수: contacts.billing
필수 여부: 예
유형 및 제약 조건: 연락처 ID.
매개변수: contacts.attributes
필수 여부: 아니요
유형 및 제약 조건: 최대 5개의 추가 연락처 ID이며, 특정 TLD에만 필요합니다.
반환값
{"operationId": "...","domain": "example.com","years": 1,"status": "pending","note": "Registration of example.com submitted. ..."}
operationId를 async_operation_get에 전달하여 등록이 성공했는지 확인하세요.
domain_set_contacts — 도메인 연락처 설정소유한 도메인에 할당된 연락처를 변경합니다. 즉시 완료됩니다(작업 ID 없음).
매개변수: domainName
필수 여부: 예
유형 및 제약 조건: 정규화된 도메인 이름(ASCII/A-label).
매개변수: registrant
필수 여부: 예
유형 및 제약 조건: 연락처 ID.
매개변수: admin
필수 여부: 아니요
유형 및 제약 조건: 연락처 ID 또는 null.
매개변수: tech
필수 여부: 아니요
유형 및 제약 조건: 연락처 ID 또는 null.
매개변수: billing
필수 여부: 아니요
유형 및 제약 조건: 연락처 ID 또는 null.
매개변수: attributes
필수 여부: 아니요
유형 및 제약 조건: 최대 5개의 연락처 ID 또는 null.
반환값
{ "verificationStatus": "verification" }
verification — 등록자는 이메일 주소를 확인해야 합니다(확인 이메일이 전송됨); success — 이미 확인됨; null — 이 도메인에는 확인이 필요하지 않습니다.
dns_records_get — DNS 레코드 가져오기도메인의 DNS 리소스 레코드에 대한 페이지네이션된 목록을 가져옵니다.
매개변수: domainName
필수 여부: 예
유형 및 제약 조건: 레코드를 가져올 도메인.
매개변수: take
필수 여부: 아니요
유형 및 제약 조건: 페이지당 항목 수, 1–500. 기본값 100.
매개변수: skip
필수 여부: 아니요
유형 및 제약 조건: 건너뛸 항목 수, 0 이상. 기본값 0.
매개변수: orderBy
필수 여부: 아니요
유형 및 제약 조건: 최대 8개의 정렬 키: type, -type, name, -name.
반환값 — { items, total }. 각 항목은 레코드 형태에 설명된 레코드이며, 추가로 레코드의 출처를 나타내는 선택적 group 필드가 포함될 수 있습니다(custom — 사용자가 생성, product — Spaceship 제품이 관리, personalNs — 개인 네임서버).
dns_records_save — DNS 레코드 저장사용자 지정 DNS 레코드를 추가하거나 기존 레코드의 TTL을 업데이트합니다. 레코드는 대소문자를 구분하지 않고 일치시키지만, TXT 레코드는 예외로 대소문자를 구분합니다.
매개변수: domainName
필수: 예
유형 및 제약 조건: 레코드를 업데이트할 도메인입니다.
매개변수: records
필수: 예
유형 및 제약 조건: 1–500개의 레코드 — 레코드 형식을(를) 참조하세요. 각 레코드에는 선택적 ttl이(가) 포함될 수 있습니다.
매개변수: force
필수: 아니요
유형 및 제약 조건: 불리언입니다. 충돌 해결 검사를 건너뛰고 영역 업데이트를 강제로 수행합니다.
반환값 — { "saved": <number> }, 제출된 레코드 수입니다. 성공 응답은 모든 레코드가 수락되었음을 의미하며, 하나라도 실패하면 전체 호출은 대신 오류를 반환합니다.
dns_records_delete — DNS 레코드 삭제사용자 지정 DNS 레코드를 삭제합니다. 삭제는 되돌릴 수 없습니다. 레코드는 TXT 레코드(대소문자 구분)를 제외하고 대소문자를 구분하지 않고 일치됩니다.
매개변수: domainName
필수: 예
유형 및 제약 조건: 레코드를 삭제할 도메인입니다.
매개변수: records
필수: 예
유형 및 제약 조건: 기존 레코드를 식별하는 1–500개의 레코드 — 저장과 동일한 형식이지만 ttl은(는) 제외됩니다.
반환값 — { "deleted": <number> }, 제출된 레코드 수입니다.
모든 레코드에는 다음이 있습니다:
type — 아래에서 지원되는 13가지 유형 중 하나입니다.
name — 도메인을 제외한 레코드 이름: 도메인 자체(apex)에는 @를 사용하고 와일드카드에는 *를 사용합니다.
ttl (저장 전용, 선택 사항) — 초 단위 캐시 시간, 60–3600입니다.
유형별 필드:
유형: A
필드: address — IPv4 주소입니다.
유형: AAAA
필드: address — IPv6 주소입니다.
유형: CNAME
필드: cname — 정식 도메인 이름(최대 253자)입니다.
유형: ALIAS
필드: aliasName — 정식 도메인 이름입니다. CNAME이 허용되지 않는 apex에서 CNAME과 유사하게 동작합니다.
유형: NS
필드: nameserver — 네임서버 이름입니다.
유형: PTR
필드: pointer — 지정된 IP 주소의 도메인 이름입니다.
유형: TXT
필드: value — 텍스트 값(대소문자를 구분하여 일치).
유형: MX
필드: exchange — 메일 서버, preference — 우선순위(0–65535, 낮을수록 우선).
유형: CAA
필드: flag — 0 또는 128(critical bit), tag — issue, issuewild 또는 iodef, value — 선택적 매개변수가 있는 CA 식별자입니다.
유형: SRV
필드: service (예: _sip), protocol (예: _tcp), priority 및 weight (0–65535), port (1–65535), target — 서버 도메인 이름입니다.
유형: TLSA
필드: usage, selector, matching (각각 0–255), port — * 또는 _<1–65535>, protocol (예: _tcp), associationData — 인증서 해시 또는 데이터입니다.
유형: HTTPS
필드: svcPriority (0–65535, 0 = AliasMode), targetName — FQDN 또는 ., 선택적 port (* 또는 _<1–65535>), scheme (_https는 port가 설정된 경우여야 함), svcParams.
유형: SVCB
필드: svcPriority (0–65535, 0 = AliasMode), targetName — FQDN 또는 ., 선택적 port, scheme (예: _tcp), svcParams.
async_operation_get — 비동기 작업 상태 가져오기다른 도구가 시작한 장기 실행 작업(현재는 domain_register만 해당)의 상태를 확인합니다. 해당 도구가 반환한 operationId로 호출하고, status가 success 또는 failed가 될 때까지 반복합니다.
매개변수: operationId
필수: 예
유형 및 제약 조건: 영숫자 문자열, 최대 36자이며 작업을 시작한 도구가 반환합니다.
반환값
필드: operationId
의미: 폴링 중인 작업입니다.
필드: status
의미: pending, success 또는 failed.
필드: type
의미: 작업 유형 또는 null입니다.
필드: details
의미: 작업에 대한 추가 세부 정보 또는 null입니다.
필드: createdAt / modifiedAt
의미: 작업이 생성된 시점 / 마지막으로 업데이트된 시점(modifiedAt은 null일 수 있음)입니다.
호출이 실패하면 도구는 코드와 사람이 읽을 수 있는 detail을 포함한 오류를 반환하여 무엇이 잘못되었는지 설명합니다. 예를 들어 잘못된 입력(형식이 잘못된 도메인 이름 또는 연락처 ID), 존재하지 않는 도메인 또는 연락처, 또는 현재 상태와의 충돌 등이 있습니다. 도구에 대한 액세스 권한이 assistant에 부여되지 않아 도구가 거부된 경우 Spaceship MCP를 다시 연결하고 요청하는 액세스를 승인하세요.