Skip to main content
Glama

browser-compat-mcp-server

Browsercompat Check Baseline

browsercompat_check_baseline
Read-onlyIdempotent

Check whether web features are safe to ship: Baseline state and the date it crossed, the browser and version that limits support, whether the feature is deprecated or discouraged, and the percentage points of global traffic that requiring it would exclude. Evaluates up to 20 BCD keys or web-features ids per call; up to 100 may be sent, and entries past the 20th come back unevaluated in omitted_features for the next call.

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, several keys of one web-features feature resolve to the feature with its feature-level Baseline and compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct.
featuresYesEntries to check, 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 evaluated 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.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
resultsNoOne result per evaluated entry — the first 20. A miss is a result, not a failure.
totalCountNoNumber of results returned.
attributionNoRequired attribution for the caniuse-derived usage figures in this response.
data_versionNoVintage of each bundled dataset behind this answer.
omitted_featuresNoEntries past the first 20, verbatim and in input order, that were not evaluated. Present only when the call sent more than 20; pass them as features in the next call.
unresolvedNoticeNoNames the entries that did not resolve and how to find the right key.
all_widely_availableNoTrue only when every entry resolved and reports Baseline widely. A single miss, or any entry in omitted_features, forces false. Deprecation and discouragement do not enter this answer.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / usage_percent_excluded / description
      Previous value: -"Feature-level share of tracked traffic excluded. A resolved BCD key receives it only when it is the feature’s sole declared compat key. Absent without caniuse data — never zero in that case."New value: +"Feature-level percentage points of global traffic excluded. A resolved BCD key receives it only when it is the feature’s sole declared compat key. Absent without caniuse data — never zero in that case."
  2. Changed13 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 check, 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 evaluated 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
    • changedOutput schema / properties / all_widely_available / description
      Previous value: -"True only when every entry resolved and reports Baseline widely. A single miss forces false. Deprecation and discouragement do not enter this answer."New value: +"True only when every entry resolved and reports Baseline widely. A single miss, or any entry in omitted_features, forces false. Deprecation and discouragement do not enter this answer."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `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_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 evaluated. 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: -"One result per requested feature. A miss is a result, not a failure."New value: +"One result per evaluated entry — the first 20. A miss is a result, not a failure."
    • 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 when the web-features id spans more than one browser-compat-data key. Call browsercompat_get_feature with one of them for per-browser data."New value: +"Present when the web-features id spans more than one browser-compat-data key, or as an empty list when it owns none: its first 10 keys in declaration order, with compat_keys_total counting all of them. Call browsercompat_get_feature with the id for the rest and its feature-level support per core browser, or with one of these keys for per-browser data."
    • 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"
      +}
    • changedOutput schema / properties / results / items / properties / limiting_browser / description
      Previous value: -"Among the Baseline core browsers, the one requiring the newest release. Present only when every core browser has full, unprefixed, unflagged support at a resolvable added release."New value: +"Among the Baseline core browsers, the one whose required release is newest by release date. For a single key, present only when every core browser has full, unprefixed, unflagged support at a resolvable added release; for an id spanning more than one key, read from web-features’ feature-level support for the feature as a whole and present only when it lists all seven core browsers."
    • changedOutput schema / properties / results / items / properties / limiting_browser / properties / version / description
      Previous value: -"Release of that browser the feature requires."New value: +"Release of that browser the feature requires, without any ≤ prefix — see version_is_upper_bound."
    • addedOutput schema / properties / results / items / properties / limiting_browser / properties / version_is_upper_bound
      Added value: +{
      +  "description": "True when the data says support arrived at or before version, not exactly at it. Absent when version is exact.",
      +  "type": "boolean"
      +}
    • 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"
      +  }
      +]
  3. Changed3 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, several keys of one web-features feature resolve to the feature with its feature-level Baseline and compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct."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, several keys of one web-features feature resolve to the feature with its feature-level Baseline and compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct."
    • changedOutput schema / properties / results / items / properties / limiting_browser / description
      Previous value: -"Among the Baseline core browsers, the one requiring the newest release."New value: +"Among the Baseline core browsers, the one requiring the newest release. Present only when every core browser has full, unprefixed, unflagged support at a resolvable added release."
    • changedOutput schema / properties / results / items / properties / usage_percent_excluded / description
      Previous value: -"Share of tracked global traffic that requiring this feature would exclude. Absent when the feature reaches no caniuse id — never zero in that case."New value: +"Feature-level share of tracked traffic excluded. A resolved BCD key receives it only when it is the feature’s sole declared compat key. Absent without caniuse data — never zero in that case."
  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."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, several keys of one web-features feature resolve to the feature with its feature-level Baseline and compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct."
    • 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.1/5.0
Behavior5/5

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

Annotations already declare a safe, read-only, idempotent, closed-world operation, so the bar is lower; the description adds important behavior by explaining the 20-entry evaluation limit and that excess entries return unevaluated in omitted_features. It also discloses the kinds of results returned, including Baseline status, limiting browser, deprecation flag, and excluded traffic percentage.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and then efficiently covers batching behavior and result content. It is dense but has no filler or redundant phrasing.

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?

The tool has annotations, a complete input schema, and an output schema; the description provides enough purpose, batching behavior, and outcome context for an agent to invoke it correctly. No essential behavioral or contextual details are missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the features and resolve parameters thoroughly. The description restates the batch limits and accepted key/id forms, but adds little beyond what the schema provides, especially for the resolve parameter.

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

Purpose4/5

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

The description gives a specific verb and resource: checking web features for shipping safety via Baseline state, limiting browser/version, deprecation status, and excluded traffic. It is clear what the tool returns, but it does not explicitly distinguish itself from siblings such as browsercompat_compare_support or browsercompat_get_feature.

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

Usage Guidelines3/5

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

The phrase "safe to ship" implies the usage context, and the batching limit is explained. However, the description does not explicitly say when to use this tool versus search_features, get_feature, or compare_support, nor does it state when not to use it.

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.