MCP 服务器

browser-compat-mcp-server

io.github.cyanheads/browser-compat-mcp-server
开发者工具 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Queries bundled MDN compatibility data to check browser support, Baseline status, deprecation, and browserslist targets for web features.

browsercompat_check_baseline
Browsercompat Check Baseline
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 share of tracked global traffic that requiring it would exclude. Accepts up to 20 BCD keys or web-features ids in one call.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['features'], 'properties': {'resolve': {'type': 'boolean', '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.'}, 'features': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'maxItems': 20, 'minItems': 1, 'description': 'Up to 20 entries, each a browser-compat-data key such as css.selectors.has or a web-features id such as has, 1 to 200 characters. An empty or longer entry is rejected against this schema; a whitespace-only entry returns invalid_feature_input. Call browsercompat_search_features first for any entry whose key you do not already know.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['results', 'all_widely_available', 'data_version', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_feature_input'], 'description': 'Machine-readable failure mode. Declared by this tool: `invalid_feature_input`: An entry in features is whitespace-only. An empty or over-200-character entry is rejected against the input schema instead. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['input', 'found', 'outcome', 'resolved_as'], 'properties': {'name': {'type': 'string', 'description': 'web-features display name for the feature.'}, 'found': {'type': 'boolean', 'description': 'True when the feature string resolved to a tracked entry.'}, 'input': {'type': 'string', 'description': 'The feature string as the caller sent it.'}, 'outcome': {'enum': ['found', 'no_compat_data', 'miss'], 'type': 'string', 'description': 'found when Baseline data was returned, no_compat_data when the entry owns no browser-compat-data keys, miss when nothing matched.'}, 'baseline': {'type': 'object', 'required': ['state'], 'properties': {'state': {'enum': ['widely', 'newly', 'limited', 'not_mapped'], 'type': 'string', '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.'}, 'high_date': {'type': 'string', 'description': 'Date the feature became widely available, verbatim from web-features â\x80\x94 may carry a â\x89¤ prefix.'}, 'since_date': {'type': 'string', 'description': 'Date the feature became newly available, verbatim from web-features â\x80\x94 may carry a â\x89¤ prefix.'}, 'date_is_upper_bound': {'type': 'boolean', 'description': 'True when a date above is â\x89¤-prefixed, so it is an upper bound rather than exact.'}}, 'description': 'Baseline state and the dates it crossed.', 'additionalProperties': False}, 'guidance': {'type': 'string', 'description': 'What to do next when the feature did not resolve.'}, 'deprecated': {'type': 'boolean', '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.'}, 'compat_keys': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Present when the web-features id spans more than one browser-compat-data key. Call browsercompat_get_feature with one of them for per-browser data.'}, 'discouraged': {'type': 'object', 'required': ['reason', 'according_to'], '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.'}}, 'description': 'Present when web-features records that the feature is discouraged.', 'additionalProperties': False}, 'resolved_as': {'anyOf': [{'type': 'object', 'required': ['input', 'bcd_key', 'baseline_id', 'resolved_via'], 'properties': {'input': {'type': 'string', 'description': 'The feature string as the caller sent it, trimmed.'}, 'bcd_key': {'type': ['string', 'null'], 'description': 'The single browser-compat-data key this resolved to, or null when the web-features id spans more than one key.'}, 'baseline_id': {'type': ['string', 'null'], 'description': 'The web-features id this resolved to, or null when no web-features entry covers the key.'}, 'resolved_via': {'enum': ['bcd_key', 'web_features_id', 'web_features_id_normalized', 'redirect', 'search'], 'type': 'string', '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 â\x80\x94 treat a search match as a best guess, not a confirmed key.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'How the feature string was matched, or null on a miss.'}, 'experimental': {'type': 'boolean', 'description': 'True when browser-compat-data marks the key experimental. Absent under the same conditions as deprecated.'}, 'usage_source': {'type': 'string', 'description': 'What usage_percent_excluded is a share of. Present whenever that figure is.'}, 'limiting_browser': {'type': 'object', 'required': ['browser_id', 'name', 'version'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable browser name.'}, 'version': {'type': 'string', 'description': 'Release of that browser the feature requires.'}, 'browser_id': {'type': 'string', 'description': 'browser-compat-data browser id.'}}, 'description': 'Among the Baseline core browsers, the one requiring the newest release. Present only when every core browser has full, unprefixed, unflagged support at a resolvable added release.', 'additionalProperties': False}, 'usage_percent_excluded': {'type': 'number', 'description': 'Feature-level share of tracked traffic excluded. A resolved BCD key receives it only when it is the featureâ\x80\x99s sole declared compat key. Absent without caniuse data â\x80\x94 never zero in that case.'}}, 'description': 'One result per input entry, in input order.', 'additionalProperties': False}, 'description': 'One result per requested feature. A miss is a result, not a failure.'}, 'totalCount': {'type': 'number', 'description': 'Number of results returned.'}, 'attribution': {'type': 'string', 'description': 'Required attribution for the caniuse-derived usage figures in this response.'}, 'data_version': {'type': 'object', 'required': ['bcd', 'bcd_generated', 'web_features', 'caniuse_lite', 'browserslist'], 'properties': {'bcd': {'type': 'string', 'description': 'Version of the bundled @mdn/browser-compat-data snapshot.'}, 'browserslist': {'type': 'string', 'description': 'Version of the bundled browserslist query resolver.'}, 'caniuse_lite': {'type': 'string', 'description': 'Version of the bundled caniuse-lite snapshot.'}, 'web_features': {'type': 'string', 'description': 'Version of the bundled web-features snapshot.'}, 'bcd_generated': {'type': 'string', 'description': 'ISO 8601 timestamp the browser-compat-data snapshot was generated at.'}}, 'description': 'Vintage of each bundled dataset behind this answer.', 'additionalProperties': False}, 'unresolvedNotice': {'type': 'string', 'description': 'Names the entries that did not resolve and how to find the right key.'}, 'all_widely_available': {'type': 'boolean', 'description': 'True only when every entry resolved and reports Baseline widely. A single miss forces false. Deprecation and discouragement do not enter this answer.'}}, 'additionalProperties': False}
browsercompat_compare_support
Browsercompat Compare Support
Compute whether a set of web features clears an explicit browserslist target query. Every call evaluates the whole query: each feature gets a verdict, the count of failing targets, and its own evaluated and unevaluated target counts with the share of tracked 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 — 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.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['features', 'targets'], 'properties': {'resolve': {'type': 'boolean', '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 gets a verdict, several keys of one web-features feature resolve to the feature as verdict ambiguous with compat_keys, and matches spanning two features are a miss. Off by default so a typo returns a miss you can correct rather than a confident answer about the wrong feature.'}, 'targets': {'type': 'string', 'maxLength': 500, 'minLength': 1, 'description': 'A browserslist query, for example "defaults" or "> 0.5%, last 2 versions", 1 to 500 characters. Required: with no query browserslist would read config from the process working directory rather than from your project.'}, 'features': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'maxItems': 20, 'minItems': 1, 'description': 'Up to 20 entries, each a browser-compat-data key such as css.selectors.has or a web-features id such as has, 1 to 200 characters. An empty or longer entry is rejected against this schema; a whitespace-only entry returns invalid_feature_input. Call browsercompat_search_features first for any entry whose key you do not already know.'}, 'target_limit': {'type': 'integer', 'default': 10, 'maximum': 10, 'minimum': 1, 'description': 'How many query targets this page covers, 1 to 10. It bounds every list of target rows in the response and never the evaluation: verdicts, coverage, and totals always describe the whole query.'}, 'target_offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 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.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', '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']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The target_limit that was applied.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_target_query', 'no_targets_resolved', 'invalid_feature_input'], 'description': 'Machine-readable failure mode. Declared by this tool: `invalid_target_query`: browserslist rejected the targets query. `no_targets_resolved`: The query matched no browser versions at all, or only agents with no browser-compat-data counterpart. A mapped agent whose version token does not resolve is reported in unchecked_targets instead. `invalid_feature_input`: An entry in features is whitespace-only. An empty or over-200-character entry is rejected against the input schema instead. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of query targets this page covers.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['input', 'found', 'resolved_as', 'verdict', 'failing_targets'], 'properties': {'name': {'type': 'string', 'description': 'web-features display name for the feature.'}, 'found': {'type': 'boolean', 'description': 'True when the feature string resolved to a tracked entry.'}, 'input': {'type': 'string', 'description': 'The feature string as the caller sent it.'}, 'verdict': {'enum': ['clears', 'fails', 'inconclusive', 'miss', 'ambiguous'], 'type': 'string', '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 id spans more than one compat key or owns none.'}, 'guidance': {'type': 'string', 'description': 'What to do next on a miss or an ambiguous verdict.'}, 'compat_keys': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Present on an ambiguous verdict â\x80\x94 the browser-compat-data keys the feature owns. Re-run with one of them.'}, 'resolved_as': {'anyOf': [{'type': 'object', 'required': ['input', 'bcd_key', 'baseline_id', 'resolved_via'], 'properties': {'input': {'type': 'string', 'description': 'The feature string as the caller sent it, trimmed.'}, 'bcd_key': {'type': ['string', 'null'], 'description': 'The single browser-compat-data key this resolved to, or null when the web-features id spans more than one key.'}, 'baseline_id': {'type': ['string', 'null'], 'description': 'The web-features id this resolved to, or null when no web-features entry covers the key.'}, 'resolved_via': {'enum': ['bcd_key', 'web_features_id', 'web_features_id_normalized', 'redirect', 'search'], 'type': 'string', '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 â\x80\x94 treat a search match as a best guess, not a confirmed key.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'How the feature string was matched, or null on a miss.'}, 'failing_total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Failing targets across the whole query. Present when the feature was compared, as are the five fields after it.'}, 'evaluated_total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Query targets this feature has compatibility data for, across the whole query.'}, 'failing_targets': {'type': 'array', 'items': {'type': 'object', 'required': ['agent', 'version_token', 'bcd_browser', 'bcd_version', 'verdict'], 'properties': {'agent': {'type': 'string', 'description': 'browserslist agent id the target came from.'}, 'verdict': {'enum': ['partial', 'prefixed', 'flagged', 'removed', 'unsupported', 'preview_only'], 'type': 'string', 'description': 'Why this target failed: partial means the implementation does not meet the mandatory specified behavior, prefixed means it only ships under a vendor prefix or a different name, flagged means it only works behind a preference or runtime flag, removed means it shipped and was later removed before this target version, unsupported means it was never added, preview_only means it only works in a preview channel.'}, 'bcd_browser': {'type': 'string', 'description': 'browser-compat-data browser the agent maps to.'}, 'bcd_version': {'type': ['string', 'null'], 'description': 'browser-compat-data release the token mapped to, or null when it predates them all.'}, 'version_token': {'type': 'string', 'description': 'Version token browserslist produced for that agent.'}}, 'description': 'A target this feature does not clear.', 'additionalProperties': False}, 'description': 'The failing targets among the query targets on this page, with the verdict that caused each. Empty on a page that holds none even when failing_total is above zero.'}, 'unchecked_total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, '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.'}, 'unchecked_targets': {'type': 'array', 'items': {'type': 'object', 'required': ['agent', 'version_token', 'reason', 'usage_percent'], 'properties': {'agent': {'type': 'string', 'description': 'browserslist agent id.'}, 'reason': {'enum': ['no_bcd_browser', 'unknown_version', 'no_bcd_data', 'no_comparable_feature'], 'type': 'string', 'description': 'no_bcd_browser when the agent has no browser-compat-data counterpart, unknown_version when the token maps to no release, no_bcd_data when a compared feature records nothing for that browser, no_comparable_feature when every entry in features was a miss or ambiguous so nothing was compared.'}, 'usage_percent': {'type': 'number', 'description': 'Share of tracked global traffic this target covers.'}, 'version_token': {'type': 'string', 'description': 'Version token browserslist produced for that agent.'}}, 'description': 'A target this feature was not evaluated against.', 'additionalProperties': False}, 'description': 'The targets not evaluated for this feature among the query targets on this page, each with its reason.'}, 'evaluated_coverage_percent': {'type': 'number', 'description': 'Share of tracked global traffic the targets evaluated for this feature cover.'}, 'unchecked_coverage_percent': {'type': 'number', 'description': 'Share of tracked global traffic the targets not evaluated for this feature cover.'}}, 'description': 'One result per input entry, in input order.', 'additionalProperties': False}, 'description': 'Per-feature verdicts and totals over the whole query, each with its own target rows for this page.'}, 'all_clear': {'type': 'boolean', 'description': 'True only when every feature clears, which requires every target in the query to have been evaluated for it.'}, 'truncated': {'type': 'boolean', 'description': 'True when more query targets remain past this page.'}, 'nextOffset': {'type': 'number', 'description': 'The target_offset of the next page. Present only while targets remain past this page.'}, 'query_echo': {'type': 'string', 'description': 'The targets query as the server parsed it.'}, 'totalCount': {'type': 'number', 'description': 'Number of targets the query resolved to, across every page.'}, 'attribution': {'type': 'string', 'description': 'Required attribution for the caniuse-derived coverage figures in this response.'}, 'data_version': {'type': 'object', 'required': ['bcd', 'bcd_generated', 'web_features', 'caniuse_lite', 'browserslist'], 'properties': {'bcd': {'type': 'string', 'description': 'Version of the bundled @mdn/browser-compat-data snapshot.'}, 'browserslist': {'type': 'string', 'description': 'Version of the bundled browserslist query resolver.'}, 'caniuse_lite': {'type': 'string', 'description': 'Version of the bundled caniuse-lite snapshot.'}, 'web_features': {'type': 'string', 'description': 'Version of the bundled web-features snapshot.'}, 'bcd_generated': {'type': 'string', 'description': 'ISO 8601 timestamp the browser-compat-data snapshot was generated at.'}}, 'description': 'Vintage of each bundled dataset behind this answer.', 'additionalProperties': False}, 'offsetNotice': {'type': 'string', 'description': 'Why this page carries no target rows, and the offsets that do.'}, 'uncheckedNotice': {'type': 'string', 'description': 'How many of the query targets were not evaluated for every compared feature, the agents they belong to, and their combined usage share.'}, 'targets_resolved': {'type': 'array', 'items': {'type': 'object', 'required': ['agent', 'version_token', 'bcd_browser', 'bcd_version', 'bcd_release_index', 'evaluated'], 'properties': {'agent': {'type': 'string', 'description': 'browserslist agent id.'}, '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 when no feature in the call was comparable â\x80\x94 the target then also appears in unchecked_targets. Mapping onto a release is not evaluation.'}, 'bcd_browser': {'type': 'string', 'description': 'browser-compat-data browser the agent maps to.'}, 'bcd_version': {'type': ['string', 'null'], 'description': 'browser-compat-data release the token mapped to, or null when it predates them all.'}, 'version_token': {'type': 'string', 'description': 'Version token browserslist produced for that agent.'}, 'bcd_release_index': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Release ordinal used for comparison; -1 when the token predates every release.'}}, 'description': 'A target that mapped onto a concrete release.', 'additionalProperties': False}, '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.'}, 'unchecked_targets': {'type': 'array', 'items': {'type': 'object', 'required': ['agent', 'version_token', 'reason', 'usage_percent'], 'properties': {'agent': {'type': 'string', 'description': 'browserslist agent id.'}, 'reason': {'enum': ['no_bcd_browser', 'unknown_version', 'no_bcd_data', 'no_comparable_feature'], 'type': 'string', 'description': 'no_bcd_browser when the agent has no browser-compat-data counterpart, unknown_version when the token maps to no release, no_bcd_data when a compared feature records nothing for that browser, no_comparable_feature when every entry in features was a miss or ambiguous so nothing was compared.'}, 'usage_percent': {'type': 'number', 'description': 'Share of tracked global traffic this target covers.'}, 'version_token': {'type': 'string', 'description': 'Version token browserslist produced for that agent.'}}, 'description': 'A target that was not evaluated.', 'additionalProperties': False}, 'description': 'The query targets on this page that were not evaluated for every compared feature, each with the reason.'}, 'comparable_features': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many entries in features were compared against the targets. A miss or an ambiguous entry is not comparable; at 0 nothing was evaluated.'}, 'targets_resolved_total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Query targets that map onto a browser-compat-data release, across every page.'}, 'evaluated_targets_total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -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.'}, 'target_coverage_percent': {'type': 'number', 'description': 'Share of tracked global traffic covered by the targets evaluated for every compared feature; 0 when no feature was comparable.'}, 'unchecked_targets_total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Query targets not evaluated for every compared feature, across every page.'}, 'unchecked_coverage_percent': {'type': 'number', 'description': 'Share of tracked global traffic covered by the targets counted in unchecked_targets_total.'}}, 'additionalProperties': False}
browsercompat_get_feature
Browsercompat Get Feature
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, 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. An unresolved feature returns found: false with guidance rather than an error.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['feature'], 'properties': {'feature': {'type': 'string', 'maxLength': 200, 'minLength': 1, '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': {'type': 'boolean', '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 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.'}, 'subkeys_offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Direct child keys to skip, default 0. Each subkeys page contains at most 100 keys; pass its next_offset to continue.'}, 'include_runtimes': {'type': 'boolean', 'default': False, 'description': 'Add the bun, deno, nodejs, and oculus rows to support. Leave off for browser ship decisions.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['found', 'outcome', 'resolved_as', 'data_version']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'name': {'type': 'string', 'description': 'web-features display name for the feature.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_feature_input'], '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'found': {'type': 'boolean', 'description': 'True when the feature string resolved to a tracked entry.'}, 'status': {'type': 'object', 'required': ['deprecated', 'experimental', 'standard_track'], 'properties': {'deprecated': {'type': 'boolean', 'description': 'True when browser-compat-data marks the feature deprecated.'}, 'discouraged': {'type': 'object', 'required': ['reason', 'according_to'], '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.'}}, 'description': 'Present when web-features records that the feature is discouraged.', 'additionalProperties': False}, '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.'}}, 'description': 'Standards status for the resolved key. Absent for webextensions keys, which record none, and when the id spans more than one key.', 'additionalProperties': False}, 'mdn_url': {'type': 'string', 'description': 'MDN reference page for the resolved key.'}, 'outcome': {'enum': ['found', 'no_compat_data', 'miss'], 'type': 'string', '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.'}, 'subkeys': {'type': 'object', 'required': ['total', 'keys', 'truncated'], 'properties': {'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.'}, 'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total direct callable child keys, before paging.'}, 'truncated': {'type': 'boolean', 'description': 'True when more direct children remain after this page.'}, 'next_offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Offset for the next page; absent at or past the end.'}}, 'description': 'Direct child compat records of the resolved BCD key. Absent for childless keys and resolutions without a single key.', 'additionalProperties': False}, 'support': {'type': 'array', 'items': {'type': 'object', 'required': ['browser_id', 'browser_name', 'verdict'], 'properties': {'flags': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'Name of the flag or preference to configure.'}, 'type': {'enum': ['preference', 'runtime_flag'], 'type': 'string', 'description': 'Whether the gate is a user preference or a runtime flag.'}, 'value_to_set': {'type': 'string', 'description': 'Value the flag must be set to.'}}, 'description': 'A flag that must be configured for support.', 'additionalProperties': False}, 'description': 'Flags gating support in this browser.'}, 'notes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Notes from browser-compat-data about this support, always an array.'}, 'prefix': {'type': 'string', 'description': 'Vendor prefix the feature ships under.'}, 'partial': {'type': 'boolean', 'description': 'True when the implementation does not meet the mandatory specified behavior.'}, 'verdict': {'enum': ['supported', 'partial', 'prefixed', 'flagged', 'removed', 'unsupported', 'preview_only', 'unknown'], 'type': 'string', '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 â\x89¤ bound â\x80\x94 unknown never means unsupported.'}, 'impl_url': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Links to bugs or issues tracking the implementation, always an array.'}, 'browser_id': {'type': 'string', 'description': 'browser-compat-data browser id.'}, 'browser_name': {'type': 'string', 'description': 'Human-readable browser name.'}, 'version_last': {'type': 'string', 'description': 'Last release that still supported the feature.'}, 'version_added': {'type': 'string', 'description': 'Release that added support.'}, 'version_removed': {'type': 'string', 'description': 'Release that removed support.'}, 'alternative_name': {'type': 'string', 'description': 'Entirely different name the feature is implemented under.'}, 'version_added_is_upper_bound': {'type': 'boolean', 'description': 'True when the data says support arrived at or before version_added, not exactly at it.'}}, 'description': 'Support for one reported browser.', 'additionalProperties': False}, 'description': 'One row per reported browser. Absent when the id spans more than one browser-compat-data key.'}, 'baseline': {'type': 'object', 'required': ['state'], 'properties': {'state': {'enum': ['widely', 'newly', 'limited', 'not_mapped'], 'type': 'string', '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.'}, 'high_date': {'type': 'string', 'description': 'Date the feature became widely available, verbatim from web-features â\x80\x94 may carry a â\x89¤ prefix.'}, 'since_date': {'type': 'string', 'description': 'Date the feature became newly available, verbatim from web-features â\x80\x94 may carry a â\x89¤ prefix.'}, 'date_is_upper_bound': {'type': 'boolean', 'description': 'True when a date above is â\x89¤-prefixed, so it is an upper bound rather than exact.'}}, 'description': 'Baseline state for the resolved key, or the feature rollup when a web-features id resolved to more than one key.', 'additionalProperties': False}, 'guidance': {'type': 'string', 'description': 'What to do next on a miss or with no compat data.'}, 'spec_urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Specification URLs for the resolved key, always an array.'}, 'compat_keys': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Present when the web-features id spans more than one browser-compat-data key. Call this tool again with one of them for the per-browser fields.'}, 'description': {'type': 'string', 'description': 'web-features description, or the browser-compat-data description with tags stripped.'}, 'discouraged': {'type': 'object', 'required': ['reason', 'according_to'], '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.'}}, 'description': 'Feature-level discouragement, independent of leaf standards status. Also retained in status.discouraged when status exists.', 'additionalProperties': False}, 'resolved_as': {'anyOf': [{'type': 'object', 'required': ['input', 'bcd_key', 'baseline_id', 'resolved_via'], 'properties': {'input': {'type': 'string', 'description': 'The feature string as the caller sent it, trimmed.'}, 'bcd_key': {'type': ['string', 'null'], 'description': 'The single browser-compat-data key this resolved to, or null when the web-features id spans more than one key.'}, 'baseline_id': {'type': ['string', 'null'], 'description': 'The web-features id this resolved to, or null when no web-features entry covers the key.'}, 'resolved_via': {'enum': ['bcd_key', 'web_features_id', 'web_features_id_normalized', 'redirect', 'search'], 'type': 'string', '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 â\x80\x94 treat a search match as a best guess, not a confirmed key.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'How the feature string was matched, or null on a miss.'}, 'data_version': {'type': 'object', 'required': ['bcd', 'bcd_generated', 'web_features', 'caniuse_lite', 'browserslist'], 'properties': {'bcd': {'type': 'string', 'description': 'Version of the bundled @mdn/browser-compat-data snapshot.'}, 'browserslist': {'type': 'string', 'description': 'Version of the bundled browserslist query resolver.'}, 'caniuse_lite': {'type': 'string', 'description': 'Version of the bundled caniuse-lite snapshot.'}, 'web_features': {'type': 'string', 'description': 'Version of the bundled web-features snapshot.'}, 'bcd_generated': {'type': 'string', 'description': 'ISO 8601 timestamp the browser-compat-data snapshot was generated at.'}}, 'description': 'Vintage of each bundled dataset behind this answer.', 'additionalProperties': False}, 'limiting_browser': {'type': 'object', 'required': ['browser_id', 'name', 'version'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable browser name.'}, 'version': {'type': 'string', 'description': 'Release of that browser the feature requires.'}, 'browser_id': {'type': 'string', 'description': 'browser-compat-data browser id.'}}, 'description': 'Among the Baseline core browsers, the one requiring the newest release. Present only when every core browser has full, unprefixed, unflagged support at a resolvable added release.', 'additionalProperties': False}, 'runtimesExcluded': {'type': 'string', 'description': 'Notes that the feature carries server-runtime or XR data that was left out.'}, 'baselineNotMapped': {'type': 'string', 'description': 'Explains why a resolved key carries no Baseline state.'}}, 'additionalProperties': False}
browsercompat_list_reference
Browsercompat List Reference
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.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['topic'], 'properties': {'topic': {'enum': ['bcd_namespaces', 'bcd_browsers', 'browserslist_agents', 'baseline_states', 'groups', 'snapshots'], 'type': 'string', '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.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['topic', 'entries', 'data_version']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'description': 'Machine-readable failure mode.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'topic': {'type': 'string', 'description': 'The topic that was listed.'}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'detail'], 'properties': {'id': {'type': 'string', 'description': 'Identifier callers pass to the other tools, or filter results by.'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many items the entry covers â\x80\x94 compat keys for a namespace or Baseline state.'}, 'label': {'type': 'string', 'description': 'Human-readable name for this entry.'}, 'detail': {'type': 'string', 'description': 'One line explaining what the entry covers.'}, 'reported': {'type': 'boolean', 'description': 'True when this browser is in the reported set (desktop or mobile). Runtimes are added only by include_runtimes.'}, 'spec_url': {'type': 'string', 'description': 'Specification URL for this ECMAScript snapshot.'}, 'maps_from': {'anyOf': [{'type': 'string', 'const': 'high'}, {'type': 'string', 'const': 'low'}, {'type': 'boolean', 'const': False}, {'type': 'null', 'const': None}], 'description': 'Raw web-features status.baseline value this reported state maps from; null for not_mapped, which has none.'}, 'bcd_browser': {'type': ['string', 'null'], 'description': 'browser-compat-data browser this browserslist agent maps to, or null when none exists.'}, 'usage_percent': {'type': 'number', 'description': 'Share of tracked global traffic attributed to this browserslist agent.'}}, 'description': 'One vocabulary entry.', 'additionalProperties': False}, 'description': 'Every entry in the requested vocabulary.'}, 'attribution': {'type': 'string', 'description': 'Required attribution for the caniuse-derived usage figures in this response.'}, 'data_version': {'type': 'object', 'required': ['bcd', 'bcd_generated', 'web_features', 'caniuse_lite', 'browserslist'], 'properties': {'bcd': {'type': 'string', 'description': 'Version of the bundled @mdn/browser-compat-data snapshot.'}, 'browserslist': {'type': 'string', 'description': 'Version of the bundled browserslist query resolver.'}, 'caniuse_lite': {'type': 'string', 'description': 'Version of the bundled caniuse-lite snapshot.'}, 'web_features': {'type': 'string', 'description': 'Version of the bundled web-features snapshot.'}, 'bcd_generated': {'type': 'string', 'description': 'ISO 8601 timestamp the browser-compat-data snapshot was generated at.'}}, 'description': 'Vintage of each bundled dataset behind this answer.', 'additionalProperties': False}}, 'additionalProperties': False}
browsercompat_search_features
Browsercompat Search Features
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.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['query'], 'properties': {'group': {'type': 'string', 'maxLength': 100, 'minLength': 1, '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.'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Maximum results to return, from 1 to 50.'}, 'query': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Plain-language name, keyword, or code notation, for example "container query", "fromAsync", "Array.prototype.at", "display: grid", or "<dialog>".'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of ranked matches to skip before returning results, for paging past limit. Pass the nextOffset from the previous response.'}, 'baseline': {'enum': ['widely', 'newly', 'limited', 'not_mapped'], 'type': 'string', 'description': 'Restrict results to one Baseline state.'}, 'snapshot': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Restrict results to features in one ECMAScript snapshot, for example "ecmascript-2023". Call browsercompat_list_reference with topic snapshots for valid ids.'}, 'namespace': {'enum': ['api', 'css', 'html', 'http', 'javascript', 'manifests', 'mathml', 'mediatypes', 'svg', 'webassembly', 'webdriver', 'webextensions'], 'type': 'string', 'description': 'Restrict results to one top-level browser-compat-data namespace.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['results', 'data_version', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The limit that was applied.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_query', 'unknown_group', 'unknown_snapshot'], '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of results on this page.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['baseline_state', 'matched_on', 'support_summary'], 'properties': {'name': {'type': 'string', 'description': 'web-features display name.'}, 'bcd_key': {'type': 'string', 'description': 'browser-compat-data key. Absent for entries that own no compat keys.'}, 'mdn_url': {'type': 'string', 'description': 'MDN reference page for this key.'}, 'matched_on': {'enum': ['bcd_key', 'baseline_id', 'name', 'caniuse_title', 'path_suffix', 'path_segment', 'description', 'path_tokens'], 'type': 'string', '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.'}, 'baseline_id': {'type': 'string', 'description': 'web-features id covering this entry.'}, 'description': {'type': 'string', 'description': 'One-line description of the feature.'}, 'baseline_state': {'enum': ['widely', 'newly', 'limited', 'not_mapped'], 'type': 'string', 'description': 'Baseline state for this entry, reported per browser-compat-data key.'}, 'support_summary': {'type': 'string', 'description': 'One line over the Baseline core browsers, with â\x80\x94 for unsupported and ? for unknown.'}}, 'description': 'One ranked match.', 'additionalProperties': False}, 'description': 'Ranked matches, best first. An empty array is a successful search with no hits.'}, 'truncated': {'type': 'boolean', 'description': 'True when more matches remain past this page.'}, 'nextOffset': {'type': 'number', 'description': 'The offset of the next page. Present only while matches remain past this page.'}, 'totalCount': {'type': 'number', 'description': 'Matches across every page, before offset and limit apply.'}, 'data_version': {'type': 'object', 'required': ['bcd', 'bcd_generated', 'web_features', 'caniuse_lite', 'browserslist'], 'properties': {'bcd': {'type': 'string', 'description': 'Version of the bundled @mdn/browser-compat-data snapshot.'}, 'browserslist': {'type': 'string', 'description': 'Version of the bundled browserslist query resolver.'}, 'caniuse_lite': {'type': 'string', 'description': 'Version of the bundled caniuse-lite snapshot.'}, 'web_features': {'type': 'string', 'description': 'Version of the bundled web-features snapshot.'}, 'bcd_generated': {'type': 'string', 'description': 'ISO 8601 timestamp the browser-compat-data snapshot was generated at.'}}, 'description': 'Vintage of each bundled dataset behind this answer.', 'additionalProperties': False}, 'offsetNotice': {'type': 'string', 'description': 'Why a page came back empty although the search matched.'}, 'noMatchNotice': {'type': 'string', 'description': 'How to broaden a search that matched nothing.'}, 'appliedFilters': {'type': 'object', 'properties': {'group': {'type': 'string', 'description': 'web-features group filter the search applied, nested groups included.'}, 'baseline': {'type': 'string', 'description': 'Baseline filter the search applied.'}, 'snapshot': {'type': 'string', 'description': 'ECMAScript snapshot filter the search applied.'}, 'namespace': {'type': 'string', 'description': 'Namespace filter the search applied.'}}, 'description': 'Filters the server applied to this search.', 'additionalProperties': False}}, 'additionalProperties': False}
已更改
browsercompat_compare_support
2026年10月1日 02:43
已更改
browsercompat_check_baseline
2026年10月1日 02:43
已更改
browsercompat_get_feature
2026年10月1日 02:43
已更改
browsercompat_compare_support
2026年9月25日 02:49
已更改
browsercompat_search_features
2026年9月25日 02:49
已更改
browsercompat_check_baseline
2026年9月25日 02:49
已更改
browsercompat_get_feature
2026年9月25日 02:49
已更改
browsercompat_list_reference
2026年9月25日 02:49
已添加
browsercompat_compare_support
2026年9月21日 02:40
已添加
browsercompat_search_features
2026年9月21日 02:40
已添加
browsercompat_check_baseline
2026年9月21日 02:40
已添加
browsercompat_get_feature
2026年9月21日 02:40
已添加
browsercompat_list_reference
2026年9月21日 02:40