Skip to main content
Glama

browser-compat-mcp-server

Browsercompat Compare Support

browsercompat_compare_support
Read-onlyIdempotent

Compute whether a set of web features clears an explicit browserslist target query. Compares up to 20 features per call; up to 100 may be sent, and entries past the 20th come back unevaluated in omitted_features for the next call. Every call evaluates the whole query: each feature gets a verdict, the count of failing targets, those targets grouped into runs of consecutive query targets per browser in failing_ranges, and its own evaluated and unevaluated target counts with the percentage points of global traffic each covers. The target rows behind those numbers — which release each target maps to, which targets were not evaluated and why, and the failing and unevaluated targets of each feature, a failing row carrying the prefix, alternative name, or flag behind its verdict — cover at most ten query targets per call; page through them with target_offset and target_limit, and the verdicts, coverage, and totals stay identical on every page. A target counts as evaluated only where compatibility data was read for it, so a feature clears only when every target in the query was evaluated and supports it, and is inconclusive otherwise — a query that includes a browser with no compatibility data, as "defaults" does, never clears. A BCD key is judged on its own per-browser support. A web-features id spanning several keys, such as grid, is judged on the release web-features lists for the feature as a whole in each Baseline core browser, as support_source says; its other browsers are not evaluated.

Input Schema

NameRequiredDescriptionDefault
resolveNoWhen true, an entry that is neither a key nor an id falls back to the search index, such as "Container queries (size)" or "Element.prototype.animate". Its best exact matches are accepted only when they name one feature: a single key resolves to that key and is judged on it, several keys of one web-features feature resolve to the feature and are judged on its feature-level support with compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct rather than a confident answer about the wrong feature.
targetsYesA self-contained browserslist query, for example "defaults" or "> 0.5%, last 2 versions", 1 to 500 characters. Config packages and custom configuration are unsupported; local config discovery is disabled.
featuresYesEntries to compare, each a browser-compat-data key such as css.selectors.has or a web-features id such as has, 1 to 200 characters. The first 20 are compared per call; up to 100 are accepted, and entries past the 20th are returned unevaluated in omitted_features. More than 100 entries, or an empty or longer entry anywhere in the list, is rejected against this schema; a whitespace-only entry anywhere returns invalid_feature_input. Call browsercompat_search_features first for any entry whose key you do not already know.
target_limitNoHow many query targets this page covers, at most 10 per call; a value from 11 to 1000 is served as 10, and the cap enrichment field reports the size applied. It bounds every list of target rows in the response and never the evaluation: verdicts, coverage, and totals always describe the whole query.
target_offsetNoZero-based position in the target list of the query at which this page of target rows starts. Pass the nextOffset of the previous response to continue. An offset at or past the number of targets returns the whole-query verdicts and totals with no target rows.

Output Schema

NameRequiredDescriptionDefault
capNoThe page size applied: target_limit, or 10 when target_limit was above 10.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of query targets this page covers.
resultsNoPer-feature verdicts and totals over the whole query for the first 20 entries, each with its own target rows for this page.
all_clearNoTrue only when every feature clears, which requires every target in the query to have been evaluated for it — for a feature judged on web-features’ feature-level support, every target must be a Baseline core browser. Any entry in omitted_features forces false.
truncatedNoTrue when more query targets remain past this page.
nextOffsetNoThe target_offset of the next page. Present only while targets remain past this page.
query_echoNoThe targets query as the server parsed it.
totalCountNoNumber of targets the query resolved to, across every page.
attributionNoRequired attribution for the caniuse-derived coverage figures in this response.
data_versionNoVintage of each bundled dataset behind this answer.
offsetNoticeNoWhy this page carries no target rows, and the offsets that do.
uncheckedNoticeNoHow many of the query targets were not evaluated for every compared feature, the agents they belong to, and their combined usage share.
omitted_featuresNoEntries past the first 20, verbatim and in input order, that were not compared. Present only when the call sent more than 20; pass them as features in the next call.
targets_resolvedNoThe mapping inventory for the query targets on this page: each target that maps onto a browser-compat-data release, and whether it was evaluated. A target with no mapping appears only in unchecked_targets.
unchecked_targetsNoThe query targets on this page that were not evaluated for every compared feature, each with the reason.
comparable_featuresNoHow many entries in features were compared against the targets, on a key or on web-features’ feature-level support. A miss or an ambiguous entry is not comparable; at 0 nothing was evaluated.
targets_resolved_totalNoQuery targets that map onto a browser-compat-data release, across every page.
evaluated_targets_totalNoQuery targets evaluated for every compared feature, across every page. evaluated_targets_total plus unchecked_targets_total is the number of targets in the query.
target_coverage_percentNoPercentage points of global traffic covered by the targets evaluated for every compared feature; 0 when no feature was comparable.
unchecked_targets_totalNoQuery targets not evaluated for every compared feature, across every page.
unchecked_coverage_percentNoPercentage points of global traffic covered by the targets counted in unchecked_targets_total.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / targets / description
      Previous value: -"A browserslist query, for example \"defaults\" or \"> 0.5%, last 2 versions\", 1 to 500 characters. Required: with no query browserslist would read config from the process working directory rather than from your project."New value: +"A self-contained browserslist query, for example \"defaults\" or \"> 0.5%, last 2 versions\", 1 to 500 characters. Config packages and custom configuration are unsupported; local config discovery is disabled."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_target_query`: browserslist rejected the targets query. `no_targets_resolved`: The query matched no browser versions at all, or only agents with no browser-compat-data counterpart. A mapped agent whose version token does not resolve is reported in unchecked_targets instead. `invalid_feature_input`: An entry in features is whitespace-only, including an entry past the 20th. An empty or over-200-character entry is rejected against the input schema instead. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_target_query`: browserslist rejected the targets query, or it requires config packages or custom configuration. `no_targets_resolved`: The query matched no browser versions at all, or only agents with no browser-compat-data counterpart. A mapped agent whose version token does not resolve is reported in unchecked_targets instead. `invalid_feature_input`: An entry in features is whitespace-only, including an entry past the 20th. An empty or over-200-character entry is rejected against the input schema instead. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / results / items / properties / evaluated_coverage_percent / description
      Previous value: -"Share of tracked global traffic the targets evaluated for this feature cover."New value: +"Percentage points of global traffic the targets evaluated for this feature cover."
    • changedOutput schema / properties / results / items / properties / unchecked_coverage_percent / description
      Previous value: -"Share of tracked global traffic the targets not evaluated for this feature cover."New value: +"Percentage points of global traffic the targets not evaluated for this feature cover."
    • changedOutput schema / properties / results / items / properties / unchecked_targets / items / properties / usage_percent / description
      Previous value: -"Share of tracked global traffic this target covers."New value: +"Percentage points of global traffic this target covers."
    • changedOutput schema / properties / target_coverage_percent / description
      Previous value: -"Share of tracked global traffic covered by the targets evaluated for every compared feature; 0 when no feature was comparable."New value: +"Percentage points of global traffic covered by the targets evaluated for every compared feature; 0 when no feature was comparable."
    • changedOutput schema / properties / unchecked_coverage_percent / description
      Previous value: -"Share of tracked global traffic covered by the targets counted in unchecked_targets_total."New value: +"Percentage points of global traffic covered by the targets counted in unchecked_targets_total."
    • changedOutput schema / properties / unchecked_targets / items / properties / usage_percent / description
      Previous value: -"Share of tracked global traffic this target covers."New value: +"Percentage points of global traffic this target covers."
  2. Changed35 schema fields changed
    • changedInput schema / properties / features / description
      Previous value: -"Up to 20 entries, each a browser-compat-data key such as css.selectors.has or a web-features id such as has, 1 to 200 characters. An empty or longer entry is rejected against this schema; a whitespace-only entry returns invalid_feature_input. Call browsercompat_search_features first for any entry whose key you do not already know."New value: +"Entries to compare, each a browser-compat-data key such as css.selectors.has or a web-features id such as has, 1 to 200 characters. The first 20 are compared per call; up to 100 are accepted, and entries past the 20th are returned unevaluated in omitted_features. More than 100 entries, or an empty or longer entry anywhere in the list, is rejected against this schema; a whitespace-only entry anywhere returns invalid_feature_input. Call browsercompat_search_features first for any entry whose key you do not already know."
    • changedInput schema / properties / features / maxItems
      Previous value: -20New value: +100
    • changedInput schema / properties / resolve / description
      Previous value: -"When true, an entry that is neither a key nor an id falls back to the search index, such as \"Container queries (size)\" or \"Element.prototype.animate\". Its best exact matches are accepted only when they name one feature: a single key resolves to that key and gets a verdict, several keys of one web-features feature resolve to the feature as verdict ambiguous with compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct rather than a confident answer about the wrong feature."New value: +"When true, an entry that is neither a key nor an id falls back to the search index, such as \"Container queries (size)\" or \"Element.prototype.animate\". Its best exact matches are accepted only when they name one feature: a single key resolves to that key and is judged on it, several keys of one web-features feature resolve to the feature and are judged on its feature-level support with compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct rather than a confident answer about the wrong feature."
    • changedInput schema / properties / target_limit / description
      Previous value: -"How many query targets this page covers, 1 to 10. It bounds every list of target rows in the response and never the evaluation: verdicts, coverage, and totals always describe the whole query."New value: +"How many query targets this page covers, at most 10 per call; a value from 11 to 1000 is served as 10, and the cap enrichment field reports the size applied. It bounds every list of target rows in the response and never the evaluation: verdicts, coverage, and totals always describe the whole query."
    • changedInput schema / properties / target_limit / maximum
      Previous value: -10New value: +1000
    • changedOutput schema / properties / all_clear / description
      Previous value: -"True only when every feature clears, which requires every target in the query to have been evaluated for it."New value: +"True only when every feature clears, which requires every target in the query to have been evaluated for it — for a feature judged on web-features’ feature-level support, every target must be a Baseline core browser. Any entry in omitted_features forces false."
    • changedOutput schema / properties / cap / description
      Previous value: -"The target_limit that was applied."New value: +"The page size applied: target_limit, or 10 when target_limit was above 10."
    • changedOutput schema / properties / comparable_features / description
      Previous value: -"How many entries in features were compared against the targets. A miss or an ambiguous entry is not comparable; at 0 nothing was evaluated."New value: +"How many entries in features were compared against the targets, on a key or on web-features’ feature-level support. A miss or an ambiguous entry is not comparable; at 0 nothing was evaluated."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_target_query`: browserslist rejected the targets query. `no_targets_resolved`: The query matched no browser versions at all, or only agents with no browser-compat-data counterpart. A mapped agent whose version token does not resolve is reported in unchecked_targets instead. `invalid_feature_input`: An entry in features is whitespace-only. An empty or over-200-character entry is rejected against the input schema instead. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_target_query`: browserslist rejected the targets query. `no_targets_resolved`: The query matched no browser versions at all, or only agents with no browser-compat-data counterpart. A mapped agent whose version token does not resolve is reported in unchecked_targets instead. `invalid_feature_input`: An entry in features is whitespace-only, including an entry past the 20th. An empty or over-200-character entry is rejected against the input schema instead. Other values are possible when a failure originates below the handler."
    • addedOutput schema / properties / omitted_features
      Added value: +{
      +  "description": "Entries past the first 20, verbatim and in input order, that were not compared. Present only when the call sent more than 20; pass them as features in the next call.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / results / description
      Previous value: -"Per-feature verdicts and totals over the whole query, each with its own target rows for this page."New value: +"Per-feature verdicts and totals over the whole query for the first 20 entries, each with its own target rows for this page."
    • changedOutput schema / properties / results / items / description
      Previous value: -"One result per input entry, in input order."New value: +"One result per evaluated entry, in input order."
    • changedOutput schema / properties / results / items / properties / compat_keys / description
      Previous value: -"Present on an ambiguous verdict — the browser-compat-data keys the feature owns. Re-run with one of them."New value: +"The browser-compat-data keys a web-features id owns, its first 10 in declaration order: present when the id spans more than one key and was judged on its feature-level support, and as an empty list on an ambiguous verdict. compat_keys_total counts all of them; call browsercompat_get_feature with the id for the rest. Call again with one of them for a key-level verdict that also covers non-core browsers."
    • addedOutput schema / properties / results / items / properties / compat_keys_total
      Added value: +{
      +  "description": "Every browser-compat-data key the id owns. Present with compat_keys.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / results / items / properties / failing_ranges
      Added value: +{
      +  "description": "Every failing target across the whole query, grouped into runs: consecutive query targets of one browserslist agent that fail with the same verdict, in query order — agents in browserslist’s order, newest run first. A run breaks at any target that passed or was not evaluated for this feature, so it spans only versions the query contains. The counts sum to failing_total, and the list is the same on every page. Empty when nothing failed.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "A run of consecutive failing query targets.",
      +    "properties": {
      +      "agent": {
      +        "description": "browserslist agent id of every target in the run.",
      +        "type": "string"
      +      },
      +      "count": {
      +        "description": "Query targets in the run.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "newest": {
      +        "description": "Version token of the run’s first, newest target.",
      +        "type": "string"
      +      },
      +      "oldest": {
      +        "description": "Version token of the run’s last, oldest target; equals newest for a run of one.",
      +        "type": "string"
      +      },
      +      "verdict": {
      +        "description": "Why this target failed. From a key: partial means the implementation does not meet the mandatory specified behavior, prefixed means it only ships under a vendor prefix or a different name, flagged means it only works behind a preference or runtime flag, removed means it shipped and was later removed before this target version, unsupported means it was never added, preview_only means it only works in a preview channel. From web-features’ feature-level support: before_feature_support means the target predates the release web-features lists for the feature, no_feature_support means web-features lists no release of this core browser for the feature — which also covers a feature it lists no release for at all, such as a discontinued one (mutation-events) that older releases shipped; call again with one of compat_keys for a key-level verdict on such a target.",
      +        "enum": [
      +          "partial",
      +          "prefixed",
      +          "flagged",
      +          "removed",
      +          "unsupported",
      +          "preview_only",
      +          "before_feature_support",
      +          "no_feature_support"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "agent",
      +      "newest",
      +      "oldest",
      +      "count",
      +      "verdict"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / results / items / properties / failing_targets / description
      Previous value: -"The failing targets among the query targets on this page, with the verdict that caused each. Empty on a page that holds none even when failing_total is above zero."New value: +"The failing targets among the query targets on this page, with the verdict that caused each. A row judged on a key also carries the fields of the support statement behind its verdict — version_added, prefix, alternative_name, flags, and the rest — each only when that statement has it; an unsupported or preview_only row, and a row judged on web-features’ feature-level support, carry none. Empty on a page that holds none even when failing_total is above zero."
    • addedOutput schema / properties / results / items / properties / failing_targets / items / properties / alternative_name
      Added value: +{
      +  "description": "Entirely different name the feature is implemented under.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / failing_targets / items / properties / flags
      Added value: +{
      +  "description": "Flags gating support in this browser.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "A flag that must be configured for support.",
      +    "properties": {
      +      "name": {
      +        "description": "Name of the flag or preference to configure.",
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Whether the gate is a user preference or a runtime flag.",
      +        "enum": [
      +          "preference",
      +          "runtime_flag"
      +        ],
      +        "type": "string"
      +      },
      +      "value_to_set": {
      +        "description": "Value the flag must be set to.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / results / items / properties / failing_targets / items / properties / partial
      Added value: +{
      +  "description": "True when the implementation does not meet the mandatory specified behavior.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / results / items / properties / failing_targets / items / properties / prefix
      Added value: +{
      +  "description": "Vendor prefix the feature ships under.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / properties / failing_targets / items / properties / verdict / description
      Previous value: -"Why this target failed: partial means the implementation does not meet the mandatory specified behavior, prefixed means it only ships under a vendor prefix or a different name, flagged means it only works behind a preference or runtime flag, removed means it shipped and was later removed before this target version, unsupported means it was never added, preview_only means it only works in a preview channel."New value: +"Why this target failed. From a key: partial means the implementation does not meet the mandatory specified behavior, prefixed means it only ships under a vendor prefix or a different name, flagged means it only works behind a preference or runtime flag, removed means it shipped and was later removed before this target version, unsupported means it was never added, preview_only means it only works in a preview channel. From web-features’ feature-level support: before_feature_support means the target predates the release web-features lists for the feature, no_feature_support means web-features lists no release of this core browser for the feature — which also covers a feature it lists no release for at all, such as a discontinued one (mutation-events) that older releases shipped; call again with one of compat_keys for a key-level verdict on such a target."
    • changedOutput schema / properties / results / items / properties / failing_targets / items / properties / verdict / enum
      Previous value: -[
      -  "partial",
      -  "prefixed",
      -  "flagged",
      -  "removed",
      -  "unsupported",
      -  "preview_only"
      -]New value: +[
      +  "partial",
      +  "prefixed",
      +  "flagged",
      +  "removed",
      +  "unsupported",
      +  "preview_only",
      +  "before_feature_support",
      +  "no_feature_support"
      +]
    • addedOutput schema / properties / results / items / properties / failing_targets / items / properties / version_added
      Added value: +{
      +  "description": "Release that added support.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / failing_targets / items / properties / version_added_is_upper_bound
      Added value: +{
      +  "description": "True when the data says support arrived at or before version_added, not exactly at it.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / results / items / properties / failing_targets / items / properties / version_last
      Added value: +{
      +  "description": "Last release that still supported the feature.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / failing_targets / items / properties / version_removed
      Added value: +{
      +  "description": "Release that removed support.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / properties / failing_total / description
      Previous value: -"Failing targets across the whole query. Present when the feature was compared, as are the five fields after it."New value: +"Failing targets across the whole query. Present when the feature was compared, as are the six fields after it."
    • changedOutput schema / properties / results / items / properties / resolved_as / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "baseline_id": {
      -        "description": "The web-features id this resolved to, or null when no web-features entry covers the key.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "bcd_key": {
      -        "description": "The single browser-compat-data key this resolved to, or null when the web-features id spans more than one key.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "input": {
      -        "description": "The feature string as the caller sent it, trimmed.",
      -        "type": "string"
      -      },
      -      "resolved_via": {
      -        "description": "Which step of the resolution order matched: bcd_key or web_features_id for an exact match, web_features_id_normalized when it matched only after lowercasing, redirect when the input pointed to a browser-compat-data entry that has moved or split, or search when resolve was true and the best exact matches in the search index all named one feature or key — treat a search match as a best guess, not a confirmed key.",
      -        "enum": [
      -          "bcd_key",
      -          "web_features_id",
      -          "web_features_id_normalized",
      -          "redirect",
      -          "search"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "input",
      -      "bcd_key",
      -      "baseline_id",
      -      "resolved_via"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "baseline_id": {
      +        "description": "The web-features id this resolved to, or null when no web-features entry covers the key.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "bcd_key": {
      +        "description": "The single browser-compat-data key this resolved to, or null when the web-features id spans more than one key or owns none.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "input": {
      +        "description": "The feature string as the caller sent it, trimmed.",
      +        "type": "string"
      +      },
      +      "resolved_via": {
      +        "description": "Which step of the resolution order matched: bcd_key or web_features_id for an exact match, web_features_id_normalized when it matched only after lowercasing, redirect when the input pointed to a browser-compat-data entry that has moved or split, or search when resolve was true and the best exact matches in the search index all named one feature or key — treat a search match as a best guess, not a confirmed key.",
      +        "enum": [
      +          "bcd_key",
      +          "web_features_id",
      +          "web_features_id_normalized",
      +          "redirect",
      +          "search"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "input",
      +      "bcd_key",
      +      "baseline_id",
      +      "resolved_via"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / results / items / properties / support_source
      Added value: +{
      +  "description": "What the verdict was judged on. bcd_key: one browser-compat-data key’s per-browser support. web_features_feature: for an id spanning more than one key, web-features’ own release per Baseline core browser for the feature as a whole — never a combination of its keys, and a key can differ from it either way; browsers outside the core set are then not evaluated. Present on every compared result.",
      +  "enum": [
      +    "bcd_key",
      +    "web_features_feature"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / properties / unchecked_targets / items / properties / reason / description
      Previous value: -"no_bcd_browser when the agent has no browser-compat-data counterpart, unknown_version when the token maps to no release, no_bcd_data when a compared feature records nothing for that browser, no_comparable_feature when every entry in features was a miss or ambiguous so nothing was compared."New value: +"no_bcd_browser when the agent has no browser-compat-data counterpart, unknown_version when the token maps to no release, no_bcd_data when a compared key records nothing for that browser, no_feature_level_data when a feature judged on web-features’ feature-level support has no answer for the target — a browser outside the Baseline core set, or a release before a ≤ bound — so call again with one of its compat_keys for a key-level answer, no_comparable_feature when every entry in features was a miss or ambiguous so nothing was compared. In the top-level list a target unchecked by several compared features takes the reason of the first of them."
    • changedOutput schema / properties / results / items / properties / unchecked_targets / items / properties / reason / enum
      Previous value: -[
      -  "no_bcd_browser",
      -  "unknown_version",
      -  "no_bcd_data",
      -  "no_comparable_feature"
      -]New value: +[
      +  "no_bcd_browser",
      +  "unknown_version",
      +  "no_bcd_data",
      +  "no_feature_level_data",
      +  "no_comparable_feature"
      +]
    • changedOutput schema / properties / results / items / properties / verdict / description
      Previous value: -"Judged over the whole query, never over one page. fails when any evaluated target does not support the feature; inconclusive when nothing failed but at least one target in the query was not evaluated for this feature, including when none was; clears only when every target in the query was evaluated and supports it; miss when the entry did not resolve; ambiguous when the id spans more than one compat key or owns none."New value: +"Judged over the whole query, never over one page. fails when any evaluated target does not support the feature; inconclusive when nothing failed but at least one target in the query was not evaluated for this feature, including when none was; clears only when every target in the query was evaluated and supports it; miss when the entry did not resolve; ambiguous when the web-features id owns no browser-compat-data keys, so there is no support data to judge."
    • changedOutput schema / properties / targets_resolved / items / properties / evaluated / description
      Previous value: -"True when every compared feature has compatibility data for this target. False when at least one compared feature records nothing for its browser, or when no feature in the call was comparable — the target then also appears in unchecked_targets. Mapping onto a release is not evaluation."New value: +"True when every compared feature has compatibility data for this target. False when at least one compared feature records nothing for its browser or has no feature-level data for it, or when no feature in the call was comparable — the target then also appears in unchecked_targets. Mapping onto a release is not evaluation."
    • changedOutput schema / properties / unchecked_targets / items / properties / reason / description
      Previous value: -"no_bcd_browser when the agent has no browser-compat-data counterpart, unknown_version when the token maps to no release, no_bcd_data when a compared feature records nothing for that browser, no_comparable_feature when every entry in features was a miss or ambiguous so nothing was compared."New value: +"no_bcd_browser when the agent has no browser-compat-data counterpart, unknown_version when the token maps to no release, no_bcd_data when a compared key records nothing for that browser, no_feature_level_data when a feature judged on web-features’ feature-level support has no answer for the target — a browser outside the Baseline core set, or a release before a ≤ bound — so call again with one of its compat_keys for a key-level answer, no_comparable_feature when every entry in features was a miss or ambiguous so nothing was compared. In the top-level list a target unchecked by several compared features takes the reason of the first of them."
    • changedOutput schema / properties / unchecked_targets / items / properties / reason / enum
      Previous value: -[
      -  "no_bcd_browser",
      -  "unknown_version",
      -  "no_bcd_data",
      -  "no_comparable_feature"
      -]New value: +[
      +  "no_bcd_browser",
      +  "unknown_version",
      +  "no_bcd_data",
      +  "no_feature_level_data",
      +  "no_comparable_feature"
      +]
  3. Changed33 schema fields changed
    • changedInput schema / properties / resolve / description
      Previous value: -"When true, an entry that is neither a key nor an id falls back to the search index, such as \"Container queries\" or \"Element.prototype.animate\". Its best exact matches are accepted only when they name one feature: a single key resolves to that key and gets a verdict, several keys of one web-features feature resolve to the feature as verdict ambiguous with compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct rather than a confident answer about the wrong feature."New value: +"When true, an entry that is neither a key nor an id falls back to the search index, such as \"Container queries (size)\" or \"Element.prototype.animate\". Its best exact matches are accepted only when they name one feature: a single key resolves to that key and gets a verdict, several keys of one web-features feature resolve to the feature as verdict ambiguous with compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct rather than a confident answer about the wrong feature."
    • addedInput schema / properties / target_limit
      Added value: +{
      +  "default": 10,
      +  "description": "How many query targets this page covers, 1 to 10. It bounds every list of target rows in the response and never the evaluation: verdicts, coverage, and totals always describe the whole query.",
      +  "maximum": 10,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / target_offset
      Added value: +{
      +  "default": 0,
      +  "description": "Zero-based position in the target list of the query at which this page of target rows starts. Pass the nextOffset of the previous response to continue. An offset at or past the number of targets returns the whole-query verdicts and totals with no target rows.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "query_echo",
      -      "targets_resolved",
      -      "unchecked_targets",
      -      "target_coverage_percent",
      -      "unchecked_coverage_percent",
      -      "results",
      -      "all_clear",
      -      "data_version",
      -      "totalCount",
      -      "attribution"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "query_echo",
      +      "comparable_features",
      +      "targets_resolved",
      +      "targets_resolved_total",
      +      "evaluated_targets_total",
      +      "unchecked_targets",
      +      "unchecked_targets_total",
      +      "target_coverage_percent",
      +      "unchecked_coverage_percent",
      +      "results",
      +      "all_clear",
      +      "data_version",
      +      "totalCount",
      +      "shown",
      +      "cap",
      +      "truncated",
      +      "attribution"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • changedOutput schema / properties / all_clear / description
      Previous value: -"True only when every feature clears and unchecked_targets is empty."New value: +"True only when every feature clears, which requires every target in the query to have been evaluated for it."
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The target_limit that was applied.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / comparable_features
      Added value: +{
      +  "description": "How many entries in features were compared against the targets. A miss or an ambiguous entry is not comparable; at 0 nothing was evaluated.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / evaluated_targets_total
      Added value: +{
      +  "description": "Query targets evaluated for every compared feature, across every page. evaluated_targets_total plus unchecked_targets_total is the number of targets in the query.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / nextOffset
      Added value: +{
      +  "description": "The target_offset of the next page. Present only while targets remain past this page.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / offsetNotice
      Added value: +{
      +  "description": "Why this page carries no target rows, and the offsets that do.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / description
      Previous value: -"Per-feature verdicts against the resolved targets."New value: +"Per-feature verdicts and totals over the whole query, each with its own target rows for this page."
    • addedOutput schema / properties / results / items / properties / evaluated_coverage_percent
      Added value: +{
      +  "description": "Share of tracked global traffic the targets evaluated for this feature cover.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / results / items / properties / evaluated_total
      Added value: +{
      +  "description": "Query targets this feature has compatibility data for, across the whole query.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / results / items / properties / failing_targets / description
      Previous value: -"Every resolved target that failed, with the verdict that caused it."New value: +"The failing targets among the query targets on this page, with the verdict that caused each. Empty on a page that holds none even when failing_total is above zero."
    • addedOutput schema / properties / results / items / properties / failing_total
      Added value: +{
      +  "description": "Failing targets across the whole query. Present when the feature was compared, as are the five fields after it.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / results / items / properties / unchecked_coverage_percent
      Added value: +{
      +  "description": "Share of tracked global traffic the targets not evaluated for this feature cover.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / results / items / properties / unchecked_targets
      Added value: +{
      +  "description": "The targets not evaluated for this feature among the query targets on this page, each with its reason.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "A target this feature was not evaluated against.",
      +    "properties": {
      +      "agent": {
      +        "description": "browserslist agent id.",
      +        "type": "string"
      +      },
      +      "reason": {
      +        "description": "no_bcd_browser when the agent has no browser-compat-data counterpart, unknown_version when the token maps to no release, no_bcd_data when a compared feature records nothing for that browser, no_comparable_feature when every entry in features was a miss or ambiguous so nothing was compared.",
      +        "enum": [
      +          "no_bcd_browser",
      +          "unknown_version",
      +          "no_bcd_data",
      +          "no_comparable_feature"
      +        ],
      +        "type": "string"
      +      },
      +      "usage_percent": {
      +        "description": "Share of tracked global traffic this target covers.",
      +        "type": "number"
      +      },
      +      "version_token": {
      +        "description": "Version token browserslist produced for that agent.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "agent",
      +      "version_token",
      +      "reason",
      +      "usage_percent"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / results / items / properties / unchecked_total
      Added value: +{
      +  "description": "Query targets not evaluated for this feature, across the whole query. evaluated_total plus unchecked_total is the number of targets in the query.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / results / items / properties / verdict / description
      Previous value: -"clears only when every resolved target is supported; inconclusive when a target could not be evaluated, including when no target resolved at all; ambiguous when the id spans more than one compat key."New value: +"Judged over the whole query, never over one page. fails when any evaluated target does not support the feature; inconclusive when nothing failed but at least one target in the query was not evaluated for this feature, including when none was; clears only when every target in the query was evaluated and supports it; miss when the entry did not resolve; ambiguous when the id spans more than one compat key or owns none."
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of query targets this page covers.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / target_coverage_percent / description
      Previous value: -"Share of tracked global traffic the evaluated targets cover."New value: +"Share of tracked global traffic covered by the targets evaluated for every compared feature; 0 when no feature was comparable."
    • changedOutput schema / properties / targets_resolved / description
      Previous value: -"Every browserslist token that was evaluated."New value: +"The mapping inventory for the query targets on this page: each target that maps onto a browser-compat-data release, and whether it was evaluated. A target with no mapping appears only in unchecked_targets."
    • addedOutput schema / properties / targets_resolved / items / properties / evaluated
      Added value: +{
      +  "description": "True when every compared feature has compatibility data for this target. False when at least one compared feature records nothing for its browser, or when no feature in the call was comparable — the target then also appears in unchecked_targets. Mapping onto a release is not evaluation.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / targets_resolved / items / required
      Previous value: -[
      -  "agent",
      -  "version_token",
      -  "bcd_browser",
      -  "bcd_version",
      -  "bcd_release_index"
      -]New value: +[
      +  "agent",
      +  "version_token",
      +  "bcd_browser",
      +  "bcd_version",
      +  "bcd_release_index",
      +  "evaluated"
      +]
    • addedOutput schema / properties / targets_resolved_total
      Added value: +{
      +  "description": "Query targets that map onto a browser-compat-data release, across every page.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Number of feature results returned."New value: +"Number of targets the query resolved to, across every page."
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when more query targets remain past this page.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / uncheckedNotice / description
      Previous value: -"Names the target agents that were not evaluated and their combined usage share."New value: +"How many of the query targets were not evaluated for every compared feature, the agents they belong to, and their combined usage share."
    • changedOutput schema / properties / unchecked_coverage_percent / description
      Previous value: -"Share of tracked global traffic the unevaluated targets cover."New value: +"Share of tracked global traffic covered by the targets counted in unchecked_targets_total."
    • changedOutput schema / properties / unchecked_targets / description
      Previous value: -"Every target the server declined to claim a verdict for, with the reason."New value: +"The query targets on this page that were not evaluated for every compared feature, each with the reason."
    • changedOutput schema / properties / unchecked_targets / items / properties / reason / description
      Previous value: -"no_bcd_browser when the agent has no counterpart, unknown_version when the token maps to no release, no_bcd_data when a feature records nothing for that browser."New value: +"no_bcd_browser when the agent has no browser-compat-data counterpart, unknown_version when the token maps to no release, no_bcd_data when a compared feature records nothing for that browser, no_comparable_feature when every entry in features was a miss or ambiguous so nothing was compared."
    • changedOutput schema / properties / unchecked_targets / items / properties / reason / enum
      Previous value: -[
      -  "no_bcd_browser",
      -  "unknown_version",
      -  "no_bcd_data"
      -]New value: +[
      +  "no_bcd_browser",
      +  "unknown_version",
      +  "no_bcd_data",
      +  "no_comparable_feature"
      +]
    • addedOutput schema / properties / unchecked_targets_total
      Added value: +{
      +  "description": "Query targets not evaluated for every compared feature, across every page.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / resolve / description
      Previous value: -"When true, fall back to the search index and accept its single unambiguous top hit for each entry. Off by default so a typo returns a miss you can correct rather than a confident answer about the wrong feature."New value: +"When true, an entry that is neither a key nor an id falls back to the search index, such as \"Container queries\" or \"Element.prototype.animate\". Its best exact matches are accepted only when they name one feature: a single key resolves to that key and gets a verdict, several keys of one web-features feature resolve to the feature as verdict ambiguous with compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct rather than a confident answer about the wrong feature."
    • changedOutput schema / properties / results / items / properties / resolved_as / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "baseline_id": {
      -        "description": "The web-features id this resolved to, or null when no web-features entry covers the key.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "bcd_key": {
      -        "description": "The single browser-compat-data key this resolved to, or null when the web-features id spans more than one key.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "input": {
      -        "description": "The feature string as the caller sent it, trimmed.",
      -        "type": "string"
      -      },
      -      "resolved_via": {
      -        "description": "Which step of the resolution order matched: bcd_key or web_features_id for an exact match, web_features_id_normalized when it matched only after lowercasing, redirect when the input pointed to a browser-compat-data entry that has moved or split, or search when resolve was true and the search index accepted a single unambiguous top hit — treat a search match as a best guess, not a confirmed key.",
      -        "enum": [
      -          "bcd_key",
      -          "web_features_id",
      -          "web_features_id_normalized",
      -          "redirect",
      -          "search"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "input",
      -      "bcd_key",
      -      "baseline_id",
      -      "resolved_via"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "baseline_id": {
      +        "description": "The web-features id this resolved to, or null when no web-features entry covers the key.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "bcd_key": {
      +        "description": "The single browser-compat-data key this resolved to, or null when the web-features id spans more than one key.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "input": {
      +        "description": "The feature string as the caller sent it, trimmed.",
      +        "type": "string"
      +      },
      +      "resolved_via": {
      +        "description": "Which step of the resolution order matched: bcd_key or web_features_id for an exact match, web_features_id_normalized when it matched only after lowercasing, redirect when the input pointed to a browser-compat-data entry that has moved or split, or search when resolve was true and the best exact matches in the search index all named one feature or key — treat a search match as a best guess, not a confirmed key.",
      +        "enum": [
      +          "bcd_key",
      +          "web_features_id",
      +          "web_features_id_normalized",
      +          "redirect",
      +          "search"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "input",
      +      "bcd_key",
      +      "baseline_id",
      +      "resolved_via"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  5. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Far exceeds the readOnly/idempotent annotations: it discloses the 20-evaluated / 100-accepted split with omitted_features overflow, the invariant that verdicts and totals are identical on every page, and the crucial semantic that a target counts as evaluated only where compat data was read, so 'defaults' never clears. It also explains that multi-key web-features ids are judged at feature level rather than per key, which an agent could not infer from any structured field.

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

Conciseness3/5

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

The purpose is front-loaded, but the prose is three dense paragraphs of long, multi-clause sentences, and the 20/100 feature cap plus omitted_features overflow is stated in the body and again inside the features parameter description. The information is worth having; the packaging is heavier than necessary.

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?

For a tool with five parameters, an output schema, and strong annotations, the description covers evaluation semantics, overflow handling, paging invariants, and feature-id edge cases. The only gap is that it never clarifies when to use this versus browsercompat_check_baseline, which matters given the sibling set.

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

Parameters4/5

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 cross-parameter meaning: target_limit/target_offset bound only the target rows, never the evaluation, so verdicts and coverage are page-invariant. It also explains where omitted_features entries should be re-submitted. Some cap details are restated from the schema, which keeps it from a 5.

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: 'Compute whether a set of web features clears an explicit browserslist target query.' It immediately distinguishes itself from browsercompat_search_features (referenced for key lookup) and implies a whole-query verdict model distinct from a single-feature baseline check, so an agent can tell what it is without opening the schema.

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 unknown entries to browsercompat_search_features first, explains that resolve is off by default so typos fail visibly, and describes the paging protocol (pass nextOffset). It doesn't say when to prefer browsercompat_check_baseline instead, so the sibling-relationship guidance is incomplete rather than absent.

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.