关于 browser-compat-mcp-server
browser-compat-mcp-server 基于随包提供的 MDN 等数据,查询 Web 功能的浏览器兼容性和 Baseline 状态,适用于需要核对目标浏览器支持情况的开发者。数据离线可用,无需 API 密钥或运行时网络访问。
主要功能
- 01查询功能的浏览器支持详情
- 02检查 Baseline 状态与日期
- 03按功能名称或代码记法搜索
- 04按 browserslist 目标对比支持情况
- 05离线使用内置兼容性数据
适用场景
- 01发布前核验功能是否适用于目标浏览器
- 02查找 CSS 或 JavaScript 功能的支持版本
- 03按项目的 browserslist 条件检查兼容性
- 04了解功能的 Baseline 状态
MCP 相关
该 MCP 服务向客户端提供参考词汇、功能查询、Baseline 检查、功能搜索和目标浏览器对比工具。支持 stdio 和 Streamable HTTP。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://browser-compat.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-browser-compat https://browser-compat.caseyjhand.com/mcp{"mcpServers":{"cyanheads-browser-compat":{"type":"http","url":"https://browser-compat.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-browser-compat":{"type":"http","url":"https://browser-compat.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-browser-compat":{"type":"http","url":"https://browser-compat.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-browser-compat":{"serverUrl":"https://browser-compat.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
5| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| topic | enum | 是 | 要列出的词汇类别:bcd_namespaces(12 个顶层 browser-compat-data 命名空间)、bcd_browsers(17 个受跟踪的浏览器)、browserslist_agents(映射到 browser-compat-data 浏览器的 19 个 browserslist ID)、baseline_states(4 种 Baseline 状态)、groups(104 个 web-features 分组)或 snapshots(11 个 ECMAScript 快照)。bcd_namespaces | bcd_browsers | browserslist_agents | baseline_states | groups | snapshots |
详细介绍
@cyanheads/browser-compat-mcp-server
查询任意 Web 功能的浏览器兼容性和 Baseline 状态——离线数据来自 MDN 的 browser-compat-data、web-features 和 caniuse。支持 STDIO 或 Streamable HTTP。
概述
查询任意 Web 平台功能的浏览器支持情况和 Baseline 状态,数据来自 MDN 的 @mdn/browser-compat-data、web-features 和 caniuse-lite 使用数据。检查某项功能是否适合在目标 browserslist 浏览器中发布。所有数据都包含在软件包中:无需网络请求、API 密钥或速率限制。
browser-compat-guide 介绍如何根据项目的浏览器策略评估代码,以及如何诊断历史兼容性问题。该指南随插件、npm、Docker 和 MCPB 安装包一起提供,也可通过 MCP 在 skill://browser-compat-guide/SKILL.md 访问。
工具
| 工具 | 描述 |
|---|---|
browsercompat_list_reference | 列出其他工具所需的参考词汇,包括 BCD 命名空间和浏览器 ID、browserslist 代理、Baseline 状态、分组和 ECMAScript 快照。 |
browsercompat_get_feature | 查询单项功能的完整兼容性记录:Baseline 状态、标准状态、各浏览器版本及其标志和前缀,以及 MDN 和规范链接。 |
browsercompat_check_baseline | 一次调用检查最多 20 项功能是否适合发布:返回 Baseline 状态和日期、限制性最强的浏览器、弃用标志,以及排除这些浏览器会影响的流量份额。 |
browsercompat_search_features | 当不知道规范键时,可按普通名称、关键词或代码表示查找功能;结果按匹配字段排序,可按分组或 ECMAScript 快照筛选,并支持分页。 |
browsercompat_compare_support | 根据明确指定的 browserslist 目标查询检查功能:返回整个查询的判断结果、评估后的覆盖率,以及每项功能中未通过的版本运行情况。 |
能力参考
browsercompat_list_reference 工具
- 必需的
topic:bcd_namespaces(12)、bcd_browsers(17)、browserslist_agents(19)、baseline_states(4)、groups(104)或snapshots(11)。组和快照 ID 会用于搜索筛选条件。 - 条目包含
id、label和detail,并根据具体情况包含count、reported、bcd_browser、usage_percent、maps_from或spec_url。如果某个 Agent 的bcd_browser: null,则无法评估其支持情况对比,并会将其列在unchecked_targets中。
browsercompat_get_feature 工具
- 一个
feature,长度为 1–200 个字符:BCD 键(css.selectors.has)或 web-features ID(has)。resolve: true(默认关闭)还会在名称或表示法与某个特性完全匹配时接受该输入。include_runtimes: true会添加bun、deno、nodejs和oculus的支持行。 outcome为found、no_compat_data或miss;未找到时会返回found: false和guidance,仅含空白字符的输入则会返回invalid_feature_input。每个support行都提供最新版本的说明,该浏览器的其他 BCD 说明列在other_statements中。- 像
grid这样的多键 ID 会返回feature_support(每个 Baseline 核心浏览器一行),而不返回support、status、mdn_url和spec_urls;如需获取键级别的结果,请调用其中一个compat_keys。compat_keys和subkeys每次分页 100 项,使用compat_keys_offset和subkeys_offset(默认值为 0)。limiting_browser是要求版本最新的 Baseline 核心浏览器。
browsercompat_check_baseline 工具
- BCD 键或 web-features ID,每项长度为 1–200 个字符。最多接受 100 项,按输入顺序评估前 20 项;其余项目会原样返回在
omitted_features中。超过 100 项会被拒绝,仅含空白字符的条目会返回invalid_feature_input。 - 结果包含 Baseline 状态和日期、
limiting_browser、deprecated、experimental和discouraged;如果 caniuse 涵盖该特性,还会包含usage_percent_excluded和usage_source。如果用量数据不可用,则不会提供用量信息,绝不会报告为零。 - 只有当每个条目的结果均为
widely且没有条目被省略时,all_widely_available才为 true;它不会评估弃用情况。
browsercompat_search_features 工具
query长度为 1–100 个字符,可接受名称、关键词或表示法,例如Array.prototype.at、display: grid或<dialog>。可组合使用namespace(12 个 BCD 命名空间)、baseline(widely、newly、limited、not_mapped)、group(包括嵌套组)和snapshot(例如ecmascript-2023)。matched_on说明结果排名依据,support_summary涵盖七个 Baseline 核心浏览器:Firefox 33 (flagged)、Safari 3 (prefixed)、Chrome 94 (partial)和Edge ≤18会保留所选判定及新增版本上限;—表示不支持、已移除或仅预览,?表示未知。类型化错误包括:invalid_query(没有可搜索的词元)、unknown_group、unknown_snapshot。- 使用
limit(默认值为 10,最多 50;更大的值会按 50 处理,并在cap中报告)和offset(默认值为 0)分页;totalCount和nextOffset用于控制分页。未找到结果时会成功返回,并提示可移除哪个筛选条件。
browsercompat_compare_support 工具
- 每次调用最多查询 20 个功能,并且必须提供自包含的
targetsbrowserslist 查询,例如defaults或> 0.5%, last 2 versions;不接受配置包和自定义配置,并且会禁用本地配置发现。最多接受 100 个功能,其余功能会列在omitted_features中,并使all_clear为 false。类型化错误:invalid_target_query、no_targets_resolved、invalid_feature_input。 - 每个
verdict的值为clears、fails、inconclusive、miss或ambiguous。只有在查询中的每个目标都经过评估且支持该功能时,该功能才会判定为通过;因此,像defaults这样包含没有兼容性数据的浏览器的查询,永远不会判定为通过。只有所有功能都通过时,all_clear才为 true。 - 结果会报告
support_source、failing_ranges、failing_total,以及已评估和未检查的总数与覆盖率百分比。目标行通过target_offset(默认为 0)和target_limit(默认为 10,最多为 10)分页;超过上限的值会按 10 处理,并在cap中报告。每一页的判定结果和总数相同,分页由totalCount和nextOffset驱动。
数据来源
| 包 | 版本 | 许可证 | 提供内容 |
|---|---|---|---|
@mdn/browser-compat-data | ^8.1.7 | CC0-1.0 | 各浏览器的支持情况、标准状态、MDN 和规范链接 |
web-features | ^3.44.0 | Apache-2.0 | Baseline 状态和日期、功能级核心浏览器支持情况、不建议使用的标记、分组、ECMAScript 快照 |
caniuse-lite | ^1.0.30001819 | CC-BY-4.0 | 使用率权重,以及供搜索索引使用的功能标题 |
browserslist | ^4.29.4 | MIT | 目标查询解析和覆盖率数据 |
CC BY 4.0 要求在 caniuse 数据传播到的任何地方注明来源,因此每个包含使用率数据的响应都会附带以下字符串: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. 数值为原始全球百分比,不会按已跟踪流量进行归一化。完整的许可证文本和声明见 THIRD_PARTY_NOTICES.md。
功能
基于 @cyanheads/mcp-ts-core 构建:stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可替换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及支持可选 OpenTelemetry 跟踪的结构化日志记录。
浏览器兼容性专属功能:
- 所有四个数据集都打包在程序中并在进程内加载——无需运行时网络调用、API 密钥或速率限制,也无需任何配置
- Baseline 按浏览器兼容数据键从
status.by_compat_key读取,不会从功能级别汇总,因为同一功能下的各个键可能存在差异 - 每个工具都以相同方式解析功能:先查找精确的 BCD 键,再查找 web-features id,最后查找
moved重定向 - 目标版本遵循 browser-compat-data 的发布顺序,并将 caniuse 的写法规范化(
safari 16.0↔16)
便于 Agent 使用的输出:
- 每个响应都会回显
data_version,即答案所依据的各个打包数据集的版本 - 对于未经评估的浏览器,绝不会声称其通过;没有数据的目标会列入
unchecked_targets,并使判定结果变为inconclusive - 未找到是结果,不是错误:使用
found: false并通过guidance指明下一次调用;类型化错误会附带恢复提示 - 使用率数据会说明其所占的总体范围,并附带 caniuse 来源声明
开始使用
公共托管实例
可使用公共实例:https://browser-compat.caseyjhand.com/mcp——无需安装。通过 Streamable HTTP 将任意 MCP 客户端指向该实例:
{
"mcpServers": {
"browser-compat-mcp-server": {
"type": "streamable-http",
"url": "https://browser-compat.caseyjhand.com/mcp"
}
}
}
自托管 / 本地运行
将以下内容添加到 MCP 客户端配置文件中:
{
"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"
}
}
}
}
也可以使用 npx(无需 Bun):
{
"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"
}
}
}
}
也可以使用 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"
]
}
}
}
如需使用 Streamable HTTP,请设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- 无需 API 密钥、账户或网络访问权限——所有数据集均随软件包附带。
安装
- 克隆仓库:
git clone https://github.com/cyanheads/browser-compat-mcp-server.git
- 进入目录:
cd browser-compat-mcp-server
- 安装依赖:
bun install
- 配置环境(可选):
cp .env.example .env
# edit .env if you want to override transport or logging defaults
配置
没有特定于服务的环境变量:无需 API 密钥或基础 URL,也刻意不设置 browserslist 配置变量——目标查询始终作为工具输入,而非环境状态。框架的传输、日志记录和遥测设置仍可配置。
| 变量 | 说明 | 默认值 |
|---|---|---|
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务的端口。 | 3010 |
MCP_SESSION_MODE | HTTP 会话模式。 | stateless |
OTEL_ENABLED | 启用 OpenTelemetry。 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | 跟踪和指标的基础 URL。 | 未设置 |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | OTLP 日志端点。 | 未设置 |
LOG_TOOL_FAILURE_PAYLOADS | 记录失败调用的参数和结果。脱敏仅匹配键名;自由格式的值可能保留机密信息。 | false |
LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES | 每条日志载荷的 UTF-8 字节上限。 | 16384 |
完整的可选框架覆盖项列表请参阅 .env.example。
运行服务
本地开发
# 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
Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/browser-compat-mcp-server。默认会安装 OpenTelemetry 对等依赖——构建时添加 --build-arg OTEL_ENABLED=false 可省略这些依赖。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口点——注册工具并预热数据集。 |
src/data/ | 将 browserslist 代理映射到 browser-compat-data 的映射表。 |
src/mcp-server/tools/ | 工具定义(*.tool.ts)及其共用的输出结构。 |
src/services/ | 基于随附数据集的 bcd、baseline、targets、search 和 data-version 服务。 |
src/types/ | caniuse-lite 的环境模块声明;该软件包不附带类型。 |
skills/ | 已发布的浏览器兼容性工作流指南。 |
tests/ | 与 src/ 结构对应的 Vitest 测试套件。 |
docs/ | design.md——接口、其背后的数据结构以及决策日志。 |
changelog/ | 各版本的变更日志文件。 |
生成的文件树位于 docs/tree.md。
开发指南
开发指南和架构规则请参阅 CLAUDE.md。简要概括如下:
- 处理器抛出错误,由框架捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录请求范围内的日志,使用ctx.state存储租户范围内的数据 - 在
src/index.ts中直接注册新工具 - 数据完整性:按原样读取随附数据集并保留其不确定性;绝不编造数据中未包含的支持情况
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0——详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。