browser-compat-mcp-server

Browser compatibility and Baseline status for any web feature — offline, from bundled MDN data.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
80%
Poisoning risk
100%
Permission match
50%
Protocol compliance
100%

Findings (5)

  • LOWTool 'browsercompat_list_reference' suggests web access but openWorldHint=falsein browsercompat_list_reference
  • LOWTool 'browsercompat_get_feature' suggests web access but openWorldHint=falsein browsercompat_get_feature
  • LOWTool 'browsercompat_check_baseline' suggests web access but openWorldHint=falsein browsercompat_check_baseline
  • LOWTool 'browsercompat_search_features' suggests web access but openWorldHint=falsein browsercompat_search_features
  • LOWTool 'browsercompat_compare_support' suggests web access but openWorldHint=falsein browsercompat_compare_support

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~13,591Tokens (tool definitions)
~35.4 KBTypical response size
Significant attention impact (10.62% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "browser-compat-mcp-server": {
      "command": "npx",
      "args": [
        "@cyanheads/browser-compat-mcp-server"
      ]
    }
  }
}

Runnable packages

npm@cyanheads/browser-compat-mcp-server0.3.0streamable-http

Remote endpoints

https://browser-compat.caseyjhand.com/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢browsercompat_list_reference(topic)

Enumerate the reference vocabulary this server uses: BCD namespaces, BCD browser ids, browserslist agent ids and their BCD counterparts, Baseline states, web-features groups, and ECMAScript snapshots. Use it to build valid inputs for the other tools and to see which target browsers can be evaluated.

Input Schema

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "enum": [
        "bcd_namespaces",
        "bcd_browsers",
        "browserslist_agents",
        "baseline_states",
        "groups",
        "snapshots"
      ],
      "description": "Which vocabulary to list: bcd_namespaces for the 12 top-level browser-compat-data namespaces, bcd_browsers for the 17 tracked browsers, browserslist_agents for the 19 browserslist ids mapped to browser-compat-data browsers, baseline_states for the 4 Baseline states, groups for the 104 web-features groups, or snapshots for the 11 ECMAScript snapshots."
    }
  },
  "required": [
    "topic"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "description": "The topic that was listed."
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identifier callers pass to the other tools, or filter results by."
          },
          "label": {
            "type": "string",
            "description": "Human-readable name for this entry."
          },
          "detail": {
            "type": "string",
            "description": "One line explaining what the entry covers."
          },
          "count": {
            "description": "How many items the entry covers — compat keys for a namespace or Baseline state.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "bcd_browser": {
            "description": "browser-compat-data browser this browserslist agent maps to, or null when none exists.",
            "type": [
              "string",
              "null"
            ]
          },
          "reported": {
            "description": "True when this browser is in the reported set (desktop or mobile). Runtimes are added only by include_runtimes.",
            "type": "boolean"
          },
          "usage_percent": {
            "description": "Percentage points of global traffic attributed to this browserslist agent.",
            "type": "number"
          },
          "maps_from": {
            "description": "Raw web-features status.baseline value this reported state maps from; null for not_mapped, which has none.",
            "anyOf": [
              {
                "type": "string",
                "const": "high"
              },
              {
                "type": "string",
                "const": "low"
              },
              {
                "type": "boolean",
                "const": false
              },
              {
                "type": "null",
                "const": null
              }
            ]
          },
          "spec_url": {
            "description": "Specification URL for this ECMAScript snapshot.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "label",
          "detail"
        ],
        "additionalProperties": false,
        "description": "One vocabulary entry."
      },
      "description": "Every entry in the requested vocabulary."
    },
    "data_version": {
      "type": "object",
      "properties": {
        "bcd": {
          "type": "string",
          "description": "Version of the bundled @mdn/browser-compat-data snapshot."
        },
        "bcd_generated": {
          "type": "string",
          "description": "ISO 8601 timestamp the browser-compat-data snapshot was generated at."
        },
        "web_features": {
          "type": "string",
          "description": "Version of the bundled web-features snapshot."
        },
        "caniuse_lite": {
          "type": "string",
          "description": "Version of the bundled caniuse-lite snapshot."
        },
        "browserslist": {
          "type": "string",
          "description": "Version of the bundled browserslist query resolver."
        }
      },
      "required": [
        "bcd",
        "bcd_generated",
        "web_features",
        "caniuse_lite",
        "browserslist"
      ],
      "additionalProperties": false,
      "description": "Vintage of each bundled dataset behind this answer."
    },
    "attribution": {
      "description": "Required attribution for the caniuse-derived usage figures in this response.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode."
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "topic",
        "entries",
        "data_version"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢browsercompat_get_feature(feature, resolve, include_runtimes, subkeys_offset, compat_keys_offset)

Get the compatibility record for one web feature: Baseline state and the date it crossed, deprecation and standards status, per-browser version added and removed with flags, vendor prefixes and partial-implementation notes — with every other support statement recorded for that browser, such as an earlier prefixed or flagged release, in other_statements — and the MDN and specification links. Accepts a BCD key such as css.selectors.has or a web-features id such as has; the response echoes which one it matched. A web-features id that spans several BCD keys, such as grid, returns web-features’ own feature-level release per Baseline core browser in feature_support and its compat_keys, 100 per page, in place of per-key fields. An unresolved feature returns found: false with guidance rather than an error.

Input Schema

{
  "type": "object",
  "properties": {
    "feature": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "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 string is rejected against this schema; a whitespace-only string returns invalid_feature_input. Call browsercompat_search_features first if you do not already know the key."
    },
    "resolve": {
      "default": false,
      "description": "When true, a string 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_support and 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.",
      "type": "boolean"
    },
    "include_runtimes": {
      "default": false,
      "description": "Add the bun, deno, nodejs, and oculus rows to support. Leave off for browser ship decisions.",
      "type": "boolean"
    },
    "subkeys_offset": {
      "default": 0,
      "description": "Direct child keys to skip, default 0. Each subkeys page contains at most 100 keys; pass its next_offset to continue.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "compat_keys_offset": {
      "default": 0,
      "description": "compat_keys to skip, default 0, for a web-features id that spans several keys. Each page of compat_keys holds at most 100; pass compat_keys_next_offset to continue. Has no effect when the feature resolves to a single key.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "feature"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "found": {
      "type": "boolean",
      "description": "True when the feature string resolved to a tracked entry."
    },
    "outcome": {
      "type": "string",
      "enum": [
        "found",
        "no_compat_data",
        "miss"
      ],
      "description": "found when per-feature data was returned, no_compat_data when the entry is tracked but owns no browser-compat-data keys, miss when nothing matched."
    },
    "resolved_as": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "input": {
              "type": "string",
              "description": "The feature string as the caller sent it, trimmed."
            },
            "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"
              ]
            },
            "baseline_id": {
              "description": "The web-features id this resolved to, or null when no web-features entry covers the key.",
              "type": [
                "string",
                "null"
              ]
            },
            "resolved_via": {
              "type": "string",
              "enum": [
                "bcd_key",
                "web_features_id",
                "web_features_id_normalized",
                "redirect",
                "search"
              ],
              "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."
            }
          },
          "required": [
            "input",
            "bcd_key",
            "baseline_id",
            "resolved_via"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "How the feature string was matched, or null on a miss."
    },
    "name": {
      "description": "web-features display name for the feature.",
      "type": "string"
    },
    "description": {
      "description": "web-features description, or the browser-compat-data description with tags stripped.",
      "type": "string"
    },
    "baseline": {
      "description": "Baseline state for the resolved key, or the feature rollup when a web-features id resolved to more than one key.",
      "type": "object",
      "properties": {
        "state": {
          "type": "string",
          "enum": [
            "widely",
            "newly",
            "limited",
            "not_mapped"
          ],
          "description": "widely and newly are Baseline availability, limited means not yet in every core browser, not_mapped means the key sits outside the web-features mapping."
        },
        "since_date": {
          "description": "Date the feature became newly available, verbatim from web-features — may carry a ≤ prefix.",
          "type": "string"
        },
        "high_date": {
          "description": "Date the feature became widely available, verbatim from web-features — may carry a ≤ prefix.",
          "type": "string"
        },
        "date_is_upper_bound": {
          "description": "True when a date above is ≤-prefixed, so it is an upper bound rather than exact.",
          "type": "boolean"
        }
      },
      "required": [
        "state"
      ],
      "additionalProperties": false
    },
    "status": {
      "description": "Standards status for the resolved key. Absent for webextensions keys, which record none, and when the id spans more than one key.",
      "type": "object",
      "properties": {
        "deprecated": {
          "type": "boolean",
          "description": "True when browser-compat-data marks the feature deprecated."
        },
        "experimental": {
          "type": "boolean",
          "description": "True when browser-compat-data marks the feature experimental."
        },
        "standard_track": {
          "type": "boolean",
          "description": "True when the feature is part of an active specification process."
        },
        "discouraged": {
          "description": "Present when web-features records that the feature is discouraged.",
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Why the feature is discouraged, as web-features states it."
            },
            "according_to": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "URLs of the bodies that discourage the feature."
            }
          },
          "required": [
            "reason",
            "according_to"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "deprecated",
        "experimental",
        "standard_track"
      ],
      "additionalProperties": false
    },
    "discouraged": {
      "description": "Feature-level discouragement, independent of leaf standards status. Also retained in status.discouraged when status exists.",
      "type": "object",
      "properties": {
        "reason": {
          "type": "string",
          "description": "Why the feature is discouraged, as web-features states it."
        },
        "according_to": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "URLs of the bodies that discourage the feature."
        }
      },
      "required": [
        "reason",
        "according_to"
      ],
      "additionalProperties": false
    },
    "limiting_browser": {
      "description": "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 feature_support and present only when it lists all seven core browsers.",
      "type": "object",
      "properties": {
        "browser_id": {
          "type": "string",
          "description": "browser-compat-data browser id."
        },
        "name": {
          "type": "string",
          "description": "Human-readable browser name."
        },
        "version": {
          "type": "string",
          "description": "Release of that browser the feature requires, without any ≤ prefix — see version_is_upper_bound."
        },
        "version_is_upper_bound": {
          "description": "True when the data says support arrived at or before version, not exactly at it. Absent when version is exact.",
          "type": "boolean"
        }
      },
      "required": [
        "browser_id",
        "name",
        "version"
      ],
      "additionalProperties": false
    },
    "support": {
      "description": "One row per reported browser, judged at its newest shipped release, with the other statements recorded for that browser in other_statements. Absent when the id spans more than one browser-compat-data key; feature_support covers that case.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "browser_id": {
            "type": "string",
            "description": "browser-compat-data browser id."
          },
          "browser_name": {
            "type": "string",
            "description": "Human-readable browser name."
          },
          "verdict": {
            "type": "string",
            "enum": [
              "supported",
              "partial",
              "prefixed",
              "flagged",
              "removed",
              "unsupported",
              "preview_only",
              "unknown"
            ],
            "description": "supported means full support with no flags, prefix, or partial implementation; partial means the implementation does not meet the mandatory specified behavior; prefixed means it ships under a vendor prefix or an entirely different name; flagged means it only works behind a preference or runtime flag; removed means it shipped and was later removed; unsupported means it was never added; preview_only means it only works in a preview channel; unknown means the browser is absent from the data or support predates a ≤ bound — unknown never means unsupported."
          },
          "version_added": {
            "description": "Release that added support.",
            "type": "string"
          },
          "version_added_is_upper_bound": {
            "description": "True when the data says support arrived at or before version_added, not exactly at it.",
            "type": "boolean"
          },
          "version_removed": {
            "description": "Release that removed support.",
            "type": "string"
          },
          "version_last": {
            "description": "Last release that still supported the feature.",
            "type": "string"
          },
          "partial": {
            "description": "True when the implementation does not meet the mandatory specified behavior.",
            "type": "boolean"
          },
          "prefix": {
            "description": "Vendor prefix the feature ships under.",
            "type": "string"
          },
          "alternative_name": {
            "description": "Entirely different name the feature is implemented under.",
            "type": "string"
          },
          "flags": {
            "description": "Flags gating support in this browser.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Name of the flag or preference to configure."
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "preference",
                    "runtime_flag"
                  ],
                  "description": "Whether the gate is a user preference or a runtime flag."
                },
                "value_to_set": {
                  "description": "Value the flag must be set to.",
                  "type": "string"
                }
              },
              "required": [
                "name",
                "type"
              ],
              "additionalProperties": false,
              "description": "A flag that must be configured for support."
            }
          },
          "notes": {
            "description": "Notes from browser-compat-data about this support, always an array.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "impl_url": {
            "description": "Links to bugs or issues tracking the implementation, always an array.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "other_statements": {
            "description": "Every other support statement browser-compat-data records for this browser, in its declaration order: prefixed, alternative-name, flagged, partial, preview, and removed ranges. A statement the row fields above came from is never repeated here. Absent when there are none.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "version_added": {
                  "description": "Release that added support under this statement, or preview when it only works in a preview channel.",
                  "type": "string"
                },
                "version_added_is_upper_bound": {
                  "description": "True when the data says support arrived at or before version_added, not exactly at it.",
                  "type": "boolean"
                },
                "version_removed": {
                  "description": "Release that removed support.",
                  "type": "string"
                },
                "version_last": {
                  "description": "Last release that still supported the feature.",
                  "type": "string"
                },
                "partial": {
                  "description": "True when the implementation does not meet the mandatory specified behavior.",
                  "type": "boolean"
                },
                "prefix": {
                  "description": "Vendor prefix the feature ships under.",
                  "type": "string"
                },
                "alternative_name": {
                  "description": "Entirely different name the feature is implemented under.",
                  "type": "string"
                },
                "flags": {
                  "description": "Flags gating support in this browser.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "description": "Name of the flag or preference to configure."
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "preference",
                          "runtime_flag"
                        ],
                        "description": "Whether the gate is a user preference or a runtime flag."
                      },
                      "value_to_set": {
                        "description": "Value the flag must be set to.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "type"
                    ],
                    "additionalProperties": false,
                    "description": "A flag that must be configured for support."
                  }
                },
                "notes": {
                  "description": "Notes from browser-compat-data about this support, always an array.",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "impl_url": {
                  "description": "Links to bugs or issues tracking the implementation, always an array.",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": false,
              "description": "One other support statement for this browser."
            }
          }
        },
        "required": [
          "browser_id",
          "browser_name",
          "verdict"
        ],
        "additionalProperties": false,
        "description": "Support for one reported browser."
      }
    },
    "feature_support": {
      "description": "Present only when the web-features id spans more than one browser-compat-data key: one row per Baseline core browser with the release web-features lists for the feature as a whole, the data its feature-level Baseline is computed from. It is web-features’ answer for the feature, not a combination of its keys, and a key can differ from it either way — a lists Chrome 1 while one of its keys is unsupported, and anchor-positioning lists no Chrome release though most of its keys are supported there. Call this tool with one of compat_keys for a key-level answer. Non-core browsers are not covered.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "browser_id": {
            "type": "string",
            "description": "browser-compat-data browser id of a Baseline core browser."
          },
          "supported": {
            "type": "boolean",
            "description": "True when web-features lists a release for this browser for the feature as a whole; false when it lists none."
          },
          "version": {
            "description": "Release web-features lists for the feature, without any ≤ prefix. Absent when supported is false.",
            "type": "string"
          },
          "version_is_upper_bound": {
            "description": "True when web-features lists the release as ≤, so support arrived at or before version, not exactly at it.",
            "type": "boolean"
          }
        },
        "required": [
          "browser_id",
          "supported"
        ],
        "additionalProperties": false,
        "description": "web-features’ support for one core browser."
      }
    },
    "mdn_url": {
      "description": "MDN reference page for the resolved key.",
      "type": "string"
    },
    "spec_urls": {
      "description": "Specification URLs for the resolved key, always an array.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "compat_keys": {
      "description": "Present when the web-features id spans more than one browser-compat-data key, or as an empty list when it owns none: at most 100 of its keys in declaration order, starting at compat_keys_offset. Call this tool again with one of them for the per-key support, status, and links.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "compat_keys_total": {
      "description": "Every browser-compat-data key the id owns, before paging. Present with compat_keys.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "compat_keys_next_offset": {
      "description": "compat_keys_offset for the next page of compat_keys; absent at or past the end.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "subkeys": {
      "description": "Direct child compat records of the resolved BCD key. Absent for childless keys and resolutions without a single key.",
      "type": "object",
      "properties": {
        "total": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Total direct callable child keys, before paging."
        },
        "keys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "At most 100 direct child keys, in BCD traversal order. Call browsercompat_get_feature for one, or browsercompat_check_baseline for up to 20."
        },
        "truncated": {
          "type": "boolean",
          "description": "True when more direct children remain after this page."
        },
        "next_offset": {
          "description": "Offset for the next page; absent at or past the end.",
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "total",
        "keys",
        "truncated"
      ],
      "additionalProperties": false
    },
    "guidance": {
      "description": "What to do next on a miss or with no compat data.",
      "type": "string"
    },
    "data_version": {
      "type": "object",
      "properties": {
        "bcd": {
          "type": "string",
          "description": "Version of the bundled @mdn/browser-compat-data snapshot."
        },
        "bcd_generated": {
          "type": "string",
          "description": "ISO 8601 timestamp the browser-compat-data snapshot was generated at."
        },
        "web_features": {
          "type": "string",
          "description": "Version of the bundled web-features snapshot."
        },
        "caniuse_lite": {
          "type": "string",
          "description": "Version of the bundled caniuse-lite snapshot."
        },
        "browserslist": {
          "type": "string",
          "description": "Version of the bundled browserslist query resolver."
        }
      },
      "required": [
        "bcd",
        "bcd_generated",
        "web_features",
        "caniuse_lite",
        "browserslist"
      ],
      "additionalProperties": false,
      "description": "Vintage of each bundled dataset behind this answer."
    },
    "baselineNotMapped": {
      "description": "Explains why a resolved key carries no Baseline state.",
      "type": "string"
    },
    "runtimesExcluded": {
      "description": "Notes that the feature carries server-runtime or XR data that was left out.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_feature_input`: feature is whitespace-only. An empty or over-200-character string is rejected against the input schema instead. Other values are possible when a failure originates below the handler.",
              "examples": [
                "invalid_feature_input"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "found",
        "outcome",
        "resolved_as",
        "data_version"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢browsercompat_check_baseline(features, resolve)

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

{
  "type": "object",
  "properties": {
    "features": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "description": "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."
    },
    "resolve": {
      "default": false,
      "description": "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.",
      "type": "boolean"
    }
  },
  "required": [
    "features"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "input": {
            "type": "string",
            "description": "The feature string as the caller sent it."
          },
          "found": {
            "type": "boolean",
            "description": "True when the feature string resolved to a tracked entry."
          },
          "outcome": {
            "type": "string",
            "enum": [
              "found",
              "no_compat_data",
              "miss"
            ],
            "description": "found when Baseline data was returned, no_compat_data when the entry owns no browser-compat-data keys, miss when nothing matched."
          },
          "resolved_as": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "The feature string as the caller sent it, trimmed."
                  },
                  "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"
                    ]
                  },
                  "baseline_id": {
                    "description": "The web-features id this resolved to, or null when no web-features entry covers the key.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "resolved_via": {
                    "type": "string",
                    "enum": [
                      "bcd_key",
                      "web_features_id",
                      "web_features_id_normalized",
                      "redirect",
                      "search"
                    ],
                    "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."
                  }
                },
                "required": [
                  "input",
                  "bcd_key",
                  "baseline_id",
                  "resolved_via"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "description": "How the feature string was matched, or null on a miss."
          },
          "name": {
            "description": "web-features display name for the feature.",
            "type": "string"
          },
          "baseline": {
            "description": "Baseline state and the dates it crossed.",
            "type": "object",
            "properties": {
              "state": {
                "type": "string",
                "enum": [
                  "widely",
                  "newly",
                  "limited",
                  "not_mapped"
                ],
                "description": "widely and newly are Baseline availability, limited means not yet in every core browser, not_mapped means the key sits outside the web-features mapping."
              },
              "since_date": {
                "description": "Date the feature became newly available, verbatim from web-features — may carry a ≤ prefix.",
                "type": "string"
              },
              "high_date": {
                "description": "Date the feature became widely available, verbatim from web-features — may carry a ≤ prefix.",
                "type": "string"
              },
              "date_is_upper_bound": {
                "description": "True when a date above is ≤-prefixed, so it is an upper bound rather than exact.",
                "type": "boolean"
              }
            },
            "required": [
              "state"
            ],
            "additionalProperties": false
          },
          "limiting_browser": {
            "description": "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.",
            "type": "object",
            "properties": {
              "browser_id": {
                "type": "string",
                "description": "browser-compat-data browser id."
              },
              "name": {
                "type": "string",
                "description": "Human-readable browser name."
              },
              "version": {
                "type": "string",
                "description": "Release of that browser the feature requires, without any ≤ prefix — see version_is_upper_bound."
              },
              "version_is_upper_bound": {
                "description": "True when the data says support arrived at or before version, not exactly at it. Absent when version is exact.",
                "type": "boolean"
              }
            },
            "required": [
              "browser_id",
              "name",
              "version"
            ],
            "additionalProperties": false
          },
          "deprecated": {
            "description": "True when browser-compat-data marks the key deprecated. Absent for keys that record no status and for ids spanning more than one key.",
            "type": "boolean"
          },
          "experimental": {
            "description": "True when browser-compat-data marks the key experimental. Absent under the same conditions as deprecated.",
            "type": "boolean"
          },
          "discouraged": {
            "description": "Present when web-features records that the feature is discouraged.",
            "type": "object",
            "properties": {
              "reason": {
                "type": "string",
                "description": "Why the feature is discouraged, as web-features states it."
              },
              "according_to": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "URLs of the bodies that discourage the feature."
              }
            },
            "required": [
              "reason",
              "according_to"
            ],
            "additionalProperties": false
          },
          "usage_percent_excluded": {
            "description": "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.",
            "type": "number"
          },
          "usage_source": {
            "description": "What usage_percent_excluded is a share of. Present whenever that figure is.",
            "type": "string"
          },
          "compat_keys": {
            "description": "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.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "compat_keys_total": {
            "description": "Every browser-compat-data key the id owns. Present with compat_keys.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "guidance": {
            "description": "What to do next when the feature did not resolve.",
            "type": "string"
          }
        },
        "required": [
          "input",
          "found",
          "outcome",
          "resolved_as"
        ],
        "additionalProperties": false,
        "description": "One result per evaluated entry, in input order."
      },
      "description": "One result per evaluated entry — the first 20. A miss is a result, not a failure."
    },
    "omitted_features": {
      "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.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "all_widely_available": {
      "type": "boolean",
      "description": "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."
    },
    "data_version": {
      "type": "object",
      "properties": {
        "bcd": {
          "type": "string",
          "description": "Version of the bundled @mdn/browser-compat-data snapshot."
        },
        "bcd_generated": {
          "type": "string",
          "description": "ISO 8601 timestamp the browser-compat-data snapshot was generated at."
        },
        "web_features": {
          "type": "string",
          "description": "Version of the bundled web-features snapshot."
        },
        "caniuse_lite": {
          "type": "string",
          "description": "Version of the bundled caniuse-lite snapshot."
        },
        "browserslist": {
          "type": "string",
          "description": "Version of the bundled browserslist query resolver."
        }
      },
      "required": [
        "bcd",
        "bcd_generated",
        "web_features",
        "caniuse_lite",
        "browserslist"
      ],
      "additionalProperties": false,
      "description": "Vintage of each bundled dataset behind this answer."
    },
    "totalCount": {
      "type": "number",
      "description": "Number of results returned."
    },
    "attribution": {
      "description": "Required attribution for the caniuse-derived usage figures in this response.",
      "type": "string"
    },
    "unresolvedNotice": {
      "description": "Names the entries that did not resolve and how to find the right key.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "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.",
              "examples": [
                "invalid_feature_input"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "results",
        "all_widely_available",
        "data_version",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢browsercompat_search_features(query, namespace, baseline, group, snapshot, ...)

Find web features by plain name or keyword when the canonical key is unknown, across CSS, JavaScript, HTML, Web APIs, SVG, MathML, WebAssembly, and HTTP headers. Returns ranked matches with the BCD key, the web-features id, the Baseline state, a one-line support summary, and which field matched. Feed a result key into browsercompat_get_feature for the full record.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Plain-language name, keyword, or code notation, for example \"container query\", \"fromAsync\", \"Array.prototype.at\", \"display: grid\", or \"<dialog>\"."
    },
    "namespace": {
      "description": "Restrict results to one top-level browser-compat-data namespace.",
      "type": "string",
      "enum": [
        "api",
        "css",
        "html",
        "http",
        "javascript",
        "manifests",
        "mathml",
        "mediatypes",
        "svg",
        "webassembly",
        "webdriver",
        "webextensions"
      ]
    },
    "baseline": {
      "description": "Restrict results to one Baseline state.",
      "type": "string",
      "enum": [
        "widely",
        "newly",
        "limited",
        "not_mapped"
      ]
    },
    "group": {
      "description": "Restrict results to features in one web-features group or any group nested under it, for example \"selectors\" or \"css\". Keys with no web-features mapping never match. Call browsercompat_list_reference with topic groups for valid ids.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "snapshot": {
      "description": "Restrict results to features in one ECMAScript snapshot, for example \"ecmascript-2023\". Call browsercompat_list_reference with topic snapshots for valid ids.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "limit": {
      "default": 10,
      "description": "Maximum results to return, at most 50 per call; a value from 51 to 1000 is served as 50. When matches remain, cap reports the size applied and nextOffset continues.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "default": 0,
      "description": "Number of ranked matches to skip before returning results, for paging past limit. Pass the nextOffset from the previous response.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "bcd_key": {
            "description": "browser-compat-data key. Absent for entries that own no compat keys.",
            "type": "string"
          },
          "baseline_id": {
            "description": "web-features id covering this entry.",
            "type": "string"
          },
          "name": {
            "description": "web-features display name.",
            "type": "string"
          },
          "description": {
            "description": "One-line description of the feature.",
            "type": "string"
          },
          "baseline_state": {
            "type": "string",
            "enum": [
              "widely",
              "newly",
              "limited",
              "not_mapped"
            ],
            "description": "Baseline state for this entry, reported per browser-compat-data key."
          },
          "matched_on": {
            "type": "string",
            "enum": [
              "bcd_key",
              "baseline_id",
              "name",
              "caniuse_title",
              "path_suffix",
              "path_segment",
              "description",
              "path_tokens"
            ],
            "description": "Which field matched the query, so the ranking can be inspected. path_suffix means the key ends in the dotted or property-value notation the query used, such as Element.animate or display: grid."
          },
          "support_summary": {
            "type": "string",
            "description": "One line over the Baseline core browsers: addition release with ≤ for an upper bound and (partial), (prefixed), or (flagged) for qualified support; — for unsupported, removed, or preview-only; ? for unknown."
          },
          "mdn_url": {
            "description": "MDN reference page for this key.",
            "type": "string"
          }
        },
        "required": [
          "baseline_state",
          "matched_on",
          "support_summary"
        ],
        "additionalProperties": false,
        "description": "One ranked match."
      },
      "description": "Ranked matches, best first. An empty array is a successful search with no hits."
    },
    "data_version": {
      "type": "object",
      "properties": {
        "bcd": {
          "type": "string",
          "description": "Version of the bundled @mdn/browser-compat-data snapshot."
        },
        "bcd_generated": {
          "type": "string",
          "description": "ISO 8601 timestamp the browser-compat-data snapshot was generated at."
        },
        "web_features": {
          "type": "string",
          "description": "Version of the bundled web-features snapshot."
        },
        "caniuse_lite": {
          "type": "string",
          "description": "Version of the bundled caniuse-lite snapshot."
        },
        "browserslist": {
          "type": "string",
          "description": "Version of the bundled browserslist query resolver."
        }
      },
      "required": [
        "bcd",
        "bcd_generated",
        "web_features",
        "caniuse_lite",
        "browserslist"
      ],
      "additionalProperties": false,
      "description": "Vintage of each bundled dataset behind this answer."
    },
    "totalCount": {
      "type": "number",
      "description": "Matches across every page, before offset and limit apply."
    },
    "truncated": {
      "description": "True when more matches remain past this page.",
      "type": "boolean"
    },
    "shown": {
      "description": "Number of results on this page.",
      "type": "number"
    },
    "cap": {
      "description": "The page size applied: limit, or 50 when limit was above 50.",
      "type": "number"
    },
    "nextOffset": {
      "description": "The offset of the next page. Present only while matches remain past this page.",
      "type": "number"
    },
    "appliedFilters": {
      "description": "Filters the server applied to this search.",
      "type": "object",
      "properties": {
        "namespace": {
          "description": "Namespace filter the search applied.",
          "type": "string"
        },
        "baseline": {
          "description": "Baseline filter the search applied.",
          "type": "string"
        },
        "group": {
          "description": "web-features group filter the search applied, nested groups included.",
          "type": "string"
        },
        "snapshot": {
          "description": "ECMAScript snapshot filter the search applied.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "noMatchNotice": {
      "description": "How to broaden a search that matched nothing.",
      "type": "string"
    },
    "offsetNotice": {
      "description": "Why a page came back empty although the search matched.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_query`: query is whitespace-only after normalization, or normalizes to zero tokens. `unknown_group`: group names no web-features group in the bundled data. `unknown_snapshot`: snapshot names no ECMAScript snapshot in the bundled data. Other values are possible when a failure originates below the handler.",
              "examples": [
                "invalid_query",
                "unknown_group",
                "unknown_snapshot"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "results",
        "data_version",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢browsercompat_compare_support(features, targets, resolve, target_offset, target_limit)

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

{
  "type": "object",
  "properties": {
    "features": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "description": "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."
    },
    "targets": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "description": "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."
    },
    "resolve": {
      "default": false,
      "description": "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.",
      "type": "boolean"
    },
    "target_offset": {
      "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.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "target_limit": {
      "default": 10,
      "description": "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "required": [
    "features",
    "targets"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "query_echo": {
      "type": "string",
      "description": "The targets query as the server parsed it."
    },
    "comparable_features": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "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."
    },
    "targets_resolved": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "agent": {
            "type": "string",
            "description": "browserslist agent id."
          },
          "version_token": {
            "type": "string",
            "description": "Version token browserslist produced for that agent."
          },
          "bcd_browser": {
            "type": "string",
            "description": "browser-compat-data browser the agent maps to."
          },
          "bcd_version": {
            "description": "browser-compat-data release the token mapped to, or null when it predates them all.",
            "type": [
              "string",
              "null"
            ]
          },
          "bcd_release_index": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Release ordinal used for comparison; -1 when the token predates every release."
          },
          "evaluated": {
            "type": "boolean",
            "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 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."
          }
        },
        "required": [
          "agent",
          "version_token",
          "bcd_browser",
          "bcd_version",
          "bcd_release_index",
          "evaluated"
        ],
        "additionalProperties": false,
        "description": "A target that mapped onto a concrete release."
      },
      "description": "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."
    },
    "targets_resolved_total": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "Query targets that map onto a browser-compat-data release, across every page."
    },
    "evaluated_targets_total": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "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."
    },
    "unchecked_targets": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "agent": {
            "type": "string",
            "description": "browserslist agent id."
          },
          "version_token": {
            "type": "string",
            "description": "Version token browserslist produced for that agent."
          },
          "reason": {
            "type": "string",
            "enum": [
              "no_bcd_browser",
              "unknown_version",
              "no_bcd_data",
              "no_feature_level_data",
              "no_comparable_feature"
            ],
            "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 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."
          },
          "usage_percent": {
            "type": "number",
            "description": "Percentage points of global traffic this target covers."
          }
        },
        "required": [
          "agent",
          "version_token",
          "reason",
          "usage_percent"
        ],
        "additionalProperties": false,
        "description": "A target that was not evaluated."
      },
      "description": "The query targets on this page that were not evaluated for every compared feature, each with the reason."
    },
    "unchecked_targets_total": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "Query targets not evaluated for every compared feature, across every page."
    },
    "target_coverage_percent": {
      "type": "number",
      "description": "Percentage points of global traffic covered by the targets evaluated for every compared feature; 0 when no feature was comparable."
    },
    "unchecked_coverage_percent": {
      "type": "number",
      "description": "Percentage points of global traffic covered by the targets counted in unchecked_targets_total."
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "input": {
            "type": "string",
            "description": "The feature string as the caller sent it."
          },
          "found": {
            "type": "boolean",
            "description": "True when the feature string resolved to a tracked entry."
          },
          "resolved_as": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "The feature string as the caller sent it, trimmed."
                  },
                  "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"
                    ]
                  },
                  "baseline_id": {
                    "description": "The web-features id this resolved to, or null when no web-features entry covers the key.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "resolved_via": {
                    "type": "string",
                    "enum": [
                      "bcd_key",
                      "web_features_id",
                      "web_features_id_normalized",
                      "redirect",
                      "search"
                    ],
                    "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."
                  }
                },
                "required": [
                  "input",
                  "bcd_key",
                  "baseline_id",
                  "resolved_via"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "description": "How the feature string was matched, or null on a miss."
          },
          "name": {
            "description": "web-features display name for the feature.",
            "type": "string"
          },
          "verdict": {
            "type": "string",
            "enum": [
              "clears",
              "fails",
              "inconclusive",
              "miss",
              "ambiguous"
            ],
            "description": "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."
          },
          "support_source": {
            "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.",
            "type": "string",
            "enum": [
              "bcd_key",
              "web_features_feature"
            ]
          },
          "failing_targets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "agent": {
                  "type": "string",
                  "description": "browserslist agent id the target came from."
                },
                "version_token": {
                  "type": "string",
                  "description": "Version token browserslist produced for that agent."
                },
                "bcd_browser": {
                  "type": "string",
                  "description": "browser-compat-data browser the agent maps to."
                },
                "bcd_version": {
                  "description": "browser-compat-data release the token mapped to, or null when it predates them all.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "verdict": {
                  "type": "string",
                  "enum": [
                    "partial",
                    "prefixed",
                    "flagged",
                    "removed",
                    "unsupported",
                    "preview_only",
                    "before_feature_support",
                    "no_feature_support"
                  ],
                  "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."
                },
                "version_added": {
                  "description": "Release that added support.",
                  "type": "string"
                },
                "version_added_is_upper_bound": {
                  "description": "True when the data says support arrived at or before version_added, not exactly at it.",
                  "type": "boolean"
                },
                "version_removed": {
                  "description": "Release that removed support.",
                  "type": "string"
                },
                "version_last": {
                  "description": "Last release that still supported the feature.",
                  "type": "string"
                },
                "partial": {
                  "description": "True when the implementation does not meet the mandatory specified behavior.",
                  "type": "boolean"
                },
                "prefix": {
                  "description": "Vendor prefix the feature ships under.",
                  "type": "string"
                },
                "alternative_name": {
                  "description": "Entirely different name the feature is implemented under.",
                  "type": "string"
                },
                "flags": {
                  "description": "Flags gating support in this browser.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "description": "Name of the flag or preference to configure."
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "preference",
                          "runtime_flag"
                        ],
                        "description": "Whether the gate is a user preference or a runtime flag."
                      },
                      "value_to_set": {
                        "description": "Value the flag must be set to.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "type"
                    ],
                    "additionalProperties": false,
                    "description": "A flag that must be configured for support."
                  }
                }
              },
              "required": [
                "agent",
                "version_token",
                "bcd_browser",
                "bcd_version",
                "verdict"
              ],
              "additionalProperties": false,
              "description": "A target this feature does not clear."
            },
            "description": "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."
          },
          "failing_total": {
            "description": "Failing targets across the whole query. Present when the feature was compared, as are the six fields after it.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "failing_ranges": {
            "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.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "agent": {
                  "type": "string",
                  "description": "browserslist agent id of every target in the run."
                },
                "newest": {
                  "type": "string",
                  "description": "Version token of the run’s first, newest target."
                },
                "oldest": {
                  "type": "string",
                  "description": "Version token of the run’s last, oldest target; equals newest for a run of one."
                },
                "count": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991,
                  "description": "Query targets in the run."
                },
                "verdict": {
                  "type": "string",
                  "enum": [
                    "partial",
                    "prefixed",
                    "flagged",
                    "removed",
                    "unsupported",
                    "preview_only",
                    "before_feature_support",
                    "no_feature_support"
                  ],
                  "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."
                }
              },
              "required": [
                "agent",
                "newest",
                "oldest",
                "count",
                "verdict"
              ],
              "additionalProperties": false,
              "description": "A run of consecutive failing query targets."
            }
          },
          "evaluated_total": {
            "description": "Query targets this feature has compatibility data for, across the whole query.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "evaluated_coverage_percent": {
            "description": "Percentage points of global traffic the targets evaluated for this feature cover.",
            "type": "number"
          },
          "unchecked_total": {
            "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.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "unchecked_coverage_percent": {
            "description": "Percentage points of global traffic the targets not evaluated for this feature cover.",
            "type": "number"
          },
          "unchecked_targets": {
            "description": "The targets not evaluated for this feature among the query targets on this page, each with its reason.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "agent": {
                  "type": "string",
                  "description": "browserslist agent id."
                },
                "version_token": {
                  "type": "string",
                  "description": "Version token browserslist produced for that agent."
                },
                "reason": {
                  "type": "string",
                  "enum": [
                    "no_bcd_browser",
                    "unknown_version",
                    "no_bcd_data",
                    "no_feature_level_data",
                    "no_comparable_feature"
                  ],
                  "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 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."
                },
                "usage_percent": {
                  "type": "number",
                  "description": "Percentage points of global traffic this target covers."
                }
              },
              "required": [
                "agent",
                "version_token",
                "reason",
                "usage_percent"
              ],
              "additionalProperties": false,
              "description": "A target this feature was not evaluated against."
            }
          },
          "compat_keys": {
            "description": "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.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "compat_keys_total": {
            "description": "Every browser-compat-data key the id owns. Present with compat_keys.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "guidance": {
            "description": "What to do next on a miss or an ambiguous verdict.",
            "type": "string"
          }
        },
        "required": [
          "input",
          "found",
          "resolved_as",
          "verdict",
          "failing_targets"
        ],
        "additionalProperties": false,
        "description": "One result per evaluated entry, in input order."
      },
      "description": "Per-feature verdicts and totals over the whole query for the first 20 entries, each with its own target rows for this page."
    },
    "omitted_features": {
      "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.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "all_clear": {
      "type": "boolean",
      "description": "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."
    },
    "data_version": {
      "type": "object",
      "properties": {
        "bcd": {
          "type": "string",
          "description": "Version of the bundled @mdn/browser-compat-data snapshot."
        },
        "bcd_generated": {
          "type": "string",
          "description": "ISO 8601 timestamp the browser-compat-data snapshot was generated at."
        },
        "web_features": {
          "type": "string",
          "description": "Version of the bundled web-features snapshot."
        },
        "caniuse_lite": {
          "type": "string",
          "description": "Version of the bundled caniuse-lite snapshot."
        },
        "browserslist": {
          "type": "string",
          "description": "Version of the bundled browserslist query resolver."
        }
      },
      "required": [
        "bcd",
        "bcd_generated",
        "web_features",
        "caniuse_lite",
        "browserslist"
      ],
      "additionalProperties": false,
      "description": "Vintage of each bundled dataset behind this answer."
    },
    "totalCount": {
      "type": "number",
      "description": "Number of targets the query resolved to, across every page."
    },
    "shown": {
      "type": "number",
      "description": "Number of query targets this page covers."
    },
    "cap": {
      "type": "number",
      "description": "The page size applied: target_limit, or 10 when target_limit was above 10."
    },
    "truncated": {
      "type": "boolean",
      "description": "True when more query targets remain past this page."
    },
    "nextOffset": {
      "description": "The target_offset of the next page. Present only while targets remain past this page.",
      "type": "number"
    },
    "attribution": {
      "type": "string",
      "description": "Required attribution for the caniuse-derived coverage figures in this response."
    },
    "uncheckedNotice": {
      "description": "How many of the query targets were not evaluated for every compared feature, the agents they belong to, and their combined usage share.",
      "type": "string"
    },
    "offsetNotice": {
      "description": "Why this page carries no target rows, and the offsets that do.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "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.",
              "examples": [
                "invalid_target_query",
                "no_targets_resolved",
                "invalid_feature_input"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "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"
      ]
    }
  ]
}

Recommended Prompts

search_research
Search for information about [topic] using browser-compat-mcp-server
Expected tools: browsercompat_search_features
find_specific
Find [specific item] using browser-compat-mcp-server
Expected tools: browsercompat_search_features
retrieve_data
Get details about [item] from browser-compat-mcp-server
Expected tools: browsercompat_get_feature
fetch_info
Fetch [information type] using browser-compat-mcp-server
Expected tools: browsercompat_get_feature
list_items
List all [items] available in browser-compat-mcp-server
Expected tools: browsercompat_list_reference

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools