Spaceship MCP Connector conecta tu asistente de IA (como Claude) con tu cuenta de Spaceship. A través de él, el asistente puede comprobar la disponibilidad y los precios de dominios, gestionar contactos y nameservers de dominios, y leer o editar registros DNS en tu nombre — solo tienes que pedirlo en lenguaje natural, y el asistente llama a las herramientas adecuadas.
Spaceship MCP Connector no compra dominios. El asistente puede comprobar si un nombre está disponible y cuánto cuesta, pero la compra en sí se realiza en spaceship.com.
Necesitas una cuenta de Spaceship. Spaceship MCP Connector está disponible en https://connector-mcp.spaceship.com/mcp.
Claude (web y escritorio) — abre Configuración, elige Connectors, busca Spaceship en el directorio de conectores y añádelo. El Claude de Anthropic es actualmente el cliente con el que hemos verificado que funciona Spaceship MCP Connector.
Otros clientes MCP — añade un servidor MCP remoto y apúntalo a https://connector-mcp.spaceship.com/mcp. Puede que otros clientes funcionen, pero aún no los hemos verificado.
Cuando te conectes, se te pedirá que inicies sesión en Spaceship y concedas al asistente acceso a tu cuenta. Las herramientas que el asistente puede usar dependen del acceso que apruebes — si se rechaza una herramienta porque no se concedió acceso, vuelve a conectarte y aprueba el acceso que necesita.
Herramienta: contacts_save
Qué hace: Guarda los datos de contacto y obtiene un ID de contacto
Herramienta: contacts_get
Qué hace: Leer un contacto guardado por su ID
Herramienta: contacts_list
Qué hace: Listar todos los contactos guardados para encontrar y reutilizar uno
Herramienta: domains_list
Qué hace: Listar tus dominios o buscar un dominio
Herramienta: domains_check_availability
Qué hace: Comprobar si los dominios están disponibles para registrarse y su precio
Herramienta: domain_set_contacts
Qué hace: Asignar contactos a un dominio de tu propiedad
Herramienta: domain_set_nameservers
Qué hace: Cambiar un dominio a nameservers básicos o personalizados
Herramienta: dns_records_get
Qué hace: Leer registros DNS de un dominio
Herramienta: dns_records_save
Qué hace: Añadir registros DNS o actualizar su TTL
Herramienta: dns_records_delete
Qué hace: Eliminar registros DNS
Herramienta: async_operation_get
Qué hace: Comprobar el estado de una operación de larga duración
Ninguna de estas herramientas realiza cargos en tu cuenta.
Siempre que se requiera un contacto (domain_set_contacts), cada función acepta una cadena contactId— nunca detalles de contacto en línea. Guarda primero el contacto con contacts_save (que devuelve su contactId) y luego pasa ese id donde se acepte el contacto. No hay guardado automático en línea; una función no puede recibir un objeto de contacto completo. También puedes reutilizar un contactId de un resultado de contacts_list o uno que leas en un resultado de domains_list.
Un contactId es una cadena de 27–32 caracteres alfanuméricos. Solo tienes que volver a pasarla donde se acepte un contacto.
Varias herramientas están diseñadas para usarse juntas: la salida de una se convierte en la entrada de la siguiente.
domains_check_availability — comprueba el/los nombre(s) que quieres. Cada nombre disponible incluye el price en USD para registrarlo (tanto estándar como premium), o priceUnavailableReason cuando no puede determinarse, además de minRegisterPeriodInYears y maxRegisterPeriodInYears — los plazos que permite el TLD. Ten en cuenta que el price cubre price.pricedYears años, que es el plazo mínimo permitido por el TLD y no siempre es 1.
Cómpralo en spaceship.com. Ninguna herramienta registra un dominio ni genera un enlace de pago, por lo que el asistente no puede completar la compra ni decir que un dominio se registró desde la conversación. Una vez realizada la compra, domains_list muestra el nuevo dominio.
domain_set_contacts — asigna contactos al dominio mediante contactId (guárdalos primero con contacts_save si es necesario). Esto se completa inmediatamente y devuelve un verificationStatus: verification significa que el registrante debe confirmar su dirección de correo electrónico antes de que el cambio se aplique por completo (se le envía un correo electrónico), success significa que ya está confirmado y null significa que no se requiere confirmación para ese dominio.
domains_list — encuentra el dominio y consulta sus nameservers actuales ({ provider, hosts }).
domain_set_nameservers — cámbialo a los servidores de nombres predeterminados de Spaceship con provider: "basic" (sin hosts), o apúntalo a los tuyos con provider: "custom" y una lista de 2–12 hosts. Devuelve el resultado { provider, hosts } y una llamada posterior a domains_list refleja el cambio. Volver a aplicar el estado en el que ya se encuentra un dominio devuelve un error de validación en lugar de una operación sin cambios — trátalo como algo esperado, no como un fallo que deba reintentarse.
domains_list — encuentra el dominio que quieres gestionar (o pasa su nombre directamente si lo conoces).
dns_records_get — lee los registros actuales del dominio.
dns_records_save o dns_records_delete — añade, actualiza o elimina registros. Los registros devueltos por dns_records_get tienen la misma forma que aceptan las herramientas de guardar y eliminar (eliminar solo omite ttl), por lo que el asistente puede leerlos, ajustarlos y volver a escribirlos. La coincidencia no distingue mayúsculas de minúsculas, excepto en los registros TXT, que sí distinguen mayúsculas de minúsculas.
domains_list — recorre todos tus dominios con ordenación o recupera un único dominio por nombre. Cada dominio incluye su fecha de vencimiento, configuración de renovación automática, estado, servidores de nombres, protección de privacidad e ID de contactos asignados.
contacts_list — recorre todos los contactos guardados en tu cuenta para encontrar y reutilizar uno existente (por su ID de contacto) en lugar de crear un duplicado.
contacts_get — consulta los detalles asociados a cualquier ID de contacto que veas en un dominio o en un resultado de contacts_list.
Cada herramienta devuelve su resultado como JSON estructurado y cada herramienta se completa inmediatamente.
Los contactos son las personas u organizaciones asociadas a un registro de dominio (registrante, administrador, técnico, facturación). Se hace referencia a un contacto en todas partes mediante su ID de contacto — una cadena opaca.
contacts_save — Guardar contactoGuarda los datos de contacto y devuelve el ID de contacto generado. La validación de algunos campos (como stateProvince y postalCode) depende del país seleccionado.
Parámetro: firstName
Obligatorio: Sí
Tipo y restricciones: Cadena, 1–64 caracteres. Puede incluir guiones y apóstrofos.
Parámetro: lastName
Obligatorio: Sí
Tipo y restricciones: Cadena, 1–64 caracteres. Puede incluir guiones y apóstrofos.
Parámetro: email
Obligatorio: Sí
Tipo y restricciones: Dirección de correo electrónico válida, máximo 254 caracteres.
Parámetro: address1
Obligatorio: Sí
Tipo y restricciones: Línea de dirección 1. Cadena, 1–128 caracteres.
Parámetro: city
Obligatorio: Sí
Tipo y restricciones: Cadena, 1–64 caracteres.
Parámetro: country
Obligatorio: Sí
Tipo y restricciones: Código de país de dos letras (ISO 3166-1 alpha-2), p. ej. US.
Parámetro: phone
Obligatorio: Sí
Tipo y restricciones: Formato internacional +CountryCode.Number, p. ej. +1.2025551234. Máx. 32 caracteres.
Parámetro: organization
Obligatorio: No
Tipo y restricciones: Nombre de la organización/empresa. 1–128 caracteres.
Parámetro: address2
Obligatorio: No
Tipo y restricciones: Línea 2 de la dirección. 1–128 caracteres.
Parámetro: stateProvince
Obligatorio: No
Tipo y restricciones: Nombre del estado/provincia, 1–64 caracteres. Puede ser obligatorio según el país.
Parámetro: postalCode
Obligatorio: No
Tipo y restricciones: 1–16 caracteres. Puede ser obligatorio según el país.
Parámetro: phoneExt
Obligatorio: No
Tipo y restricciones: Extensión telefónica, 1–16 caracteres.
Parámetro: fax
Obligatorio: No
Tipo y restricciones: Número de fax, mismo formato +CountryCode.Number, máx. 32 caracteres.
Parámetro: faxExt
Obligatorio: No
Tipo y restricciones: Extensión de fax, 1–16 caracteres.
Parámetro: taxNumber
Obligatorio: No
Tipo y restricciones: Número fiscal, 1–32 caracteres.
Devuelve
{ "contactId": "..." }
contactId (27–32 caracteres alfanuméricos) es lo que pasas a domain_set_contacts y contacts_get.
contacts_get — Obtener contactoLee los detalles de un contacto guardado mediante su ID de contacto. Los ID de contacto provienen de contacts_save, contacts_list o del campo contacts de los resultados de domains_list.
Parámetro: contactId
Obligatorio: Sí
Tipo y restricciones: ID de contacto, 27–32 caracteres alfanuméricos.
Devuelve — { contact } con:
Campo: firstName, lastName, email, address1, city, country, phone, postalCode
Tipo: String
Campo: organization, address2, stateProvince, phoneExt, fax, faxExt, taxNumber
Tipo: String o null
contacts_list — Listar contactosEnumera todos los contactos guardados en tu cuenta, para que puedas encontrar y reutilizar un contacto existente (por su ID de contacto) en lugar de crear un duplicado o buscar entre tus dominios. La lista está paginada y se puede ordenar, de forma coherente con domains_list.
Parámetro: take
Obligatorio: No
Tipo y restricciones: Elementos por página, 1–100. Valor predeterminado 10.
Parámetro: skip
Obligatorio: No
Tipo y restricciones: Elementos que se omiten, 0 o más. Valor predeterminado 0.
Parámetro: orderBy
Obligatorio: No
Tipo y restricciones: Hasta 8 claves de ordenación: name, email, organization; antepón - para orden descendente (p. ej. -name).
Devuelve — { items, total } donde total es el número de contactos únicos de la cuenta (deduplicados por ID de contacto, no por el tamaño de la página), y cada elemento contiene suficiente información para distinguir los contactos sin una llamada de seguimiento. Si la cuenta tiene entradas duplicadas para el mismo ID de contacto, se reducen a una sola, por lo que total cuenta contactos distintos en lugar de filas sin procesar del lado del servidor:
Campo: contactId
Tipo: String (27–32 alfanumérico). Pásalo a contacts_get o domain_set_contacts.
Campo: name
Tipo: String — el nombre del contacto.
Campo: email
Tipo: String o null cuando el contacto no tiene un correo electrónico registrado.
Campo: organization
Tipo: String o null cuando el contacto no tiene una organización registrada.
{"items": [{ "contactId": "1anq5bsl9haBy21rOV9aeDWrARBsV", "name": "Ada Lovelace", "email": "ada@example.com", "organization": "Analytical Engines" }],"total": 1}
Las entradas de nombres de dominio (domain/domainName) aceptan Unicode (IDN) o ASCII (A-label) — en cualquier caso, la herramienta normaliza el nombre a punycode automáticamente antes de usarlo. domains_check_availability además requiere un TLD que Spaceship admita para el registro: un dominio cuyo TLD no sea compatible se informa como no disponible en lugar de comprobarse. Las demás herramientas de dominio (domains_list, domain_set_contacts, domain_set_nameservers) y las herramientas DNS solo normalizan el nombre y nunca lo rechazan por compatibilidad del TLD.
domains_list — Listar dominiosRecupera una lista paginada de tus dominios. Pasa domain para obtener en su lugar un único dominio por nombre (entonces se ignoran la paginación y la ordenación, y el resultado incluye una note indicándolo si se proporcionaron).
Parámetro: domain
Obligatorio: No
Tipo y restricciones: Nombre de dominio completo para obtener un único dominio. Acepta Unicode (IDN) o ASCII (A-label) — se normaliza a punycode automáticamente.
Parámetro: take
Obligatorio: No
Tipo y restricciones: Elementos por página, 1–100. Valor predeterminado 10.
Parámetro: skip
Obligatorio: No
Tipo y restricciones: Elementos que se omiten, 0 o más. Valor predeterminado 0.
Parámetro: orderBy
Obligatorio: No
Tipo y restricciones: Hasta 8 claves de ordenación: name, unicodeName, registrationDate, expirationDate; antepón - para orden descendente (p. ej. -expirationDate).
Devuelve — { items, total } donde cada elemento describe un dominio:
Campo: name / unicodeName
Significado: Nombre de dominio en formato ASCII y Unicode.
Campo: isPremium
Significado: Si el dominio es un nombre premium.
Campo: autoRenew
Significado: Si la renovación automática está activada.
Campo: registrationDate / expirationDate
Significado: Marcas de tiempo de registro y vencimiento.
Campo: lifecycleStatus
Significado: creating, registered, grace1, grace2 o redemption.
Campo: verificationStatus
Significado: verification, success, failed o null cuando no corresponda.
Campo: eppStatuses
Significado: Códigos de estado del registro (p. ej., bloqueos de transferencia).
Campo: suspensions
Significado: Suspensiones activas, cada una con un reasonCode.
Campo: privacyProtection
Significado: { level: "public" | "high", contactForm: boolean }.
Campo: nameservers
Significado: { provider: "basic" | "custom", hosts: [...] }.
Campo: contacts
Significado: ID de contacto: registrant, además de admin/tech/billing (pueden ser null) y attributes (una lista de ID de contacto de atributos extendidos, o null). Se pueden leer mediante contacts_get.
Spaceship MCP rellena todos los campos anteriores — incluidos contacts, eppStatuses, suspensions, verificationStatus, nameservers, un autoRenew real y un unicodeName distinto cuando el dominio lo tiene — tanto para la lista de varios elementos como para las consultas de un solo dominio.
domains_check_availability — Comprobar disponibilidad de dominioComprueba si uno o varios nombres de dominio están disponibles para registrarse. Usa el endpoint de dominio único para un nombre y el endpoint masivo para varios. Un dominio cuyo TLD no sea compatible para el registro no se envía en absoluto a la comprobación de disponibilidad — se devuelve inmediatamente como tldNotSupported.
Parámetro: domains
Obligatorio: Sí
Tipo y restricciones: 1–20 nombres de dominio completos. Cada uno acepta Unicode (IDN) o ASCII (A-label) — se normaliza a punycode automáticamente.
Devuelve — { results }, una entrada por cada nombre solicitado:
Campo: domain
Significado: El nombre comprobado.
Campo: result
Significado: available, taken, invalidDomainName, tldNotSupported o unexpectedError.
Campo: premiumPricing
Significado: Para nombres premium: lista de { operation, price, currency } donde operation es register, transfer, renew o restore. Vacío para nombres normales.
Campo: price
Significado: Para nombres available (estándar y premium): el precio en USD para registrar el dominio durante el plazo más corto que permita el TLD — { amount, currency: "USD", pricedYears?, pricePerYear?, icannFee?, isPremium }. amount es el total a pagar por todo ese plazo; pricedYears indica cuántos años cubre. No se informa de ningún precio previo al descuento ni de ningún precio "anterior". icannFee es la tarifa de ICANN (USD) ya incluida en amount, devuelta por separado para que se pueda explicar el desglose; solo aparece cuando el TLD conlleva una tarifa.
Campo: pricePerYear
Significado: Dentro de price: amount dividido entre pricedYears, para que siempre haya una cifra anual disponible para comparar. Cuando pricedYears es 1, es el precio real de un año; por encima de eso, es un promedio anual del plazo, no un plazo que puedas comprar.
Campo: minRegisterPeriodInYears / maxRegisterPeriodInYears
Significado: Para nombres available: el periodo de registro más corto y más largo que ese TLD permite realmente, como dos números simples. Indican al cliente durante qué plazos puede comprar el dominio. Ambos se omiten cuando no se pudo determinar el periodo permitido.
Campo: priceUnavailableReason
Significado: Presente en lugar de price cuando no se pudo determinar el precio de un nombre disponible. La comprobación en sí sigue realizándose correctamente.
Solo se asigna precio a los nombres disponibles; los resultados taken/inválidos no incluyen ni price ni priceUnavailableReason.
La mayoría de los TLD permiten un año, pero algunos no..ai, por ejemplo, tiene un mínimo de dos años. En esos casos, price.amount es el total del plazo mínimo — no un precio de un año sobre el que puedas actuar — y price.pricedYears lo indica:
{"domain": "example.ai","result": "available","premiumPricing": [],"price": { "amount": 159.96, "currency": "USD", "pricedYears": 2, "pricePerYear": 79.98, "isPremium": false },"minRegisterPeriodInYears": 2,"maxRegisterPeriodInYears": 10}
pricePerYear está presente aquí — 159.96 dividido entre los dos años que cubre da 79.98. Esto es el total dividido entre el plazo, no un precio que pudieras pagar por un solo año (no se puede comprar un registro de .ai de un año). Muestra siempre amount junto con pricedYears ("159,96 $ por 2 años"), nunca amount solo. Para un TLD normal, pricedYears es 1 y pricePerYear es igual a amount.
domain_set_contacts — Establecer contactos del dominioCambia los contactos asignados a un dominio de tu propiedad. Se completa inmediatamente (no hay ninguna operación que consultar).
Parámetro: domainName
Obligatorio: Sí
Tipo y restricciones: Nombre de dominio completo. Acepta Unicode (IDN) o ASCII (A-label) — se normaliza a punycode automáticamente.
Parámetro: registrant
Obligatorio: Sí
Tipo y restricciones: contactId string (27–32 alfanumérico), de contacts_save.
Parámetro: admin
Obligatorio: No
Tipo y restricciones: contactId string (27–32 alfanumérico) o null.
Parámetro: tech
Obligatorio: No
Tipo y restricciones: contactId string (27–32 alfanumérico) o null.
Parámetro: billing
Obligatorio: No
Tipo y restricciones: contactId string (27–32 alfanumérico) o null.
Parámetro: attributes
Obligatorio: No
Tipo y restricciones: Array de ID de contacto de atributos extendidos (hasta 5); solo es obligatorio para determinados TLD, en caso contrario omítelo o usa null.
Devuelve
{ "verificationStatus": "verification" }
El verificationStatus devuelto refleja la verificación del correo electrónico ICANN RAA: verification — el registrante debe confirmar su dirección de correo electrónico (se envía un correo de confirmación); success — ya confirmado; null — la verificación RAA no se aplica a este dominio.
domain_set_nameservers — Establecer nameservers del dominioCambia los nameservers de un dominio a nivel de registrador. Se completa inmediatamente (no hay ninguna operación que consultar). El cambio se refleja después en domains_list.
Parámetro: domainName
Obligatorio: Sí
Tipo y restricciones: Nombre de dominio completo. Acepta Unicode (IDN) o ASCII (A-label) — se normaliza a punycode automáticamente.
Parámetro: provider
Obligatorio: Sí
Tipo y restricciones: basic (los nameservers predeterminados de Spaceship) o custom (tus propios hosts).
Parámetro: hosts
Obligatorio: Condicional
Tipo y restricciones: Obligatorio cuando provider es custom: 2–12 nombres de host de servidores de nombres (cada uno un FQDN válido, de 4 a 255 caracteres). Debe omitirse cuando provider es basic.
Devuelve
{ "provider": "custom", "hosts": ["ns1.example.com", "ns2.example.com"] }
Volver a aplicar el estado en el que ya se encuentra un dominio (por ejemplo, establecer basic cuando ya es basic) devuelve un error de validación en lugar de un éxito sin cambios — trátalo como un resultado esperado, no como un fallo que deba reintentarse.
El domainName que aceptan estas herramientas admite Unicode (IDN) o ASCII (A-label) y se normaliza automáticamente a punycode; aquí no se aplica la compatibilidad con TLD.
dns_records_get — Obtener registros DNSRecupera una lista paginada de registros de recursos DNS de un dominio.
Parámetro: domainName
Obligatorio: Sí
Tipo y restricciones: El dominio cuyos registros se van a obtener.
Parámetro: take
Obligatorio: No
Tipo y restricciones: Elementos por página, 1–500. Valor predeterminado 100.
Parámetro: skip
Obligatorio: No
Tipo y restricciones: Elementos que se omiten, 0 o más. Valor predeterminado 0.
Parámetro: orderBy
Obligatorio: No
Tipo y restricciones: Hasta 8 claves de ordenación: type, -type, name, -name.
Devuelve — { items, total }. Cada elemento es un registro como se describe en Formas de registro, además de un campo opcional group que indica de dónde proviene el registro (custom — creado por ti, product — gestionado por un producto de Spaceship, personalNs — servidores de nombres personales).
dns_records_save — Guardar registros DNSAñade registros DNS personalizados o actualiza el TTL de los existentes. Los registros se comparan sin distinguir mayúsculas de minúsculas, excepto los registros TXT (distinguen mayúsculas de minúsculas).
Parámetro: domainName
Obligatorio: Sí
Tipo y restricciones: El dominio cuyos registros se van a actualizar.
Parámetro: records
Obligatorio: Sí
Tipo y restricciones: 1–500 registros — consulta Formas de registro. Cada uno puede incluir un ttl opcional.
Parámetro: force
Obligatorio: No
Tipo y restricciones: Booleano. Omite la comprobación de resolución de conflictos y fuerza la actualización de la zona.
Devuelve — { "saved": <number> }, el número de registros enviados. Una respuesta correcta significa que se aceptaron todos los registros; si falla algún registro, toda la llamada devuelve un error en su lugar.
dns_records_delete — Eliminar registros DNSElimina registros DNS personalizados. Las eliminaciones no se pueden deshacer. Los registros se comparan sin distinguir mayúsculas de minúsculas, excepto los registros TXT (distinguen mayúsculas de minúsculas).
Parámetro: domainName
Obligatorio: Sí
Tipo y restricciones: El dominio cuyos registros se van a eliminar.
Parámetro: records
Obligatorio: Sí
Tipo y restricciones: 1–500 registros que identifican registros existentes — las mismas formas que guardar, pero sin ttl.
Devuelve — { "deleted": <number> }, el número de registros enviados. Si no se puede encontrar coincidencia para algún registro, toda la llamada falla y no se elimina nada.
Cada registro tiene:
type — uno de los 13 tipos compatibles que aparecen a continuación.
name — el nombre del registro sin incluir el dominio: usa @ para el propio dominio (apex) y * para un comodín.
ttl (solo guardar, opcional) — tiempo de caché en segundos, 60–3600.
Campos específicos del tipo:
Tipo: A
Campos: address — dirección IPv4.
Tipo: AAAA
Campos: address — dirección IPv6.
Tipo: CNAME
Campos: cname — nombre de dominio canónico (máx. 253 caracteres).
Tipo: ALIAS
Campos: aliasName — nombre de dominio canónico; comportamiento similar a CNAME para el apex, donde CNAME no está permitido.
Tipo: NS
Campos: nameserver — nombre del servidor de nombres.
Tipo: PTR
Campos: pointer — nombre de dominio para la dirección IP dada.
Tipo: TXT
Campos: value — valor de texto (la coincidencia distingue mayúsculas de minúsculas).
Tipo: MX
Campos: exchange — servidor de correo; preference — prioridad (0–65535, se prefiere el valor más bajo).
Tipo: CAA
Campos: flag — 0 o 128 (bit crítico); tag — issue, issuewild o iodef; value — identificador de CA con parámetros opcionales.
Tipo: SRV
Campos: service (p. ej. _sip); protocol (p. ej. _tcp); priority y weight (0–65535); port (1–65535); target — nombre de dominio del servidor.
Tipo: TLSA
Campos: usage, selector, matching (cada uno 0–255); port — * o _<1–65535>; protocol (p. ej. _tcp); associationData — hash o datos del certificado.
Tipo: HTTPS
Campos: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN o .; port opcional (* o _<1–65535>), scheme (debe ser _https cuando port está establecido), svcParams.
Tipo: SVCB
Campos: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN o .; port, scheme (p. ej. _tcp), svcParams opcionales.
async_operation_get — Obtener estado de operación asíncronaComprueba una operación de larga duración en tu cuenta mediante su operationId. Llámala repetidamente hasta que status sea success o failed.
Parámetro: operationId
Obligatorio: Sí
Tipo y restricciones: Cadena alfanumérica, máximo 36 caracteres, devuelta por la herramienta que inició la operación.
Devuelve
Campo: operationId
Significado: La operación consultada.
Campo: status
Significado: pending, success o failed.
Campo: type
Significado: Tipo de operación, o null.
Campo: details
Significado: Detalles adicionales sobre la operación, o null.
Campo: createdAt / modifiedAt
Significado: Cuándo se creó / actualizó por última vez la operación (modifiedAt puede ser null).
Cuando una llamada falla, la herramienta devuelve un error con un código y un detail legible por humanos que explica qué salió mal — por ejemplo, una entrada no válida (un nombre de dominio o ID de contacto mal formado), un dominio o contacto que no existe, o un conflicto con el estado actual. Si se rechaza una herramienta porque no se concedió acceso al asistente, vuelve a conectar Spaceship MCP y aprueba el acceso que solicita.