io.github.cyanheads/browser-compat-mcp-server
REMOTE · BROWSER-COMPAT.CASEYJHAND.COM · 2 COMPONENTS
Browser compatibility and Baseline status for any web feature — offline, from bundled MDN data.
Available components
Last scanned (4 hours ago)
Scores higher than 97% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Developer Tools
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability74
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2444 tokens (~407/item across 6 items; 5 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 5 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 7 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 26 Oct 26 +3
- The server rewrote its instructions, which are the text every model session reads security
- Tool “browsercompat_compare_support” rewrote its description, which is the text the model reads security
- Tool “browsercompat_check_baseline” rewrote its description, which is the text the model reads security
- Schema quality: 483 → 407 ▲ functional
- First check of Schema quality: 100 functional
- New resource “browser-compat-guide” functional
- Server version: 0.2.1 → 0.3.0 functional
- “browsercompat_compare_support” reworded the description of “targets” cosmetic
- 20 Oct 26 0
- Stability: 0.97 → pass security
- 19 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “browsercompat_check_baseline” rewrote its description, which is the text the model reads security
- Tool “browsercompat_compare_support” rewrote its description, which is the text the model reads security
- Tool “browsercompat_get_feature” rewrote its description, which is the text the model reads security
- Schema quality: 385 → 483 ▼ functional
- Server version: 0.2.0 → 0.2.1 functional
- “browsercompat_get_feature” added an optional parameter “compat_keys_offset” cosmetic
- “browsercompat_compare_support” reworded the description of “features” cosmetic
- “browsercompat_check_baseline” reworded the description of “features” cosmetic
- “browsercompat_compare_support” reworded the description of “resolve” cosmetic
- “browsercompat_compare_support” reworded the description of “target_limit” cosmetic
- “browsercompat_get_feature” reworded the description of “resolve” cosmetic
- “browsercompat_search_features” reworded the description of “limit” cosmetic
- 14 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 73. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 67. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://browser-compat.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 2 Nov 2026 | 31 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 995a30681ab772540e934241ca1d576c |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of browser-compat.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| browser-compat.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://browser-compat.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://browser-compat.caseyjhand.com/mcp | HTTPS enforced | 301 | https://browser-compat.caseyjhand.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
browsercompat_check_baseline Browsercompat Check Baseline ~330
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.
| Name | Type | Req | Description |
|---|---|---|---|
| features | array | yes | 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 entr… |
| resolve | boolean | – | 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 th… |
| Name | Type | Req | Description |
|---|---|---|---|
| all_widely_available | boolean | – | 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. |
| attribution | string | – | Required attribution for the caniuse-derived usage figures in this response. |
| data_version | object | – | Vintage of each bundled dataset behind this answer. |
| error | object | – | Present when the call failed. Absent on success. |
| omitted_features | array | – | 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. |
| results | array | – | One result per evaluated entry — the first 20. A miss is a result, not a failure. |
| totalCount | number | – | Number of results returned. |
| unresolvedNotice | string | – | Names the entries that did not resolve and how to find the right key. |
No examples provided.
browsercompat_compare_support Browsercompat Compare Support ~746
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.
| Name | Type | Req | Description |
|---|---|---|---|
| features | array | yes | 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 ent… |
| resolve | boolean | – | 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 th… |
| target_limit | integer | – | 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 th… |
| target_offset | integer | – | 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 retu… |
| targets | string | yes | 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 disa… |
| Name | Type | Req | Description |
|---|---|---|---|
| all_clear | boolean | – | 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 Basel… |
| attribution | string | – | Required attribution for the caniuse-derived coverage figures in this response. |
| cap | number | – | The page size applied: target_limit, or 10 when target_limit was above 10. |
| comparable_features | integer | – | 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. |
| data_version | object | – | Vintage of each bundled dataset behind this answer. |
| error | object | – | Present when the call failed. Absent on success. |
| evaluated_targets_total | integer | – | 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. |
| nextOffset | number | – | The target_offset of the next page. Present only while targets remain past this page. |
| offsetNotice | string | – | Why this page carries no target rows, and the offsets that do. |
| omitted_features | array | – | 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. |
| query_echo | string | – | The targets query as the server parsed it. |
| results | array | – | Per-feature verdicts and totals over the whole query for the first 20 entries, each with its own target rows for this page. |
| shown | number | – | Number of query targets this page covers. |
| target_coverage_percent | number | – | Percentage points of global traffic covered by the targets evaluated for every compared feature; 0 when no feature was comparable. |
| targets_resolved | array | – | 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_ta… |
| targets_resolved_total | integer | – | Query targets that map onto a browser-compat-data release, across every page. |
| totalCount | number | – | Number of targets the query resolved to, across every page. |
| truncated | boolean | – | True when more query targets remain past this page. |
| uncheckedNotice | string | – | How many of the query targets were not evaluated for every compared feature, the agents they belong to, and their combined usage share. |
| unchecked_coverage_percent | number | – | Percentage points of global traffic covered by the targets counted in unchecked_targets_total. |
| unchecked_targets | array | – | The query targets on this page that were not evaluated for every compared feature, each with the reason. |
| unchecked_targets_total | integer | – | Query targets not evaluated for every compared feature, across every page. |
No examples provided.
browsercompat_get_feature Browsercompat Get Feature ~489
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.
| Name | Type | Req | Description |
|---|---|---|---|
| compat_keys_offset | integer | – | 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 res… |
| feature | string | yes | 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… |
| include_runtimes | boolean | – | Add the bun, deno, nodejs, and oculus rows to support. Leave off for browser ship decisions. |
| resolve | boolean | – | 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 th… |
| subkeys_offset | integer | – | Direct child keys to skip, default 0. Each subkeys page contains at most 100 keys; pass its next_offset to continue. |
| Name | Type | Req | Description |
|---|---|---|---|
| baseline | object | – | Baseline state for the resolved key, or the feature rollup when a web-features id resolved to more than one key. |
| baselineNotMapped | string | – | Explains why a resolved key carries no Baseline state. |
| compat_keys | array | – | 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… |
| compat_keys_next_offset | integer | – | compat_keys_offset for the next page of compat_keys; absent at or past the end. |
| compat_keys_total | integer | – | Every browser-compat-data key the id owns, before paging. Present with compat_keys. |
| data_version | object | – | Vintage of each bundled dataset behind this answer. |
| description | string | – | web-features description, or the browser-compat-data description with tags stripped. |
| discouraged | object | – | Feature-level discouragement, independent of leaf standards status. Also retained in status.discouraged when status exists. |
| error | object | – | Present when the call failed. Absent on success. |
| feature_support | array | – | 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 featu… |
| found | boolean | – | True when the feature string resolved to a tracked entry. |
| guidance | string | – | What to do next on a miss or with no compat data. |
| limiting_browser | object | – | 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 resolva… |
| mdn_url | string | – | MDN reference page for the resolved key. |
| name | string | – | web-features display name for the feature. |
| outcome | string | – | 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 | – | – | How the feature string was matched, or null on a miss. |
| runtimesExcluded | string | – | Notes that the feature carries server-runtime or XR data that was left out. |
| spec_urls | array | – | Specification URLs for the resolved key, always an array. |
| status | object | – | Standards status for the resolved key. Absent for webextensions keys, which record none, and when the id spans more than one key. |
| subkeys | object | – | Direct child compat records of the resolved BCD key. Absent for childless keys and resolutions without a single key. |
| support | array | – | 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… |
No examples provided.
browsercompat_list_reference Browsercompat List Reference ~161
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.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | yes | 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 brows… |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | Required attribution for the caniuse-derived usage figures in this response. |
| data_version | object | – | Vintage of each bundled dataset behind this answer. |
| entries | array | – | Every entry in the requested vocabulary. |
| error | object | – | Present when the call failed. Absent on success. |
| topic | string | – | The topic that was listed. |
No examples provided.
browsercompat_search_features Browsercompat Search Features ~340
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.
| Name | Type | Req | Description |
|---|---|---|---|
| baseline | string | – | Restrict results to one Baseline state. |
| group | string | – | 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… |
| limit | integer | – | 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. |
| namespace | string | – | Restrict results to one top-level browser-compat-data namespace. |
| offset | integer | – | Number of ranked matches to skip before returning results, for paging past limit. Pass the nextOffset from the previous response. |
| query | string | yes | Plain-language name, keyword, or code notation, for example "container query", "fromAsync", "Array.prototype.at", "display: grid", or "<dialog>". |
| snapshot | string | – | Restrict results to features in one ECMAScript snapshot, for example "ecmascript-2023". Call browsercompat_list_reference with topic snapshots for valid ids. |
| Name | Type | Req | Description |
|---|---|---|---|
| appliedFilters | object | – | Filters the server applied to this search. |
| cap | number | – | The page size applied: limit, or 50 when limit was above 50. |
| data_version | object | – | Vintage of each bundled dataset behind this answer. |
| error | object | – | Present when the call failed. Absent on success. |
| nextOffset | number | – | The offset of the next page. Present only while matches remain past this page. |
| noMatchNotice | string | – | How to broaden a search that matched nothing. |
| offsetNotice | string | – | Why a page came back empty although the search matched. |
| results | array | – | Ranked matches, best first. An empty array is a successful search with no hits. |
| shown | number | – | Number of results on this page. |
| totalCount | number | – | Matches across every page, before offset and limit apply. |
| truncated | boolean | – | True when more matches remain past this page. |
No examples provided.
How do I install the io.github.cyanheads/browser-compat-mcp-server server?
io.github.cyanheads/browser-compat-mcp-server is a hosted endpoint at https://browser-compat.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · browser-compat.caseyjhand.com
claude mcp add --transport http cyanheads-browser-compat-mcp-server 'https://browser-compat.caseyjhand.com/mcp'
What is the io.github.cyanheads/browser-compat-mcp-server server?
io.github.cyanheads/browser-compat-mcp-server is listed in the public MCP registry as io.github.cyanheads/browser-compat-mcp-server. Browser compatibility and Baseline status for any web feature, offline, from bundled MDN data. This page covers its hosted endpoint (https://browser-compat.caseyjhand.com/mcp).
Is the io.github.cyanheads/browser-compat-mcp-server server safe to use?
io.github.cyanheads/browser-compat-mcp-server scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.cyanheads/browser-compat-mcp-server server expose?
io.github.cyanheads/browser-compat-mcp-server exposes 5 tools: browsercompat_list_reference, browsercompat_get_feature, browsercompat_check_baseline, browsercompat_search_features, browsercompat_compare_support. Their descriptions and schemas cost roughly 2,066 tokens of context every time the server is loaded.
Does the io.github.cyanheads/browser-compat-mcp-server server require authentication?
No. We connected to io.github.cyanheads/browser-compat-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.cyanheads/browser-compat-mcp-server server still maintained?
io.github.cyanheads/browser-compat-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.