Skip to main content
Glama

List upcoming model retirements

upcoming_retirements
Read-onlyIdempotent

List OpenAI, Anthropic, and Google models retiring within the next N days, soonest first, each with its replacement, to plan migrations before dates hit.

Instructions

List OpenAI, Anthropic and Google models whose retirement or re-routing date falls in the next N days, soonest first, with replacement for each. Use it to answer "what is being retired soon?" or to plan migrations. It does not look at code: use scan_project for that, or check_models for specific IDs. Read-only. Models already past their date are not included (check_models reports those as retired). Anthropic "not before" dates are left out because those models are still active.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "upcoming_retirements"
  }
}

Input Schema

NameRequiredDescriptionDefault
daysNoLook-ahead window in days, 1 to 3650. Default 90.
providerNoOnly this provider. Omit for all three.

Output Schema

NameRequiredDescriptionDefault
daysYes
countYes
modelsYes
all_datesNo
next_stepNoPresent when a model has to move: how to test prompts on the replacement first
registry_sourceNolive = aidriftline.com/models.json; bundled = the copy shipped in the package (used offline)
registry_checkedNoDate the registry was last checked against the provider pages

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.1.1
    • addedInput schema / properties / days / default
      Added value: +90
    • changedInput schema / properties / days / description
      Previous value: -"Look-ahead window in days (default 90)"New value: +"Look-ahead window in days, 1 to 3650. Default 90."
    • addedInput schema / properties / days / maximum
      Added value: +3650
    • addedInput schema / properties / days / minimum
      Added value: +1
    • addedInput schema / properties / provider / description
      Added value: +"Only this provider. Omit for all three."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "all_dates": {
      +      "type": "string"
      +    },
      +    "count": {
      +      "type": "number"
      +    },
      +    "days": {
      +      "type": "number"
      +    },
      +    "models": {
      +      "items": {
      +        "properties": {
      +          "advice": {
      +            "description": "One plain sentence to pass on to the user",
      +            "type": "string"
      +          },
      +          "alias_of": {
      +            "type": "string"
      +          },
      +          "days_left": {
      +            "description": "Days until the date; 0 or negative when it has passed",
      +            "type": "number"
      +          },
      +          "id": {
      +            "description": "The ID as given",
      +            "type": "string"
      +          },
      +          "normalized": {
      +            "description": "The ID after removing provider prefixes such as models/ or openai/",
      +            "type": "string"
      +          },
      +          "page": {
      +            "description": "aidriftline.com page with the source for this date",
      +            "type": "string"
      +          },
      +          "provider": {
      +            "type": "string"
      +          },
      +          "qualifier": {
      +            "description": "exact date, earliest possible shutdown (Google), or not before this date (Anthropic)",
      +            "enum": [
      +              "exact",
      +              "earliest",
      +              "not-before"
      +            ],
      +            "type": "string"
      +          },
      +          "replacement": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "retires": {
      +            "description": "YYYY-MM-DD",
      +            "type": "string"
      +          },
      +          "routes": {
      +            "description": "true: after the date the provider answers with the replacement model instead of failing",
      +            "type": "boolean"
      +          },
      +          "status": {
      +            "description": "retired = calls fail (or are re-routed) now; at-risk = retires within 90 days; deprecated = retirement announced, further out; active = announced as active; unknown = no retirement published",
      +            "enum": [
      +              "retired",
      +              "at-risk",
      +              "deprecated",
      +              "active",
      +              "unknown"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "status",
      +          "advice"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "next_step": {
      +      "description": "Present when a model has to move: how to test prompts on the replacement first",
      +      "type": "string"
      +    },
      +    "registry_checked": {
      +      "description": "Date the registry was last checked against the provider pages",
      +      "type": "string"
      +    },
      +    "registry_source": {
      +      "description": "live = aidriftline.com/models.json; bundled = the copy shipped in the package (used offline)",
      +      "enum": [
      +        "live",
      +        "bundled"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "days",
      +    "count",
      +    "models"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, and open-world traits, yet the description still adds non-obvious behavior: results are sorted soonest-first, each row carries a replacement, models already past their date are excluded (deferred to check_models), and Anthropic 'not before' dates are omitted with a stated rationale. These are real semantic rules an agent could not infer from the annotations.

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 and scope lead, alternatives and edge cases follow, and no sentence is filler — even the Anthropic caveat earns its place by preventing a false-negative reading. It is a single dense block with slightly run-on pacing, which costs a point on readability but not on substance.

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?

With an output schema present the description needn't explain return values, and it still characterizes them (replacement per model, soonest-first ordering). Rich annotations plus full schema coverage plus stated exclusion rules leave nothing an agent needs in order to call this correctly.

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 description coverage is 100%, with both `days` and `provider` fully documented including default and range, so the schema does the heavy lifting and a 3 baseline applies. The description reinforces the window ('next N days') and the three-provider scope but adds no format or edge-case guidance (e.g., behavior at the 3650-day maximum) beyond what the schema states.

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 (list) and resource (models with retirement or re-routing dates) plus the providers covered, the look-ahead window, the sort order ('soonest first'), and the per-item output ('with replacement for each'). An agent can distinguish it from check_models and scan_project without opening either schema.

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

Usage Guidelines5/5

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

Gives both positive triggers ('what is being retired soon?', planning migrations) and explicit exclusions with named alternatives: 'It does not look at code: use scan_project for that, or check_models for specific IDs.' That is exactly the when/when-not/alternative routing an agent needs.

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

Deploy Server

Other Tools