UK Data: Software end-of-life dates
Server Details
Release, support and end-of-life dates for about 490 languages, OSes, databases and frameworks
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Score is being calculated.
Available Tools
6 toolseol_latest_releaseARead-onlyIdempotentInspect
What is the latest version of a product right now? Returns the newest release cycle, its latest patch version and date, release date, support status and end-of-life date. Live data avoids out-of-date answers about "the latest Python/Node/PostgreSQL". Source: endoflife.date (community-maintained, typically refreshed daily); preview or beta releases are not included. (cost: 1 credit)
| Name | Required | Description | Default |
|---|---|---|---|
| product | No | string, required, endoflife.date product slug (e.g. python, nodejs, postgresql) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the bar is lower, and the description still adds real context: the data source (endoflife.date), that it is community-maintained and typically refreshed daily, that preview/beta releases are filtered out, and that a call costs 1 credit. It does not say what happens when the product slug is unknown or not found, which is the main behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the user-facing question, then the return payload, then caveats (source, freshness, beta exclusion, cost). Every sentence carries information, though the parenthetical cost and source notes could be tightened and the phrase 'release cycle, its latest patch version and date, release date' is slightly repetitive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and states data provenance and freshness, which is what an agent needs to trust and cite the answer. The remaining gap is error/edge-case behavior (invalid slug, missing product) and whether historical cycles are ever included, but for a one-parameter read tool this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'product' parameter already documents the required slug with examples (python, nodejs, postgresql). The description only refers to 'a product' generically and adds no format guidance, aliasing advice, or example slugs beyond the schema. Baseline 3 is correct when the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific question-form verb+resource ('What is the latest version of a product right now?') and then enumerates exactly what is returned: newest release cycle, latest patch version and date, release date, support status, EOL date. This is concrete enough to separate it from sibling EOL tools like eol_unsupported_releases or eol_product_search, though it never names those siblings explicitly to sharpen the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to use it — whenever a user asks about 'the latest Python/Node/PostgreSQL' and stale training data is a risk — and notes that preview/beta releases are excluded. However, it gives no explicit when-not guidance and never routes the agent to eol_product_search or eol_unsupported_releases for the cases this tool does not cover (unsupported versions, browsing products).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eol_products_by_categoryARead-onlyIdempotentInspect
List the products endoflife.date tracks in one category: operating systems, databases, programming languages, frameworks, server applications, cloud services, applications, devices or standards. Returns each product slug, name, aliases and tags so you can then look up release dates. Source: endoflife.date; coverage is about 490 products and is not a full software inventory. (cost: 1 credit)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | integer, optional, products to return, 1-100, default 25 | |
| offset | No | integer, optional, skip this many products for paging, default 0 | |
| category | No | string, required, one of app, database, device, framework, lang, os, server-app, service, standard |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the bar is lower. The description still adds real context the annotations cannot: named source (endoflate.date), a coverage caveat (~490 products, not a full inventory) and a cost of 1 credit, which prevents the agent over-trusting absence from results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then return fields, then caveat and cost — a sensible priority order. The category enumeration is long but earns its place; the only slightly redundant element is the parenthetical cost note, which could sit anywhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read tool with no output schema, the description covers source, scope, returned fields and cost, which is enough to call it correctly. It stops short of explaining paging behavior or what the returned "tags" and "aliases" are good for, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so limit/offset/category are already documented and the baseline is 3. The description adds modest value by spelling the categories out in prose and, in effect, mapping friendly names ("cloud services", "programming languages") onto the slug values in the schema, though it never states that mapping explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("List the products endoflife.date tracks in one category") with the full category set enumerated, so an agent knows exactly what comes back. It does not name any sibling (e.g. eol_products_by_vendor_tag or eol_product_search) to draw the boundary, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"so you can then look up release dates" implies the downstream workflow and the natural follow-up call, but there is no explicit when-to-use-this-vs-alternatives guidance and no stated exclusion condition against eol_product_search or eol_products_by_vendor_tag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eol_products_by_vendor_tagARead-onlyIdempotentInspect
List the products endoflife.date tracks under one tag, usually a vendor (microsoft, amazon, google, oracle, red-hat), a family (linux-distribution) or a runtime (php-runtime, javascript-runtime). Answers "which Microsoft products have end-of-life dates" before you look up each one. Source: endoflife.date; tags are the project's own grouping (see eol_tags) and a vendor's list may be incomplete. (cost: 1 credit)
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | string, required, endoflife.date tag (e.g. microsoft, amazon, linux-distribution); see eol_tags | |
| limit | No | integer, optional, products to return, 1-100, default 25 | |
| offset | No | integer, optional, skip this many products for paging, default 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world, non-destructive behavior, and the description adds genuinely new context: the source (endoflate.date), that tags are the project's own grouping, that a vendor's list may be incomplete, and that each call costs 1 credit. That incompleteness caveat and cost note materially affect how an agent interprets and budgets the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the tag taxonomy, then adds the motivating question, source caveat, and cost note in a compact sequence. Slightly dense with parenthetical asides, but every sentence carries information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should ideally indicate what a product entry contains; it only says 'list the products,' leaving the returned fields unspecified. Otherwise it covers source, tag semantics, completeness caveat, and cost, which is sufficient for a simple read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining what a tag actually is and giving representative values across vendor, family, and runtime categories, plus pointing to eol_tags for enumeration. It does not explain paging semantics for limit/offset, but the schema handles those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (products tracked by endoflife.date under one tag), with concrete example tags spanning vendor, family, and runtime groupings. It clearly implies the tag-based cut, but never explicitly contrasts itself with the close sibling eol_products_by_category, so an agent must infer the tag-vs-category distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: use it to answer 'which Microsoft products have end-of-life dates' before looking up each one, and it routes the agent to eol_tags for tag discovery. It stops short of naming when to prefer eol_product_search or eol_products_by_category instead, so no explicit exclusion is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eol_product_searchARead-onlyIdempotentInspect
Find the endoflife.date product slug for an everyday name or alias ("postgres", "k8s", "node", "windows server") and check whether a product is tracked at all. Matches names, labels and aliases and returns the best matches first. Use it before the other end-of-life tools. Source: endoflife.date product list (about 490 products); untracked software returns no match. (cost: 1 credit)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | integer, optional, matches to return, 1-50, default 10 | |
| query | No | string, required, product name or alias, 2-80 characters |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds context annotations cannot: the backing dataset (endoflife.date product list, ~490 products), fuzzy matching across names/labels/aliases, best-match ordering, and a per-call cost of 1 credit. Missing is any statement about result shape beyond ordering, but the added behavioral value is real.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and aliased examples, then sequencing guidance, then source/cost metadata at the end where it belongs. Every sentence carries information, though the parenthetical cost note and the dataset-size aside make it slightly denser than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does reasonably: it says the tool returns slugs, ordered best-first, and returns nothing for untracked products. Combined with the cost note and usage ordering, an agent has enough to call it correctly. A brief note on what a match object contains beyond the slug would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the mechanical fields are documented already. The description still adds meaning: the query is an everyday name or alias rather than an exact canonical name, matching spans names, labels and aliases, and results are ranked. That directly informs how to phrase a query and how to interpret a near-miss. The limit parameter is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (find the endoflife.date product slug) and explicitly covers the secondary purpose (checking whether a product is tracked at all). Concrete examples ("postgres", "k8s", "node", "windows server") make it instantly distinguishable from siblings like eol_latest_release or eol_products_by_category, which operate on a slug this tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit sequencing rule: "Use it before the other end-of-life tools." It also supplies the negative case — untracked software returns no match — which tells the agent when to stop. It does not name a specific alternative for the case where the agent already knows the slug, so it falls short of a full when/when-not/alternative triad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eol_tagsARead-onlyIdempotentInspect
List every tag endoflife.date uses to group products: vendors (microsoft, amazon, google), families (linux-distribution) and runtimes (php-runtime, java-runtime). Use it to find a valid tag for eol_products_by_vendor_tag. Source: endoflife.date; tags are the project's own grouping, not an official vendor list. (cost: 1 credit)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds real value beyond that: it warns that tags are the project's own grouping rather than an official vendor list, and discloses the 1-credit cost, both of which affect how an agent should interpret and budget the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the action and the tag taxonomy, followed by the consumer tool, then a provenance caveat and cost. Every sentence carries distinct information with no repetition of the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial zero-param lookup with no output schema, the description covers what is returned (tags, grouped into vendors/families/runtimes) and what to do next. It stops short of stating the exact response shape (e.g. flat list vs. grouped object), a minor gap given no output schema exists to fill it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, which is the baseline-4 case. The description correctly implies a no-argument call by describing a full enumeration, and there are no inputs whose semantics would need explaining.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List every tag endoflife.date uses to group products" states a specific verb and resource, then enumerates the three tag categories (vendors, families, runtimes) with concrete examples. This clearly separates it from eol_products_by_vendor_tag and eol_products_by_category, which consume rather than enumerate tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it to find a valid tag for eol_products_by_vendor_tag" states the downstream condition that selects this tool, which is the key routing signal. It doesn't explicitly cover when not to use it, but for a zero-parameter enumeration tool with an obvious single consumer, no exclusion is genuinely needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eol_unsupported_releasesARead-onlyIdempotentInspect
Which versions of a product are already end of life? Lists the release cycles past their end-of-life date, newest first, with the end-of-life date, the last patch version and whether extended (often paid) support is still available. Useful for security audits and spotting outdated versions in an estate. Source: endoflife.date (community-maintained); it reports published dates, not whether a given install is patched. (cost: 1 credit)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | integer, optional, cycles to return, newest first, 1-100, default 25 | |
| product | No | string, required, endoflife.date product slug (e.g. php, python, nodejs) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds real value beyond them: result ordering (newest first), the returned fields, the source (endoflife.date, community-maintained), a caveat that it reports published dates rather than whether an install is patched, and a 1-credit cost. It does not explain edge behavior (unknown product slug, empty results), keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded as a question, followed by scope, returned fields, usage context, source caveat, and cost — a sensible priority order. The phrasing is tight, though the parenthetical cost note and source sentence add some length that could be trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only lookup with full schema coverage and no output schema, the description adequately covers purpose, ordering, returned fields, source reliability and limits. What is missing is minor: handling of an unrecognized product slug and how truncation by `limit` behaves beyond the schema note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both `product` (slug examples like php, python, nodejs) and `limit` (integer, 1-100, default 25) are fully documented in the schema. The description only reinforces the ordering semantics ("newest first") already stated for `limit`. Baseline 3 applies since the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening question ("Which versions of a product are already end of life?") plus the explicit scope ("Lists the release cycles past their end-of-life date") gives a specific verb+resource. It implicitly separates itself from eol_latest_release by focusing on past-EOL cycles, but never names that sibling, so an agent must infer the routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a concrete usage context: "Useful for security audits and spotting outdated versions in an estate." That is clear guidance on when to reach for it. There are no exclusions or explicit pointers to alternatives (eol_latest_release, eol_product_search), so it falls short of the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- First observed
eol_latest_release - First observed
eol_product_search - First observed
eol_products_by_category - First observed
eol_products_by_vendor_tag - First observed
eol_tags - First observed
eol_unsupported_releases
Related MCP Connectors
Software end-of-life dates, open-source licenses, browser support for web features and RFC facts.
Latest versions, LTS windows, and EOL dates for 300+ products. Fresh ground truth for stale models.
Is this version still supported? End-of-life dates for 14 runtimes and operating systems.
What breaks between versions, vulnerabilities, compatible versions, EOL dates: npm, PyPI, Rust, PHP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables querying software product release and support timelines, including EOL dates, active-support end, latest patch, and LTS status for products or specific versions.502 npmMIT

endoflife-mcpofficial
AlicenseAqualityBmaintenanceSoftware end-of-life intelligence for AI agents: EOL dates, support timelines and 0-100 upgrade risk scores for 480+ products. Check whether a version is still supported, score its risk, or audit an entire stack.5194 npmMIT- AlicenseAqualityFmaintenanceProvides access to the endoflife.date API to query support and end-of-life information for thousands of software products. It enables users to retrieve detailed release schedules, lifecycle data, and product categories through natural language.7194 npmMIT
- FlicenseNot gradedqualityDmaintenanceProvides product lifecycle, release cycle, and End of Life (EOL) date information from endoflife.date.-
Glama MCP Gateway
Add one secure layer between your agents and this server.