Just Domain
Server Details
Search domain availability and pricing, and check if a domain can transfer in, from chat.
- Status
- Healthy
- Uptime
- 99.9% over 49 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- just-done/just-domain-mcp
- GitHub Stars
- 0
- Server Listing
- Just Domain MCP Server
TDQS
Scored across 2 tools
The two tools target completely different questions: one searches for available domains and pricing, the other prechecks an existing domain's transfer eligibility. There is no overlap in purpose or output shape.
Both tools follow the same verb_noun snake_case pattern: check_domain_transfer and search_domains. The naming convention is predictable and self-explanatory.
Two tools is a borderline count for a domain-focused server, but the read-only advisory scope is narrow enough that each tool carries a substantial job. It feels slightly thin.
For the apparent scope (domain availability/pricing and transfer precheck), the coverage is solid and there are no dead ends. Minor gaps exist, such as no standalone domain details or WHOIS lookup outside of the transfer context.
Available Tools
2 toolscheck_domain_transferCheck whether a domain can transfer to Just DomainARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tld | Yes | |
| price | No | Null when the registrar's price list could not be read. Never estimate a domain transfer price yourself. |
| ready | Yes | 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 | Yes | |
| source | Yes | Which public sources actually answered on this request. |
| blockers | No | What stands between this domain and a transfer, most blocking first. An EMPTY list is the only thing that means ready. |
| next_step | Yes | One sentence you can say to the user about what happens next, already matched to this domain's state. |
| registrar | Yes | Who sponsors the domain today, as the REGISTRY reports it. |
| supported | Yes | Whether Just Domain can accept this ENDING at all. Says nothing about this particular domain - read `blockers` for that. |
| checked_at | Yes | ISO-8601 instant these facts were read. |
| nameservers | No | |
| transfer_url | Yes | The page on justdomain.ai a PERSON opens in a browser to take this further. The handoff out of the chat. |
| dns_continuity | Yes | Does the domain's DNS keep working after the move? A transfer moves sponsorship, not DNS, so the current delegation decides whether the site and the mail survive it. |
| auth_code_policy | Yes | Constant. The rule about authorization (EPP) codes, restated in the payload so it travels with the answer. Follow it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description adds extensive behavioral context: nothing is ordered, charged, unlocked, or changed; it reads only public registry/price sources; it has no authentication needs; it never returns or accepts auth codes; and it explains the .ai two-year term and refund policy. This is exactly the kind of safety-critical behavior annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but it is deliberately structured and front-loaded: purpose, then blockers, pricing semantics, transfer workflow, and auth-code warnings. Each section carries operational or safety value, so it is dense rather than padded, though a bit longer than strictly minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the safety-sensitive transfer context, the description leaves almost nothing to inference: call prerequisites, blocker interpretation, source.rdap failure handling, total pricing semantics, expiry projection caveats, self-service URL handoff, refunds, and explicit anti-patterns around EPP codes. It is complete even without relying on the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the schema already documents the single domain parameter including constraints and an example. The description reinforces 'ONE domain' and 'already owns at another registrar' but adds little new meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read-only transfer precheck for ONE domain the user already owns at another registrar' and enumerates exactly what the tool answers: eligibility, blockers, cost, and DNS survival. It is immediately distinguishable from the sibling search_domains by its transfer-specific scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly establishes when to call the tool: for a single domain the user already owns elsewhere, and it explicitly states this is a read-only precheck that orders/charges/changes nothing. It does not explicitly name search_domains as an alternative or give an exclusion condition, but the transfer-vs-search purpose is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_domainsSearch domain availabilityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | 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 | No | 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`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Set when the search could not be completed (e.g. invalid query, provider failure). |
| domains | Yes | The exact domains requested by the caller, echoed back. |
| results | Yes | |
| warnings | No | |
| next_action | No | 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 | No | 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 | No | |
| component_hint | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive, and the description adds substantial behavioral context beyond that: no suggestions or expansion when `domains` is used, exact pricing semantics as totals for one full term, the .ai two-year registry requirement, and `checkout_url` only for available non-premium names. It also discloses that premium names cannot be registered through Just Domain yet. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence in the description carries operational information: purpose, no-purchase guarantee, input selection rules, price-calculation caveats, and checkout/premium exceptions. It is dense but not padded, with the most important identification front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to enumerate return fields, yet it still explains price semantics, the .ai two-year term, and the checkout_url behavior. The information needed to call the tool correctly is complete; not naming the sibling for transfers is a minor omission that does not affect invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by labeling `domains` as preferred and `query` as fallback den, and by stating that `domains` results cover exactly the given names with no suggestions or expansion. It also puts the 1–200 limit and TLD-expansion behavior in context, going slightly beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Read-only availability and pricing lookup for domain names.' It clearly scopes the tool to availability, premium status, and pricing, and explicitly states that no purchase or order is created, distinguishing it from registration or checkout tools and from the transfer-focused sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage guidance, marking `domains` as the preferred input and `query` as the fallback, and explaining when to use each ('Free-text fallback when exact FQDNs aren't known'). It does not explicitly name `check_domain_transfer` as the alternative for transfer-related checks, so it falls short of a full when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
search_domains2 fields changed- removed
Output schema / properties / next_action / constRemoved value: -"none" - added
Output schema / properties / next_action / descriptionAdded value: +"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."
2 tool updates
- Added
check_domain_transfer - Changed
search_domains2 fields changed- added
Output schema / properties / alternativesAdded value: +{ + "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.", + "items": { + "properties": { + "available": { + "type": "boolean" + }, + "checkout_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "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." + }, + "fqdn": { + "type": "string" + }, + "name": { + "type": "string" + }, + "premium": { + "default": false, + "type": "boolean" + }, + "price": { + "anyOf": [ + { + "properties": { + "amount_minor": { + "description": "Amount in the smallest currency unit (e.g. cents).", + "type": "integer" + }, + "currency": { + "description": "ISO-4217 currency code.", + "maxLength": 3, + "minLength": 3, + "type": "string" + }, + "formatted": { + "description": "Human-readable price, e.g. '$12.99'.", + "type": "string" + } + }, + "required": [ + "amount_minor", + "currency", + "formatted" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "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." + }, + "renewal_price": { + "anyOf": [ + { + "properties": { + "amount_minor": { + "description": "Amount in the smallest currency unit (e.g. cents).", + "type": "integer" + }, + "currency": { + "description": "ISO-4217 currency code.", + "maxLength": 3, + "minLength": 3, + "type": "string" + }, + "formatted": { + "description": "Human-readable price, e.g. '$12.99'.", + "type": "string" + } + }, + "required": [ + "amount_minor", + "currency", + "formatted" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "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": null, + "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`." + }, + "status": { + "description": "Raw provider status, e.g. 'free', 'active', 'premium'.", + "type": "string" + }, + "term_years": { + "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.", + "type": "integer" + }, + "tld": { + "type": "string" + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "fqdn", + "name", + "tld", + "available", + "status" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / results / items / properties / renewal_price / descriptionPrevious value: -"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; Just Domain does not yet run renewals."New value: +"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."
1 tool update
- Changed
search_domains2 fields changed- changed
Output schema / properties / results / items / properties / checkout_url / descriptionPrevious value: -"URL on the Just Domain website where the user completes payment. Set for available domains we can actually register; null for unavailable ones and for premium names, which the checkout API refuses. 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."New value: +"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." - added
Output schema / properties / results / items / properties / requires_additional_dataAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "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`." +}
1 tool update
- Changed
search_domains3 fields changed- changed
Output schema / properties / results / items / properties / price / descriptionPrevious value: -"First-year registration price."New value: +"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." - changed
Output schema / properties / results / items / properties / renewal_price / descriptionPrevious value: -"Annual renewal price (charged each year after registration)."New value: +"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; Just Domain does not yet run renewals." - added
Output schema / properties / results / items / properties / term_yearsAdded value: +{ + "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.", + "type": "integer" +}
1 tool update
- Changed
search_domains1 field changed- changed
Output schema / properties / results / items / properties / checkout_url / descriptionPrevious value: -"URL on the Just Domain website where the user completes payment. Set for available domains; null for unavailable. 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."New value: +"URL on the Just Domain website where the user completes payment. Set for available domains we can actually register; null for unavailable ones and for premium names, which the checkout API refuses. 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."
1 tool update
- Changed
search_domains9 fields changed- added
Input schema / properties / domains / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "maxItems": 200, + "minItems": 1, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / domains / defaultAdded value: +null - changed
Input schema / properties / domains / descriptionPrevious value: -"Fully-qualified domains to check, e.g. ['acme.com', 'acme.io', 'acme.ai']. Each entry must include the TLD. Maximum 200 per request."New value: +"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`." - removed
Input schema / properties / domains / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / domains / maxItemsRemoved value: -200 - removed
Input schema / properties / domains / minItemsRemoved value: -1 - removed
Input schema / properties / domains / typeRemoved value: -"array" - added
Input schema / properties / queryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "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." +} - removed
Input schema / requiredRemoved value: -[ - "domains" -]
1 tool update
- First observed
search_domains
Related MCP Connectors
Buy & manage domains from any AI chat: availability, register, DNS, email forwarding, AI bot stats.
Bulk domain checking for AI chats: availability, aftermarket prices, archive.org history, buy links
Domain search, registration, DNS, marketplace, and checkout with your AI agent.
Search, Register , Renew , Transfer and Manage domains
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables buying and managing internet domains directly from AI chat, including availability checks, registration, DNS configuration, email forwarding, and AI bot tracking.MIT
- AlicenseNot gradedqualityFmaintenanceSearch, register, and manage domain names through natural conversation with AI assistants.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables checking domain availability and registration prices across multiple TLDs and providers. Users can find available domain names and compare pricing through natural language.6 npm10MIT
- AlicenseAqualityDmaintenanceEnables checking domain name availability for single or multiple domains using WHOIS and DNS verification.121MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.