Skip to main content
Glama

Get price history for an extension

get_price_history

Return how each covered registrar's renewal or registration price for one extension changed over time: price periods with the date each price was first seen, when the previous price was last seen, and whether it came from our scheduled refreshes or the registrar's own price page archived by the Internet Archive. A first record may be older than its date. Availability is not checked.

Input Schema

NameRequiredDescriptionDefault
tldYesOne covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered.
priceNoWhich price history to return: the annual renewal (default) or the first-year registration, which includes promotions.renewal
formatNoResponse representation. CSV and Markdown use the same filters, order and bounded pagination; they contain main offers, not favorite comparison arrays. MCP retains structured JSON alongside rendered text.json
registrarNoConnected registrar ID from the registrars endpoint. Omit to compare all.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "Comparison": {
      +      "description": "Revisit current standard prices with supported website filters. Omits proposed names and API pagination; does not save prices or availability.",
      +      "properties": {
      +        "omittedParameters": {
      +          "description": "Estimate horizons outside 2, 3, 5 and 10 years use the website default. Favorites are browser-local preferences and are never written by a link. Disclose omitted settings.",
      +          "items": {
      +            "enum": [
      +              "years",
      +              "favorites"
      +            ]
      +          },
      +          "type": "array"
      +        },
      +        "url": {
      +          "format": "uri",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "url",
      +        "omittedParameters"
      +      ],
      +      "type": "object"
      +    },
      +    "Coverage": {
      +      "properties": {
      +        "error": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "freshOffers": {
      +          "type": "integer"
      +        },
      +        "notCompared": {
      +          "items": {
      +            "properties": {
      +              "name": {
      +                "type": "string"
      +              },
      +              "reason": {
      +                "type": "string"
      +              },
      +              "url": {
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "partial": {
      +          "type": "boolean"
      +        },
      +        "scope": {
      +          "type": "string"
      +        },
      +        "sources": {
      +          "items": {
      +            "$ref": "#/$defs/Source"
      +          },
      +          "type": "array"
      +        },
      +        "totalOffers": {
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "scope",
      +        "totalOffers",
      +        "freshOffers",
      +        "sources",
      +        "notCompared",
      +        "partial"
      +      ],
      +      "type": "object"
      +    },
      +    "Envelope": {
      +      "properties": {
      +        "apiVersion": {
      +          "type": "string"
      +        },
      +        "availability": {
      +          "const": "not_checked"
      +        },
      +        "coverage": {
      +          "$ref": "#/$defs/Coverage"
      +        },
      +        "currency": {
      +          "const": "USD"
      +        },
      +        "generatedAt": {
      +          "format": "date-time",
      +          "type": "string"
      +        },
      +        "limits": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "service": {
      +          "$ref": "#/$defs/ServiceInformation"
      +        }
      +      },
      +      "required": [
      +        "service",
      +        "apiVersion",
      +        "generatedAt",
      +        "currency",
      +        "coverage",
      +        "limits"
      +      ],
      +      "type": "object"
      +    },
      +    "Error": {
      +      "properties": {
      +        "apiVersion": {
      +          "type": "string"
      +        },
      +        "error": {
      +          "properties": {
      +            "code": {
      +              "type": "string"
      +            },
      +            "message": {
      +              "type": "string"
      +            },
      +            "retryAfterSeconds": {
      +              "minimum": 0,
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "code",
      +            "message"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "apiVersion",
      +        "error"
      +      ],
      +      "type": "object"
      +    },
      +    "HistoryStep": {
      +      "properties": {
      +        "approximate": {
      +          "description": "Converted to USD from another currency.",
      +          "type": "boolean"
      +        },
      +        "archiveUrl": {
      +          "format": "uri",
      +          "type": "string"
      +        },
      +        "cents": {
      +          "description": "Integer USD cents; 1000 = USD 10.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "changedAfter": {
      +          "description": "The previous price was last seen then: the change happened between this and from.",
      +          "format": "date-time",
      +          "type": "string"
      +        },
      +        "firstRecord": {
      +          "description": "No earlier record; the price may be older than from.",
      +          "type": "boolean"
      +        },
      +        "from": {
      +          "description": "When this price was first seen.",
      +          "format": "date-time",
      +          "type": "string"
      +        },
      +        "lastConfirmed": {
      +          "description": "Archived prices: the last archived copy still showing this price.",
      +          "format": "date-time",
      +          "type": "string"
      +        },
      +        "regularCents": {
      +          "description": "Published regular price while this price is a promotion.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "source": {
      +          "description": "refresh: our scheduled refresh (since 2026-09-28). archive: the registrar’s own price page as copied by the Internet Archive.",
      +          "enum": [
      +            "refresh",
      +            "archive"
      +          ]
      +        },
      +        "to": {
      +          "description": "When the next price or a removal was first seen; null while current.",
      +          "format": "date-time",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "from",
      +        "to",
      +        "cents",
      +        "approximate",
      +        "source",
      +        "firstRecord"
      +      ],
      +      "type": "object"
      +    },
      +    "PriceHistory": {
      +      "allOf": [
      +        {
      +          "$ref": "#/$defs/Envelope"
      +        },
      +        {
      +          "properties": {
      +            "comparison": {
      +              "$ref": "#/$defs/Comparison"
      +            },
      +            "historyStart": {
      +              "format": "date-time",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "notes": {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "pageUrl": {
      +              "format": "uri",
      +              "type": "string"
      +            },
      +            "price": {
      +              "enum": [
      +                "renewal",
      +                "registration"
      +              ]
      +            },
      +            "registrars": {
      +              "items": {
      +                "properties": {
      +                  "changes": {
      +                    "minimum": 0,
      +                    "type": "integer"
      +                  },
      +                  "current": {
      +                    "description": "The current step, with the same fields as steps[]; null when the registrar does not list the extension now.",
      +                    "type": [
      +                      "object",
      +                      "null"
      +                    ]
      +                  },
      +                  "fetchedAt": {
      +                    "description": "When the current saved offer was retrieved.",
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "highestCents": {
      +                    "description": "Integer USD cents; 1000 = USD 10.",
      +                    "minimum": 0,
      +                    "type": "integer"
      +                  },
      +                  "listedNow": {
      +                    "type": "boolean"
      +                  },
      +                  "lowestCents": {
      +                    "description": "Integer USD cents; 1000 = USD 10.",
      +                    "minimum": 0,
      +                    "type": "integer"
      +                  },
      +                  "pageUrl": {
      +                    "format": "uri",
      +                    "type": "string"
      +                  },
      +                  "pricingBasis": {
      +                    "description": "The current saved offer’s sample label, as on price offers; absent for published price lists. Preserve it when quoting the current price.",
      +                    "enum": [
      +                      "sampled_standard",
      +                      "sampled_api"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "registrarId": {
      +                    "type": "string"
      +                  },
      +                  "registrarName": {
      +                    "type": "string"
      +                  },
      +                  "stale": {
      +                    "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
      +                    "type": "boolean"
      +                  },
      +                  "steps": {
      +                    "items": {
      +                      "$ref": "#/$defs/HistoryStep"
      +                    },
      +                    "type": "array"
      +                  }
      +                },
      +                "required": [
      +                  "registrarId",
      +                  "registrarName",
      +                  "pageUrl",
      +                  "listedNow",
      +                  "current",
      +                  "changes",
      +                  "lowestCents",
      +                  "highestCents",
      +                  "steps"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "tld": {
      +              "type": "string"
      +            },
      +            "truncated": {
      +              "description": "True when only the newest periods fit one response.",
      +              "type": "boolean"
      +            }
      +          },
      +          "required": [
      +            "comparison",
      +            "tld",
      +            "price",
      +            "pageUrl",
      +            "historyStart",
      +            "registrars",
      +            "truncated",
      +            "notes"
      +          ],
      +          "type": "object"
      +        }
      +      ]
      +    },
      +    "ServiceInformation": {
      +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
      +      "properties": {
      +        "name": {
      +          "const": "Cheapest Domains"
      +        },
      +        "pluginUrl": {
      +          "format": "uri",
      +          "type": "string"
      +        },
      +        "setupUrl": {
      +          "format": "uri",
      +          "type": "string"
      +        },
      +        "url": {
      +          "format": "uri",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "name",
      +        "url",
      +        "setupUrl",
      +        "pluginUrl"
      +      ],
      +      "type": "object"
      +    },
      +    "Source": {
      +      "properties": {
      +        "error": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "fetchedAt": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "freshOfferCount": {
      +          "type": "integer"
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "name": {
      +          "type": "string"
      +        },
      +        "nextRefreshAt": {
      +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "note": {
      +          "type": "string"
      +        },
      +        "offerCount": {
      +          "type": "integer"
      +        },
      +        "refresh": {
      +          "description": "Progress of a staged catalog refresh, when one exists. Saved prices remain usable meanwhile.",
      +          "properties": {
      +            "completed": {
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "phase": {
      +              "enum": [
      +                "queued",
      +                "running",
      +                "waiting",
      +                "paused",
      +                "complete"
      +              ]
      +            },
      +            "resumeAt": {
      +              "description": "Unix time in milliseconds.",
      +              "type": "integer"
      +            },
      +            "startedAt": {
      +              "description": "Unix time in milliseconds.",
      +              "type": "integer"
      +            },
      +            "total": {
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "phase",
      +            "completed",
      +            "total",
      +            "startedAt",
      +            "resumeAt"
      +          ],
      +          "type": "object"
      +        },
      +        "refreshing": {
      +          "type": "boolean"
      +        },
      +        "stale": {
      +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
      +          "type": "boolean"
      +        },
      +        "url": {
      +          "format": "uri",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "name",
      +        "url",
      +        "offerCount",
      +        "freshOfferCount",
      +        "stale",
      +        "refreshing"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/PriceHistory"
      +    },
      +    {
      +      "$ref": "#/$defs/Error"
      +    }
      +  ],
      +  "description": "Successful results are PriceHistory, the REST 200 response; results with isError: true are Error.",
      +  "type": "object"
      +}
  2. Added

TDQS

A3.9/5.0
Behavior4/5

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

Adds context beyond the annotations: data provenance (scheduled refreshes vs. the registrar's own page archived by the Internet Archive) and the caveat that a first record may be older than its stated date. That is meaningful for interpreting results. The annotations mark readOnlyHint=false for what the description frames as a pure retrieval, an inconsistency worth flagging to the agent but the description's stated behavior is the reliable one.

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?

One dense but well-ordered sentence that front-loads the core operation and then qualifies it with provenance and the availability caveat. No filler, though the single run-on structure makes the provenance clause easy to skim past.

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

Completeness4/5

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 explain return shape and instead spends its space on the two things an agent cannot get from structure: data provenance and the stale-first-record caveat. The unstated pagination bound and the readOnlyHint mismatch are minor residual gaps.

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?

Schema coverage is 100% and the schema already explains tld, price, format and registrar in detail. The description only echoes that renewal and registration are the two price histories and that one extension is queried, so it adds little beyond the structured fields; baseline 3 applies.

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 and resource (return price history for one extension) and names the scope (each covered registrar, renewal or registration price, over time), which cleanly separates it from siblings like get_tld_prices or search_prices that deal in current pricing.

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

Usage Guidelines3/5

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

The closing note 'Availability is not checked' implicitly routes availability questions to check_availability, and 'over time' implies this is the historical counterpart to a current-price tool. However, no sibling is named and there is no explicit when-to-use or when-not-to-use statement.

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.