Just Domain

Search domain availability and pricing, and check if a domain can transfer in, from chat.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
85%
命名质量
100%
投毒风险
80%
权限匹配度
100%
协议合规性
100%

发现(2)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domain在 check_domain_transfer 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~3,938token 数(工具定义)
~20.2 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 3.08%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "just-domain": {
      "url": "https://mcp.justdomain.ai/"
    }
  }
}

远程端点

https://mcp.justdomain.ai/streamable-http

它能做什么

工具清单

工具(2)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢search_domains(domains, query)

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`.

输入模式

{
  "type": "object",
  "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."
    }
  },
  "additionalProperties": false
}

输出模式

{
  "type": "object",
  "properties": {
    "domains": {
      "description": "The exact domains requested by the caller, echoed back.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "results": {
      "items": {
        "properties": {
          "fqdn": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "tld": {
            "type": "string"
          },
          "available": {
            "type": "boolean"
          },
          "status": {
            "description": "Raw provider status, e.g. 'free', 'active', 'premium'.",
            "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."
          },
          "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"
          },
          "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`."
          },
          "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."
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "fqdn",
          "name",
          "tld",
          "available",
          "status"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "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": {
          "fqdn": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "tld": {
            "type": "string"
          },
          "available": {
            "type": "boolean"
          },
          "status": {
            "description": "Raw provider status, e.g. 'free', 'active', 'premium'.",
            "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."
          },
          "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"
          },
          "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`."
          },
          "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."
          },
          "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"
    },
    "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"
    },
    "warnings": {
      "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
    }
  },
  "required": [
    "domains",
    "results"
  ]
}
🟢check_domain_transfer(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.

输入模式

{
  "type": "object",
  "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"
  ],
  "additionalProperties": false
}

输出模式

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    },
    "tld": {
      "type": "string"
    },
    "supported": {
      "description": "Whether Just Domain can accept this ENDING at all. Says nothing about this particular domain - read `blockers` for that.",
      "type": "boolean"
    },
    "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"
    },
    "checked_at": {
      "description": "ISO-8601 instant these facts were read.",
      "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"
    },
    "registrar": {
      "description": "Who sponsors the domain today, as the REGISTRY reports it.",
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "iana_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "type": "object"
    },
    "nameservers": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "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"
        },
        "provider": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "detail": {
          "type": "string"
        }
      },
      "required": [
        "case",
        "detail"
      ],
      "type": "object"
    },
    "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"
            },
            "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"
            },
            "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"
            },
            "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"
            }
          },
          "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."
    },
    "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"
    },
    "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"
    },
    "next_step": {
      "description": "One sentence you can say to the user about what happens next, already matched to this domain's state.",
      "type": "string"
    },
    "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"
    }
  },
  "required": [
    "domain",
    "tld",
    "supported",
    "ready",
    "checked_at",
    "registrar",
    "dns_continuity",
    "source",
    "transfer_url",
    "next_step",
    "auth_code_policy"
  ]
}

推荐提示词

search_research
Search for information about [topic] using Just Domain
预期工具: search_domains
find_specific
Find [specific item] using Just Domain
预期工具: search_domains

社区

评价此服务器

证据

最近观测

已验证未记录版本2 个工具
已验证未记录版本2 个工具