Browser Compat Mcp Server
БесплатноПоддерживаетсяBrowser compatibility and Baseline status for any web feature — offline, from MDN's browser-compat-data, web-features, and caniuse. STDIO or Streamable HTTP.
Описание
Browser compatibility and Baseline status for any web feature — offline, from MDN's browser-compat-data, web-features, and caniuse. STDIO or Streamable HTTP.
README
@cyanheads/browser-compat-mcp-server
Browser compatibility and Baseline status for any web feature — offline, from MDN's browser-compat-data, web-features, and caniuse. STDIO or Streamable HTTP.
Public Hosted Server: https://browser-compat.caseyjhand.com/mcp
Overview
Browser support and Baseline status for any web platform feature, from MDN's @mdn/browser-compat-data, web-features, and caniuse-lite usage data. Check whether a feature is safe to ship against your browserslist targets. All data ships in the package: no network calls, no API key, no rate limit.
The browser-compat-guide covers assessing code against a project's browser policy and diagnosing historical support failures. It ships with plugin, npm, Docker, and MCPB installs and is available over MCP at skill://browser-compat-guide/SKILL.md.
Tools
| Tool | Description |
|---|---|
browsercompat_list_reference |
Enumerate the reference vocabulary the other tools expect — BCD namespaces and browser ids, browserslist agents, Baseline states, groups, and ECMAScript snapshots. |
browsercompat_get_feature |
Full compatibility record for one feature: Baseline state, standards status, per-browser versions with flags and prefixes, MDN and specification links. |
browsercompat_check_baseline |
Ship-or-not across up to 20 features per call: Baseline state and date, the limiting browser, deprecation flags, and the traffic share requiring it would exclude. |
browsercompat_search_features |
Find features by plain name, keyword, or code notation when the canonical key is unknown, ranked with the field that matched, filterable by group or ECMAScript snapshot, and pageable. |
browsercompat_compare_support |
Check features against an explicit browserslist target query: a whole-query verdict, evaluated coverage, and failing version runs per feature. |
Capability reference
browsercompat_list_reference tool
- Required
topic:bcd_namespaces(12),bcd_browsers(17),browserslist_agents(19),baseline_states(4),groups(104), orsnapshots(11). Group and snapshot ids feed the search filters. - Entries carry
id,label, anddetail, pluscount,reported,bcd_browser,usage_percent,maps_from, orspec_urlwhere applicable. An agent'sbcd_browser: nullmeans support comparisons cannot evaluate it and report it inunchecked_targets.
browsercompat_get_feature tool
- One
feature, 1–200 characters: a BCD key (css.selectors.has) or web-features id (has).resolve: true(off by default) also accepts a name or notation when it matches exactly one feature.include_runtimes: trueaddsbun,deno,nodejs, andoculussupport rows. outcomeisfound,no_compat_data, ormiss; a miss returnsfound: falsewithguidance, and whitespace-only input returnsinvalid_feature_input. Eachsupportrow gives the newest release's statement, with the other BCD statements for that browser inother_statements.- A multi-key id such as
gridreturnsfeature_support(one row per Baseline core browser) instead ofsupport,status,mdn_url, andspec_urls; call one of itscompat_keysfor a key-level answer.compat_keysandsubkeyspage 100 at a time withcompat_keys_offsetandsubkeys_offset(default 0).limiting_browseris the Baseline core browser with the newest required release.
browsercompat_check_baseline tool
- BCD keys or web-features ids, 1–200 characters each. Up to 100 are accepted and the first 20 are evaluated in input order; the rest come back verbatim in
omitted_features. More than 100 is rejected, and a whitespace-only entry returnsinvalid_feature_input. - Results carry Baseline state and dates,
limiting_browser,deprecated,experimental, anddiscouraged, plususage_percent_excludedandusage_sourcewhere caniuse covers the feature. Usage is left out when unavailable, never reported as zero. all_widely_availableis true only when every entry resolves atwidelyand none was omitted; it does not assess deprecation.
browsercompat_search_features tool
query, 1–100 characters, accepts names, keywords, or notation such asArray.prototype.at,display: grid, or<dialog>. Combinenamespace(12 BCD namespaces),baseline(widely,newly,limited,not_mapped),group(including nested groups), andsnapshot(such asecmascript-2023).matched_onsays why a result ranked where it did, andsupport_summarycovers the seven Baseline core browsers:Firefox 33 (flagged),Safari 3 (prefixed),Chrome 94 (partial), andEdge ≤18preserve the selected verdict and addition bound;—means unsupported, removed, or preview-only, and?means unknown. Typed failures:invalid_query(zero searchable tokens),unknown_group,unknown_snapshot.- Page with
limit(default 10, at most 50; larger values are served as 50 and reported incap) andoffset(default 0);totalCountandnextOffsetdrive paging. Zero hits succeed with a notice naming a filter to drop.
browsercompat_compare_support tool
- Up to 20 features per call against a required self-contained
targetsbrowserslist query, such asdefaultsor> 0.5%, last 2 versions; config packages and custom configuration are rejected, and local config discovery is disabled. Up to 100 features are accepted and the rest come back inomitted_features, which makesall_clearfalse. Typed failures:invalid_target_query,no_targets_resolved,invalid_feature_input. - Each
verdictisclears,fails,inconclusive,miss, orambiguous. A feature clears only when every target in the query was evaluated and supports it, so a query that includes a browser with no compatibility data, asdefaultsdoes, never clears.all_clearis true only when every feature clears. - Results report
support_source,failing_ranges,failing_total, and evaluated and unchecked totals with coverage percentages. Target rows page withtarget_offset(default 0) andtarget_limit(default 10, at most 10; larger values are served as 10 and reported incap); verdicts and totals are the same on every page, andtotalCountandnextOffsetdrive paging.
Data sources
| Package | Version | License | Supplies |
|---|---|---|---|
| @mdn/browser-compat-data | ^8.1.7 |
CC0-1.0 | Per-browser support, standards status, MDN and specification links |
| web-features | ^3.44.0 |
Apache-2.0 | Baseline state and dates, feature-level core-browser support, discouraged flags, groups, ECMAScript snapshots |
| caniuse-lite | ^1.0.30001819 |
CC-BY-4.0 | Usage weighting, plus feature titles for the search index |
| browserslist | ^4.29.4 |
MIT | Target query resolution and coverage figures |
CC BY 4.0 requires attribution wherever the caniuse data travels, so every response carrying a usage figure carries this string: Usage data from caniuse.com, © Can I Use contributors, CC BY 4.0. Figures are percentage points of global traffic. The bundled data tracks ~97.5% of global traffic; the remainder is untracked and unknown. Values are raw global percentages, without normalization to tracked traffic. Full license texts and notices are in THIRD_PARTY_NOTICES.md.
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
Browser-compat-specific:
- All four datasets are bundled and loaded in process — no runtime network calls, no API key, no rate limit, and nothing to configure
- Baseline is read per browser-compat-data key from
status.by_compat_key, never rolled up from the feature level, because keys under one feature legitimately disagree - Every tool resolves a feature the same way: exact BCD key, then web-features id, then a
movedredirect - Target versions follow browser-compat-data's release order, with caniuse spellings normalized (
safari 16.0↔16)
Agent-friendly output:
- Every response echoes
data_version, the version of each bundled dataset behind the answer - A pass is never claimed for a browser that was not evaluated; targets without data land in
unchecked_targetsand make the verdictinconclusive - Misses are results, not failures:
found: falsewithguidancenaming the next call, and typed errors with recovery hints - Usage figures state the population they are a share of and carry the caniuse attribution
Getting started
Public Hosted Instance
A public instance is available at https://browser-compat.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"browser-compat-mcp-server": {
"type": "streamable-http",
"url": "https://browser-compat.caseyjhand.com/mcp"
}
}
}
Self-Hosted / Local
Add the following to your MCP client configuration file:
{
"mcpServers": {
"browser-compat-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/browser-compat-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
Or with npx (no Bun required):
{
"mcpServers": {
"browser-compat-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/browser-compat-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
Or with Docker:
{
"mcpServers": {
"browser-compat-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/browser-compat-mcp-server:latest"
]
}
}
}
For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
Prerequisites
- Bun v1.4.0 or higher (or Node.js v24+).
- No API keys, accounts, or network access required — every dataset ships with the package.
Installation
- Clone the repository:
git clone https://github.com/cyanheads/browser-compat-mcp-server.git
- Navigate into the directory:
cd browser-compat-mcp-server
- Install dependencies:
bun install
- Configure environment (optional):
cp .env.example .env
# edit .env if you want to override transport or logging defaults
Configuration
There are no server-specific environment variables: no API keys, no base URLs, and deliberately no browserslist configuration variable — the target query is always a tool input rather than ambient state. Framework transport, logging, and telemetry settings remain configurable.
| Variable | Description | Default |
|---|---|---|
MCP_TRANSPORT_TYPE |
Transport: stdio or http. |
stdio |
MCP_HTTP_PORT |
Port for the HTTP server. | 3010 |
MCP_SESSION_MODE |
HTTP session mode. | stateless |
OTEL_ENABLED |
Enable OpenTelemetry. | false |
OTEL_EXPORTER_OTLP_ENDPOINT |
Base URL for traces and metrics. | Unset |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
OTLP log endpoint. | Unset |
LOG_TOOL_FAILURE_PAYLOADS |
Log failed-call arguments and results. Redaction matches key names only; free-form values can retain secrets. | false |
LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES |
UTF-8 byte cap per logged payload. | 16384 |
See .env.example for the full list of optional framework overrides.
Running the server
Local development
# One-time build
bun run rebuild
# Run the built server
bun run start:stdio
# or
bun run start:http
bun run devcheck # Lint, format, typecheck, security
bun run test # Vitest test suite
bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t browser-compat-mcp-server .
docker run --rm -p 3010:3010 browser-compat-mcp-server
The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/browser-compat-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
| Directory | Purpose |
|---|---|
src/index.ts |
createApp() entry point — registers the tools and warms the datasets. |
src/data/ |
The browserslist agent to browser-compat-data browser map. |
src/mcp-server/tools/ |
Tool definitions (*.tool.ts) and the output shapes they share. |
src/services/ |
bcd, baseline, targets, search, and data-version services over the bundled datasets. |
src/types/ |
Ambient module declaration for caniuse-lite, which ships no types. |
skills/ |
Published browser compatibility workflow guide. |
tests/ |
Vitest suites mirroring src/. |
docs/ |
design.md — the surface, the data shapes behind it, and the decisions log. |
changelog/ |
Per-version changelog files. |
The generated file tree is docs/tree.md.
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storage - Register new tools directly in
src/index.ts - Data integrity: read the bundled datasets as they are and preserve their uncertainty; never fabricate a support fact the data does not carry
Contributing
Issues are welcome. Run checks and tests before submitting:
bun run devcheck
bun run test
License
Apache-2.0 — see LICENSE for details.
Установить Browser Compat Mcp Server в Claude Desktop, Claude Code, Cursor
unyly install browser-compat-mcp-serverСтавит в Claude Desktop, Claude Code, Cursor и VS Code — сам разбирается с npx, uvx и сборкой из исходников.
Впервые? Поставь CLI: curl -fsSL https://unyly.org/install | sh
Или настроить вручную
Выполни в терминале:
claude mcp add browser-compat-mcp-server --env MCP_LOG_LEVEL="" --env MCP_TRANSPORT_TYPE="" -- npx -y @cyanheads/browser-compat-mcp-serverПошаговые гайды: как установить Browser Compat Mcp Server
FAQ
Browser Compat Mcp Server MCP бесплатный?
Да, Browser Compat Mcp Server MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Browser Compat Mcp Server?
Да, требуются переменные окружения: MCP_LOG_LEVEL, MCP_TRANSPORT_TYPE. Unyly подставит их в конфиг при установке.
Browser Compat Mcp Server — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Browser Compat Mcp Server в Claude Desktop, Claude Code или Cursor?
Открой Browser Compat Mcp Server на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
Playwright
Browser automation, scraping, screenshots
автор: MicrosoftPuppeteer
Browser automation and web scraping.
автор: modelcontextprotocolGarmin Connect
An MCP server for Garmin Connect that provides access to fitness activities, health statistics, and sleep data by routing requests through a headless browser to
автор: etweisbergHiggsfield Unlimited
MCP server for Higgsfield AI that enables unlimited-mode image, video, audio generation, uploads, and job management via multiple parallel accounts, using brows
автор: nukIeeropentabs-dev/opentabs
Plugin-based server and Chrome extension that gives AI agents access to web apps through your authenticated browser session, with a plugin SDK.
автор: opentabs-devhlydecker/ucsc-genome-mcp
Interact with the UCSC Genome Browser API to find genomes, chromosomes and more.
автор: hlydecker34892002/bilibili-mcp-js
Search Bilibili content, with LangChain integration examples.
автор: 34892002achiya-automation/safari-mcp
Native Safari browser automation without a Chrome dependency.
автор: achiya-automationagent-infra/mcp-server-browser
Browser automation using Puppeteer, supporting local and remote browser connections.
автор: bytedanceaparajithn/agent-scraper-mcp
Web scraping: clean content extraction, CSS-selector scraping, Playwright screenshots, link and metadata extraction, and Google search.
автор: aparajithnCompare Browser Compat Mcp Server with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории browse
