Skip to main content
Glama

Get an extension's prices and registration rules

get_tld_requirements
Read-onlyIdempotent

Look up what OrbitFour charges and requires for domain extensions (TLDs): standard per-year registration, renewal, transfer and restore prices in USD plus the ICANN fee, the shortest and longest term, the fixed transfer term, whether WHOIS privacy is allowed, any eligibility or use restriction, whether browsers require HTTPS for its websites (https_required: .app, .dev), and JSON Schemas for what a registration must include (.us, for example, needs Nexus data on the registrant contact). Up to 10 extensions per call; read-only. These are standard prices: when premium_possible is true a particular name can cost more, so quote it with check_domain. An extension OrbitFour does not sell comes back as tld_not_found.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "tlds": "<tlds>"
    },
    "name": "get_tld_requirements"
  }
}

Input Schema

NameRequiredDescriptionDefault
tldsYesExtensions without the dot, e.g. ["us", "ai", "com"].

Output Schema

NameRequiredDescriptionDefault
tldsYes
constraintsYesAccount-wide rules that apply to every TLD.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / tlds / items / oneOf
      Previous value: -[
      -  {
      -    "description": "One TLD's catalog entry plus what a registration of it must carry: `registration_schema` for the TLD-specific part of the POST /domains body, `registrant_schema` for the fields the registrant contact needs.",
      -    "properties": {
      -      "categories": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "eligibility": {
      -        "description": "Who may register a name on this extension.",
      -        "properties": {
      -          "policy": {
      -            "description": "The registry's eligibility policy, when it publishes one.",
      -            "type": "string"
      -          },
      -          "restricted": {
      -            "description": "true when the registry limits who may register: a community or profession, or a connection to a place. Every requires_nexus TLD is restricted, and registrant_schema says what its registrant contact must carry. false: anyone may.",
      -            "type": "boolean"
      -          },
      -          "summary": {
      -            "description": "Who qualifies, when restricted.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "restricted"
      -        ],
      -        "type": "object"
      -      },
      -      "https_required": {
      -        "description": "true when browsers load websites on this extension over HTTPS only, because the whole extension is on the HSTS preload list (.app, .dev, .page and others): a site needs a valid TLS certificate before it loads, and http:// links are upgraded. Email and other non-web services are unaffected.",
      -        "type": "boolean"
      -      },
      -      "icann_fee": {
      -        "description": "Per-year ICANN fee, added on top of each price; \"0.00\" on a ccTLD, which owes none. check_domain reports the same amount.",
      -        "type": "string"
      -      },
      -      "max_years": {
      -        "type": "integer"
      -      },
      -      "min_years": {
      -        "type": "integer"
      -      },
      -      "name": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "period_years": {
      -        "description": "The term each price covers: always 1, so every price is per year. A purchase costs it times its years (at least min_years).",
      -        "type": "integer"
      -      },
      -      "premium_possible": {
      -        "description": "Whether the registry can price a name above these standard prices; when true, check_domain quotes the name.",
      -        "type": "boolean"
      -      },
      -      "registrant_schema": {
      -        "description": "A JSON Schema (2020-12); {} when the TLD adds no requirement.",
      -        "type": "object"
      -      },
      -      "registration": {
      -        "description": "Per-year retail price in the catalog's currency, as a decimal string.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "registration_schema": {
      -        "description": "A JSON Schema (2020-12); {} when the TLD adds no requirement.",
      -        "type": "object"
      -      },
      -      "renewal": {
      -        "description": "Per-year retail price in the catalog's currency, as a decimal string.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "requires_nexus": {
      -        "type": "boolean"
      -      },
      -      "restore": {
      -        "description": "Per-year retail price in the catalog's currency, as a decimal string.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "tld": {
      -        "type": "string"
      -      },
      -      "transfer": {
      -        "description": "Per-year retail price in the catalog's currency, as a decimal string.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "transfer_years": {
      -        "description": "Years a transfer in buys and is charged for, added to the expiry date. A transfer request takes no years: it's always this.",
      -        "type": "integer"
      -      },
      -      "transfer_years_fixed": {
      -        "description": "true when the registry accepts exactly transfer_years on a transfer and no other period (PIR's .org: 1); false when transfer_years is this extension's shortest term (min_years).",
      -        "type": "boolean"
      -      },
      -      "url": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "whois_privacy": {
      -        "properties": {
      -          "price": {
      -            "type": "string"
      -          },
      -          "supported": {
      -            "type": "boolean"
      -          }
      -        },
      -        "required": [
      -          "supported"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "tld",
      -      "name",
      -      "registration",
      -      "renewal",
      -      "transfer",
      -      "restore",
      -      "icann_fee",
      -      "period_years",
      -      "min_years",
      -      "max_years",
      -      "transfer_years",
      -      "transfer_years_fixed",
      -      "requires_nexus",
      -      "premium_possible",
      -      "https_required",
      -      "whois_privacy",
      -      "eligibility",
      -      "categories",
      -      "url",
      -      "registration_schema",
      -      "registrant_schema"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "error": {
      -        "enum": [
      -          "tld_not_found"
      -        ],
      -        "type": "string"
      -      },
      -      "tld": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tld",
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "One TLD's catalog entry plus what a registration of it must carry: `registration_schema` for the TLD-specific part of the POST /domains body, `registrant_schema` for the fields the registrant contact needs.",
      +    "properties": {
      +      "categories": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "eligibility": {
      +        "description": "Who may register a name on this extension, and any registry rule on how a name may be used.",
      +        "properties": {
      +          "policy": {
      +            "description": "The registry policy the rule comes from, when it publishes one.",
      +            "type": "string"
      +          },
      +          "restricted": {
      +            "description": "true when the registry limits who may register or how a name may be used: a community or profession, a connection to a place, or a use policy (summary says which). Every requires_nexus TLD is restricted, and registrant_schema says what its registrant contact must carry. false: no special eligibility or use policy; the registry's standard terms still apply.",
      +            "type": "boolean"
      +          },
      +          "summary": {
      +            "description": "The rule in words, when restricted: who qualifies, or how a name may be used.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "restricted"
      +        ],
      +        "type": "object"
      +      },
      +      "https_required": {
      +        "description": "true when browsers load websites on this extension over HTTPS only, because the whole extension is on the HSTS preload list (.app, .dev, .page and others): a site needs a valid TLS certificate before it loads, and http:// links are upgraded. Email and other non-web services are unaffected.",
      +        "type": "boolean"
      +      },
      +      "icann_fee": {
      +        "description": "Per-year ICANN fee, added on top of each price; \"0.00\" on a ccTLD, which owes none. check_domain reports the same amount.",
      +        "type": "string"
      +      },
      +      "max_years": {
      +        "type": "integer"
      +      },
      +      "min_years": {
      +        "type": "integer"
      +      },
      +      "name": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "period_years": {
      +        "description": "The term each price covers: always 1, so every price is per year. A purchase costs it times its years (at least min_years).",
      +        "type": "integer"
      +      },
      +      "premium_possible": {
      +        "description": "Whether the registry can price a name above these standard prices; when true, check_domain quotes the name.",
      +        "type": "boolean"
      +      },
      +      "registrant_schema": {
      +        "description": "A JSON Schema (2020-12); {} when the TLD adds no requirement.",
      +        "type": "object"
      +      },
      +      "registration": {
      +        "description": "Per-year retail price in the catalog's currency, as a decimal string.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "registration_schema": {
      +        "description": "A JSON Schema (2020-12); {} when the TLD adds no requirement.",
      +        "type": "object"
      +      },
      +      "renewal": {
      +        "description": "Per-year retail price in the catalog's currency, as a decimal string.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "requires_nexus": {
      +        "type": "boolean"
      +      },
      +      "restore": {
      +        "description": "Per-year retail price in the catalog's currency, as a decimal string.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "tld": {
      +        "type": "string"
      +      },
      +      "transfer": {
      +        "description": "Per-year retail price in the catalog's currency, as a decimal string.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "transfer_years": {
      +        "description": "Years a transfer in buys and is charged for, added to the expiry date. A transfer request takes no years: it's always this.",
      +        "type": "integer"
      +      },
      +      "transfer_years_fixed": {
      +        "description": "true when the registry accepts exactly transfer_years on a transfer and no other period (PIR's .org: 1); false when transfer_years is this extension's shortest term (min_years).",
      +        "type": "boolean"
      +      },
      +      "url": {
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "whois_privacy": {
      +        "properties": {
      +          "price": {
      +            "type": "string"
      +          },
      +          "supported": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "supported"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "tld",
      +      "name",
      +      "registration",
      +      "renewal",
      +      "transfer",
      +      "restore",
      +      "icann_fee",
      +      "period_years",
      +      "min_years",
      +      "max_years",
      +      "transfer_years",
      +      "transfer_years_fixed",
      +      "requires_nexus",
      +      "premium_possible",
      +      "https_required",
      +      "whois_privacy",
      +      "eligibility",
      +      "categories",
      +      "url",
      +      "registration_schema",
      +      "registrant_schema"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "error": {
      +        "enum": [
      +          "tld_not_found"
      +        ],
      +        "type": "string"
      +      },
      +      "tld": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tld",
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observed

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered; the description still adds value with the USD currency, the premium-pricing caveat, and the tld_not_found error contract. The 'up to 10 extensions per call' limit restates the schema's maxItems rather than adding new information, which keeps it just short of the top score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the enumeration of returned fields is dense but purposeful. The middle section is a single very long run-on sentence, which hurts scanability slightly, but nothing is genuinely wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter lookup with an output schema, this covers what an agent needs: what is returned, the unit and currency, the batch limit, the premium-price edge case, and the not-found outcome. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter at 100% schema description coverage, the schema already documents the 'extensions without the dot' format, and the description only repeats the batch size limit. Baseline 3 is appropriate since the description adds essentially no syntax or meaning beyond the structured field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (look up) and resource (prices and registration rules for domain extensions) and enumerates the concrete fields returned: registration/renewal/transfer/restore prices, ICANN fee, term limits, WHOIS privacy, eligibility restrictions, HTTPS requirements, and required registration JSON Schemas. This is clearly distinguishable from check_domain, check_transfer, and search_domains, which deal with individual names rather than extension-level metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to check_domain when premium_possible is true, and explains that unknown extensions return tld_not_found. It does not mention when to prefer check_transfer or search_domains, so sibling coverage is partial, but the primary when-to-use condition and the key alternative are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources