Servidor MCP

Just Domain

ai.justdomain/just-domain
Nube e infraestructura Público y accesible MCP 2025-11-25

Qué hace este MCP

Checks domain availability, pricing, and eligibility for domain transfers.

check_domain_transfer
Check whether a domain can transfer to Just Domain
Read-only transfer precheck for ONE domain the user already owns at another registrar: could it move to Just Domain, what is stopping it, what would it cost, and does its DNS survive the move. Nothing is ordered, charged, unlocked, or changed. The answer is built from two public sources only, the registry's own RDAP record and our registrar's price list, so it is safe to call without authentication and it reads nothing about the user's account. Read `blockers` before you say anything: an EMPTY list is the only thing that means the domain is ready to move. Every entry carries a plain `detail` sentence you can show as-is, and a `code` you do not recognise must still be reported through its `detail` rather than dropped. `source.rdap: false` means the registry did not answer, so nothing about the domain was established: say that, and never call it ready. `price` is the TOTAL for one full transfer term, not a per-year rate. A .ai transfer adds and charges TWO years because its registry works in two-year units. Do not divide or multiply the amount by a number of years, and do not label it per year; quote `term_note` beside it. `expected_new_expiry` is a projection (the registry's current expiry plus the term), not a date any registry has confirmed, so present it as expected. Moving a domain IN is self-service: the owner checks it and pays at https://justdomain.ai/transfer, pasting the authorization code there, and a transfer that does not complete is refunded in full. This tool tells the user whether the domain is eligible to move and what one full term would cost; hand over `transfer_url`, which opens that page for this domain in the owner's browser. Nothing is paid or ordered inside the chat. Moving a domain OUT of Just Domain IS self-service, and that means a human owner signed in on justdomain.ai in a browser, switching the transfer lock off and issuing the code from their own account. It does not mean you can do it. This tool does not return, accept, or hint at an authorization (EPP) code, and there is no agent path to unlocking a domain or to having a code issued, here or through any other Just Domain surface. An auth code is a bearer credential for the domain and a chat transcript is not a place to put one. Do not ask the user for a code, do not offer to hold or relay one, and never claim you can unlock or move the domain yourself.
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': "One fully-qualified domain the user already owns somewhere else, including its TLD (e.g. 'acme.com'). Not a bare label and not a list: this reads a third-party registry per call."}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['domain', 'tld', 'supported', 'ready', 'checked_at', 'registrar', 'dns_continuity', 'source', 'transfer_url', 'next_step', 'auth_code_policy'], 'properties': {'tld': {'type': 'string'}, 'price': {'anyOf': [{'type': 'object', 'required': ['amount', 'term_years', 'term_note'], 'properties': {'amount': {'type': 'string', 'description': "Decimal string, e.g. '128.00'. The TOTAL for `term_years` years, not a rate. Quote it as it is; do not divide it."}, 'currency': {'type': 'string', 'default': 'USD'}, 'term_note': {'type': 'string', 'description': 'The sentence that must travel with the amount. Quote it beside the price whenever the term is longer than a year.'}, 'is_premium': {'type': 'boolean', 'default': False}, 'term_years': {'type': 'integer', 'description': 'Years this transfer adds and charges. 1 on most endings; 2 on .ai, whose registry sells and transfers in two-year units.'}, 'expected_new_expiry': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "ISO date. A PROJECTION - the registry's current expiry plus the term - not a date any registry has confirmed. Present it as expected, never as agreed or guaranteed."}}}, {'type': 'null'}], 'default': None, 'description': "Null when the registrar's price list could not be read. Never estimate a domain transfer price yourself."}, 'ready': {'type': 'boolean', 'description': 'TRUE only when `blockers` is empty. It is a convenience over that list and can never disagree with it: anything we could not establish becomes a blocker, so a registry timeout reads as not ready rather than as a green light.'}, 'domain': {'type': 'string'}, 'source': {'type': 'object', 'required': ['rdap', 'registrar_pricing'], 'properties': {'rdap': {'type': 'boolean', 'description': "Did the registry's public record answer? FALSE means nothing about this domain was established - report that, and never report the domain as ready."}, 'registrar_pricing': {'type': 'boolean', 'description': "Did our registrar's price list answer? FALSE means the price is missing because we could not read it, not because the transfer is free."}}, 'description': 'Which public sources actually answered on this request.'}, 'blockers': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'detail'], 'properties': {'code': {'type': 'string', 'description': "Stable code: 'locked', 'within_60_days', 'redemption', 'expired', 'tld_unsupported', 'premium', 'not_registered', 'pending_transfer', 'pending_delete', or 'unknown'. If you do not recognise a code, render `detail` verbatim - never drop a blocker you have no wording for."}, 'detail': {'type': 'string', 'description': 'One plain sentence, safe to show the user as-is.'}, 'eligible_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'ISO-8601 instant this blocker clears, set only where that is a fact the registry gave us (the end of the 60-day hold). Never a guess at when somebody will unlock a domain.'}}}, 'description': 'What stands between this domain and a transfer, most blocking first. An EMPTY list is the only thing that means ready.'}, 'next_step': {'type': 'string', 'description': "One sentence you can say to the user about what happens next, already matched to this domain's state."}, 'registrar': {'type': 'object', 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'iana_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'description': 'Who sponsors the domain today, as the REGISTRY reports it.'}, 'supported': {'type': 'boolean', 'description': 'Whether Just Domain can accept this ENDING at all. Says nothing about this particular domain - read `blockers` for that.'}, 'checked_at': {'type': 'string', 'description': 'ISO-8601 instant these facts were read.'}, 'nameservers': {'type': 'array', 'items': {'type': 'string'}}, 'transfer_url': {'type': 'string', 'description': 'The page on justdomain.ai a PERSON opens in a browser to take this further. The handoff out of the chat.'}, 'dns_continuity': {'type': 'object', 'required': ['case', 'detail'], 'properties': {'case': {'type': 'string', 'description': "'independent' - the nameservers belong to a DNS provider, so a transfer does not touch them. 'losing_registrar' - they are the current registrar's own nameservers, which is the case that breaks a site or mail after the move. 'unknown' - we do not recognise them, said plainly rather than guessed."}, 'detail': {'type': 'string'}, 'provider': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'description': "Does the domain's DNS keep working after the move?\n\nA transfer moves sponsorship, not DNS, so the current delegation decides\nwhether the site and the mail survive it."}, 'auth_code_policy': {'type': 'string', 'description': 'Constant. The rule about authorization (EPP) codes, restated in the payload so it travels with the answer. Follow it.'}}}
search_domains
Search domain availability
Read-only availability and pricing lookup for domain names. No purchase or order is created by this tool; it only returns information. Preferred input: `domains`, 1 to 200 fully-qualified names (e.g. ['acme.com', 'acme.io']); results cover exactly those domains, with no suggestions or expansion. Fallback input: `query`, free text (one or more names, comma- or space-separated); names given without a TLD are expanded to popular TLDs (com/io/ai/co/net). Each result includes whether the domain is available, whether it is a premium name, the registration price and the renewal price. Both prices are totals for one full registration term of that ending, not per-year rates: one year on most endings, but two years on .ai, whose registry mandates a two-year term. Do not divide or multiply a returned price by a number of years. Available non-premium results also carry a `checkout_url` the user can open in a browser to register the domain on justdomain.ai if they choose to. Premium names cannot be registered through Just Domain yet and carry no `checkout_url`.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'query': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Free-text fallback when exact FQDNs aren't known: one or more names, comma- or space-separated. Names without a TLD are expanded to popular TLDs (com/io/ai/co/net). Ignored when `domains` is provided."}, 'domains': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1}, {'type': 'null'}], 'default': None, 'description': "Fully-qualified domains to check, e.g. ['acme.com', 'acme.io', 'acme.ai']. Each entry must include the TLD. Maximum 200 per request. Preferred over `query`."}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['domains', 'results'], 'properties': {'error': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Set when the search could not be completed (e.g. invalid query, provider failure).'}, 'domains': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The exact domains requested by the caller, echoed back.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['fqdn', 'name', 'tld', 'available', 'status'], 'properties': {'tld': {'type': 'string'}, 'fqdn': {'type': 'string'}, 'name': {'type': 'string'}, 'price': {'anyOf': [{'type': 'object', 'required': ['amount_minor', 'currency', 'formatted'], 'properties': {'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-4217 currency code.'}, 'formatted': {'type': 'string', 'description': "Human-readable price, e.g. '$12.99'."}, 'amount_minor': {'type': 'integer', 'description': 'Amount in the smallest currency unit (e.g. cents).'}}}, {'type': 'null'}], 'default': None, 'description': 'Registration price: the total for ONE full registration term of this ending, not a per-year rate. One year on most endings; two years on .ai, whose registry mandates a two-year term.'}, 'status': {'type': 'string', 'description': "Raw provider status, e.g. 'free', 'active', 'premium'."}, 'premium': {'type': 'boolean', 'default': False}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'available': {'type': 'boolean'}, 'term_years': {'type': 'integer', 'default': 1, 'description': 'Length in years of ONE registration term for this ending, and therefore the period `price` and `renewal_price` each cover. 1 on most endings; 2 on .ai, whose registry mandates a two-year term with no one-year option. Read this before describing any price as annual.'}, 'checkout_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "URL on the Just Domain website where the user completes payment. Set for available domains we can actually register; null for unavailable ones, for premium names (the checkout API refuses them), and for endings whose registry requires registrant data we cannot supply yet. The MCP tool handler fills this in after the bare service call so the UI widget's Buy button can open checkout directly in one click."}, 'renewal_price': {'anyOf': [{'type': 'object', 'required': ['amount_minor', 'currency', 'formatted'], 'properties': {'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-4217 currency code.'}, 'formatted': {'type': 'string', 'description': "Human-readable price, e.g. '$12.99'."}, 'amount_minor': {'type': 'integer', 'description': 'Amount in the smallest currency unit (e.g. cents).'}}}, {'type': 'null'}], 'default': None, 'description': "Renewal price: the total for ONE further registration term, on the same basis as `price`. What a later term would cost at today's rate, not a figure anyone has been charged or quoted for a specific renewal. An owner renews, and turns auto-renew on or off, on their own dashboard at https://justdomain.ai/dashboard, which is the only authoritative source for one domain's renewal state."}, 'requires_additional_data': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None, 'description': "Does this ending's registry demand registrant data beyond standard contact details - a nexus declaration, a national ID, a professional credential? TRI-STATE: true / false / null = we do not know. Just Domain cannot collect or submit that data yet, so a true (or unknown) value means the name is reported honestly but carries no `checkout_url`."}}}}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'next_action': {'type': 'string', 'default': 'none', 'description': "An instruction for the assistant reading this response, or the string 'none' when there is nothing extra to do. It is set only when no requested domain and no alternative in this response can be registered through Just Domain. When it is not 'none', carry it out in this same turn before replying to the user; it is written to be executable as-is."}, 'alternatives': {'type': 'array', 'items': {'type': 'object', 'required': ['fqdn', 'name', 'tld', 'available', 'status'], 'properties': {'tld': {'type': 'string'}, 'fqdn': {'type': 'string'}, 'name': {'type': 'string'}, 'price': {'anyOf': [{'type': 'object', 'required': ['amount_minor', 'currency', 'formatted'], 'properties': {'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-4217 currency code.'}, 'formatted': {'type': 'string', 'description': "Human-readable price, e.g. '$12.99'."}, 'amount_minor': {'type': 'integer', 'description': 'Amount in the smallest currency unit (e.g. cents).'}}}, {'type': 'null'}], 'default': None, 'description': 'Registration price: the total for ONE full registration term of this ending, not a per-year rate. One year on most endings; two years on .ai, whose registry mandates a two-year term.'}, 'status': {'type': 'string', 'description': "Raw provider status, e.g. 'free', 'active', 'premium'."}, 'premium': {'type': 'boolean', 'default': False}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'available': {'type': 'boolean'}, 'term_years': {'type': 'integer', 'default': 1, 'description': 'Length in years of ONE registration term for this ending, and therefore the period `price` and `renewal_price` each cover. 1 on most endings; 2 on .ai, whose registry mandates a two-year term with no one-year option. Read this before describing any price as annual.'}, 'checkout_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "URL on the Just Domain website where the user completes payment. Set for available domains we can actually register; null for unavailable ones, for premium names (the checkout API refuses them), and for endings whose registry requires registrant data we cannot supply yet. The MCP tool handler fills this in after the bare service call so the UI widget's Buy button can open checkout directly in one click."}, 'renewal_price': {'anyOf': [{'type': 'object', 'required': ['amount_minor', 'currency', 'formatted'], 'properties': {'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-4217 currency code.'}, 'formatted': {'type': 'string', 'description': "Human-readable price, e.g. '$12.99'."}, 'amount_minor': {'type': 'integer', 'description': 'Amount in the smallest currency unit (e.g. cents).'}}}, {'type': 'null'}], 'default': None, 'description': "Renewal price: the total for ONE further registration term, on the same basis as `price`. What a later term would cost at today's rate, not a figure anyone has been charged or quoted for a specific renewal. An owner renews, and turns auto-renew on or off, on their own dashboard at https://justdomain.ai/dashboard, which is the only authoritative source for one domain's renewal state."}, 'requires_additional_data': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None, 'description': "Does this ending's registry demand registrant data beyond standard contact details - a nexus declaration, a national ID, a professional credential? TRI-STATE: true / false / null = we do not know. Just Domain cannot collect or submit that data yet, so a true (or unknown) value means the name is reported honestly but carries no `checkout_url`."}}}, 'description': 'Available domains the caller did not ask about, offered only when every requested domain came back unavailable. Same label the caller typed, on a different ending; nothing is invented and nothing here duplicates a name in `results`. Every entry is available, non-premium and carries a `checkout_url`, so it can be offered to the user directly. Empty is not an error. It means one of three things: recovery is switched off for this deployment, or the search was not a dead end, or the same label is taken on the other endings too, which is the normal outcome for a common dictionary word. Do not tell the user that other endings were checked unless this list is non-empty. Do not re-check these; they were checked live in this same call.'}, 'error_message': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'component_hint': {'type': 'string', 'const': 'domain_search_results', 'default': 'domain_search_results'}}}
Modificado
check_domain_transfer
25 de September de 2026 a las 03:00
Modificado
search_domains
23 de September de 2026 a las 02:51
Añadido
check_domain_transfer
17 de September de 2026 a las 07:57
Añadido
search_domains
17 de September de 2026 a las 07:57