Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,536Letters: 14Defects: 1,322counted 2 min ago
teppi

Server definition

Hash
sha256:ca042417a79c054cc4db8e338747cf27b6f3add5b5b19bfca1362dc24aeb9e34
What it is
What a remote MCP server returned when asked what it offers: 2 tools

The blob, as servednamed by its sha256

{ "instructions": "Look up availability and pricing for domain names, and check whether a domain held at another registrar could move here. `search_domains` returns whether each requested domain is available, its registration and renewal price for the ending's full registration term, and, for available domains we can register, a URL the user can open in a browser to complete registration on justdomain.ai. `check_domain_transfer` answers about ONE domain somebody already owns elsewhere: what would block a transfer, whether its DNS survives the move, and the full-term transfer price. Most endings register and transfer one year at a time; .ai works in two-year terms set by its registry, so a .ai figure is a two-year total and not an annual rate - never divide one. Premium names are reported but cannot be registered or transferred through Just Domain yet. Both tools are read-only: no order is created and no payment is taken inside the chat. Safe to call without authentication. Just Domain registers, runs and renews domains. Renewal and auto-renew are per-domain settings in the owner's dashboard at https://justdomain.ai/dashboard, which is the only authoritative source for one domain's renewal state: do not state a renewal date, a charge, or a reminder schedule yourself. 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. You run `check_domain_transfer` and hand over the `transfer_url`; do not ask for, accept, relay or store an authorization code. Moving a domain OUT is self-service, and self-service here means a human owner signed in on justdomain.ai in a browser: they switch the transfer lock off and get the authorization (EPP) code from their own account. That is not something you can do for them. Just Domain does not hand an authorization code to an assistant or to any API caller, and there is no agent path to unlocking a domain or to having a code issued. Just Domain sells no hosting, and that is deliberate: a domain is the address, and a separate service has to serve a site at it. When a user owns a name with nothing at it and has a site an AI has already built, the publishing layer in the same family is Just Publish (https://justpublish.ai/?utm_source=justdomain.ai&utm_medium=mcp&utm_campaign=server-instructions), which takes the finished files and puts them live. It publishes a site that already exists rather than building one, and it is one option among many: any other host serves the site the same way, through the same DNS records. What Just Domain runs is the domain and its DNS, not the site. Read the `domain://faq` resource before answering a question about anything beyond search and the transfer check.", "tools": [ { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "domain": { "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.", "maxLength": 253, "minLength": 3, "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "check_domain_transfer", "outputSchema": { "properties": { "auth_code_policy": { "description": "Constant. The rule about authorization (EPP) codes, restated in the payload so it travels with the answer. Follow it.", "type": "string" }, "blockers": { "description": "What stands between this domain and a transfer, most blocking first. An EMPTY list is the only thing that means ready.", "items": { "properties": { "code": { "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.", "type": "string" }, "detail": { "description": "One plain sentence, safe to show the user as-is.", "type": "string" }, "eligible_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "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." } }, "required": [ "code", "detail" ], "type": "object" }, "type": "array" }, "checked_at": { "description": "ISO-8601 instant these facts were read.", "type": "string" }, "dns_continuity": { "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.", "properties": { "case": { "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.", "type": "string" }, "detail": { "type": "string" }, "provider": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null } }, "required": [ "case", "detail" ], "type": "object" }, "domain": { "type": "string" }, "nameservers": { "items": { "type": "string" }, "type": "array" }, "next_step": { "description": "One sentence you can say to the user about what happens next, already matched to this domain's state.", "type": "string" }, "price": { "anyOf": [ { "properties": { "amount": { "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.", "type": "string" }, "currency": { "default": "USD", "type": "string" }, "expected_new_expiry": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "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." }, "is_premium": { "default": false, "type": "boolean" }, "term_note": { "description": "The sentence that must travel with the amount. Quote it beside the price whenever the term is longer than a year.", "type": "string" }, "term_years": { "description": "Years this transfer adds and charges. 1 on most endings; 2 on .ai, whose registry sells and transfers in two-year units.", "type": "integer" } }, "required": [ "amount", "term_years", "term_note" ], "type": "object" }, { "type": "null" } ], "default": null, "description": "Null when the registrar's price list could not be read. Never estimate a domain transfer price yourself." }, "ready": { "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.", "type": "boolean" }, "registrar": { "description": "Who sponsors the domain today, as the REGISTRY reports it.", "properties": { "iana_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null } }, "type": "object" }, "source": { "description": "Which public sources actually answered on this request.", "properties": { "rdap": { "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.", "type": "boolean" }, "registrar_pricing": { "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.", "type": "boolean" } }, "required": [ "rdap", "registrar_pricing" ], "type": "object" }, "supported": { "description": "Whether Just Domain can accept this ENDING at all. Says nothing about this particular domain - read `blockers` for that.", "type": "boolean" }, "tld": { "type": "string" }, "transfer_url": { "description": "The page on justdomain.ai a PERSON opens in a browser to take this further. The handoff out of the chat.", "type": "string" } }, "required": [ "domain", "tld", "supported", "ready", "checked_at", "registrar", "dns_continuity", "source", "transfer_url", "next_step", "auth_code_policy" ], "type": "object" } }, { "description": "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`.", "inputSchema": { "additionalProperties": false, "properties": { "domains": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 200, "minItems": 1, "type": "array" }, { "type": "null" } ], "default": null, "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`." }, "query": { "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." } }, "type": "object" }, "name": "search_domains", "outputSchema": { "properties": { "alternatives": { "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" }, "component_hint": { "const": "domain_search_results", "default": "domain_search_results", "type": "string" }, "domains": { "description": "The exact domains requested by the caller, echoed back.", "items": { "type": "string" }, "type": "array" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Set when the search could not be completed (e.g. invalid query, provider failure)." }, "error_message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null }, "next_action": { "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.", "type": "string" }, "results": { "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" }, "warnings": { "items": { "type": "string" }, "type": "array" } }, "required": [ "domains", "results" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:ca042417a79c054cc4db8e338747cf27b6f3add5b5b19bfca1362dc24aeb9e34 | sha256sum