@shuji-bonji/web-compat-mcp
This server provides browser compatibility data for web platform features, letting you check, search, compare, and list support across browsers and Baseline status.
Check browser compatibility for a specific BCD feature (e.g.,
api.PushManager)Search 15,000+ web platform features by keyword and category
Compare compatibility across 2β5 features side by side
Get Baseline status (Widely Available / Newly Available / Not Baseline) for web-features identifiers
List features filtered by Baseline status and group
List all tracked browsers with current versions and release dates
Find features added in a specific browser version (e.g., CSS features in Chrome 120)
Output results as markdown or structured JSON
Works fully offline using bundled MDN BCD and W3C WebDX data
Web Compat MCP server
MCP server providing browser compatibility data for the entire Web Platform.
Answers the question: "Does this actually work in browsers?"
Uses MDN Browser Compat Data (BCD) (15,000+ features) and W3C WebDX web-features (1,000+ features with Baseline status) to provide real-world browser implementation status.
Fully offline β all data is bundled via npm packages. No API calls, zero latency.
π―π΅ ζ₯ζ¬θͺη README γ―γγ‘γ
Architecture
βββββββββββββββββββββββββββββββββββββββββββββββ
β web-compat-mcp server β
β β
β βββββββββββββββββ βββββββββββββββββββββ β
β β @mdn/browser- β β web-features β β
β β compat-data β β (W3C WebDX CG) β β
β β 15K+ featuresβ β 1K+ features β β
β β BCD JSON β β Baseline status β β
β βββββββββ¬ββββββββ ββββββββββ¬βββββββββββ β
β β cross-reference β β
β ββββββββββ¬βββββββββββ β
β β β
β ββββββββββΌβββββββββ β
β β 7 MCP Tools β β
β ββββββββββ¬βββββββββ β
β β stdio β
βββββββββββββββββββββΌββββββββββββββββββββββββββ
β
MCP Client (Claude, etc.)Related MCP server: w3c-mcp
Tools
Tool | Description |
| Check browser compatibility for a single feature (BCD dot notation) |
| Search 15,000+ BCD features by keyword |
| Get Baseline status for a web feature (web-features kebab-case) |
| List features filtered by Baseline status |
| Compare browser compatibility across 2β5 features side by side |
| List all tracked browsers with versions |
| Find features added in a specific browser version |
Identifier conventions
The two data sources use different identifier schemes, and each tool expects a specific one:
Tool | Scheme | Example |
| BCD dot notation β fine-grained, often camelCase |
|
| web-features kebab-case β coarse, feature-group |
|
| Browser id + version string |
|
BCD is fine-grained (api.PushManager, api.PushEvent, api.PushSubscription are separate entries) while web-features groups related specs into a single feature (push covers all three). When unsure of the exact identifier, run compat_search first. Input normalization handles kebab-case queries (view-transition β viewtransition) and trailing .0 versions (17.0 β 17) automatically.
Quick Start
Requires Node.js 22 or later.
npx (no install)
npx -y @shuji-bonji/web-compat-mcp@latestnpm (global)
npm install -g @shuji-bonji/web-compat-mcp
web-compat-mcpMCP Client Configuration
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"web-compat": {
"command": "npx",
"args": ["-y", "@shuji-bonji/web-compat-mcp@latest"]
}
}
}Claude Code
claude mcp add web-compat -- npx -y @shuji-bonji/web-compat-mcp@latestVS Code (Copilot / Continue)
Add to .vscode/mcp.json:
{
"servers": {
"web-compat": {
"command": "npx",
"args": ["-y", "@shuji-bonji/web-compat-mcp@latest"]
}
}
}Usage Examples
Check browser compatibility
"Is Push API supported in Safari?"
β compat_check feature: "api.PushManager"Returns version support across browsers, Baseline status, and links to MDN/spec documentation.
Search features
"Find CSS grid features"
β compat_search query: "grid" category: "css"Returns matching feature IDs with standard/experimental/deprecated flags.
Compare features
"Compare fetch vs XMLHttpRequest"
β compat_compare features: ["api.fetch", "api.XMLHttpRequest"]Returns side-by-side comparison table with version support and Baseline status.
Check Baseline status
"Is container queries Baseline?"
β compat_get_baseline feature: "container-queries"Returns Baseline level (Widely Available / Newly Available / Not Baseline), browser support, and related BCD features.
Find features by browser version
"What CSS features were added in Chrome 120?"
β compat_check_support browser: "chrome" version: "120" category: "css"Returns features added in the specified browser version.
Workflow: combining multiple tools
"I want to use Push API in my PWA β is it realistic today?"
Step 1 β compat_check feature: "api.PushManager"
# Per-API browser versions (Chrome 42+, Safari 16+, Firefox 44+)
Step 2 β compat_get_baseline feature: "push"
# Feature-group view: Newly Available since 2023-03-27
Step 3 β compat_compare features: ["api.PushManager", "api.Notification"]
# Side-by-side when your PWA depends on bothChained with a spec-oriented server such as W3C MCP or RFCXML MCP, the LLM can answer both "what does the spec require?" and "what actually works in browsers today?" in a single conversation.
Output Formats
All tools support response_format parameter:
"markdown"(default) β Human-readable tables and formatted text"json"β Structured data withstructuredContentfor programmatic use
Complementary MCP Servers
This server is designed to work alongside other MCP servers:
Server | Role | This Server's Complement |
W3C MCP | Spec definitions (MUST/SHOULD/MAY) | Real browser implementation status |
RFCXML MCP | RFC requirements | Browser-level protocol support |
css-mcp | CSS docs + code analysis | Platform-wide compat + Baseline |
Data Sources
Source | Package | Features | Update Frequency |
| 15,000+ | Weekly | |
| 1,000+ | Monthly |
Development
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test # Unit tests (94 tests)
npm run test:e2e # E2E tests via JSON-RPC (10 tests)
# Lint & format (Biome 2.x)
npm run lint # Check
npm run lint:fix # Auto-fix
npm run format # Format
# Type check (TypeScript 7)
npm run typecheckLicense
MIT β see LICENSE
Available Tools
7 toolscompat_checkCheck Browser CompatibilityARead-onlyIdempotent
Check browser compatibility for a specific web platform feature using MDN Browser Compat Data (BCD).
Returns version support across browsers, Baseline status, and links to MDN/spec documentation.
Args:
feature (string): BCD identifier in dot notation (e.g., "api.PushManager", "css.properties.grid", "javascript.builtins.Promise")
browsers (string[], optional): Filter to specific browsers (e.g., ["chrome", "safari"]). Defaults to desktop browsers.
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Browser support versions, Baseline status, standard/experimental/deprecated flags, and MDN/spec links.
Examples:
"Is Push API supported in Safari?" β feature: "api.PushManager"
"Can I use CSS grid?" β feature: "css.properties.grid"
"Is Array.at() widely available?" β feature: "javascript.builtins.Array.at"
| Name | Required | Description | Default |
|---|---|---|---|
| feature | Yes | BCD feature identifier using dot notation (e.g., "api.PushManager", "css.properties.grid", "javascript.builtins.Array.at") | |
| browsers | No | Filter to specific browsers (e.g., ["chrome", "safari", "firefox"]). Omit for default desktop browsers. | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent. The description adds comprehensive behavioral details: returns version support across browsers, Baseline status, flags (standard/experimental/deprecated), and links to MDN/spec documentation. This fully informs the agent of what the tool does beyond safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose, followed by bullet-style Args/Returns, and clear examples. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input, output, and examples adequately. While error handling or edge cases (e.g., invalid feature identifier) are not mentioned, the examples and parameter descriptions provide sufficient guidance for normal use. Annotations cover safety, so no gaps there.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with good descriptions. The description adds value with examples of BCD identifiers, default browsers behavior, and output format options, helping the agent understand parameter usage in context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks browser compatibility for a specific web platform feature using BCD, with details on input and output. However, it does not explicitly differentiate from sibling tools like compat_check_support, which might offer a simpler query for the same feature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., compat_check_support for quick yes/no, compat_compare for comparing features). The sibling list is available context, but the description does not reference them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compat_check_supportCheck Browser Version SupportARead-onlyIdempotent
Find web platform features that were added in a specific browser version.
Useful for understanding what new capabilities became available in a particular browser release.
Args:
browser (string): Browser identifier (e.g., "safari", "chrome", "firefox")
version (string): Browser version (e.g., "17.0", "120", "121")
category (string, optional): Filter by BCD category (e.g., "api", "css")
limit (number): Max results (default: 20, max: 100)
offset (number): Pagination offset (default: 0)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: List of features added in the specified browser version.
Examples:
"What was added in Safari 17.0?" β browser: "safari", version: "17.0"
"New CSS features in Chrome 120" β browser: "chrome", version: "120", category: "css"
"Firefox 121 API additions" β browser: "firefox", version: "121", category: "api"
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1-100, default: 20) | |
| offset | No | Number of results to skip for pagination (default: 0) | |
| browser | Yes | Browser identifier (e.g., "safari", "chrome", "firefox") | |
| version | Yes | Browser version (e.g., "17.0", "120", "121") | |
| category | No | Filter by BCD category (e.g., "api", "css") | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds that it lists features from a specific version with no side effects. No mention of pagination or rate limits, but adequate given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with summary, usage statement, parameter list with args, return description, and multiple examples. No wasted words; each section adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a query tool with no output schema, description adequately explains returns as 'List of features' and provides examples. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 6 parameters (100% coverage), and description adds examples and additional context (defaults, usage patterns) for each parameter, enhancing understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find web platform features that were added in a specific browser version.' with specific verb 'Find' and resource 'web platform features', distinguishing it from siblings like compat_compare and compat_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides use case context ('Useful for understanding what new capabilities became available in a particular browser release') and examples for typical queries, but lacks explicit when-not-to-use or direct sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compat_compareCompare Browser CompatibilityARead-onlyIdempotent
Compare browser compatibility across multiple web platform features side by side.
Useful for choosing between alternative APIs or understanding support differences.
Args:
features (string[]): 2-5 BCD feature identifiers to compare (e.g., ["api.fetch", "api.XMLHttpRequest"])
browsers (string[], optional): Filter to specific browsers. Omit for default desktop browsers.
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Side-by-side comparison table showing version support for each feature across browsers.
Examples:
Compare fetch vs XMLHttpRequest β features: ["api.fetch", "api.XMLHttpRequest"]
Compare CSS layout methods β features: ["css.properties.grid", "css.properties.flex"]
Compare storage APIs β features: ["api.localStorage", "api.sessionStorage", "api.IndexedDB"]
| Name | Required | Description | Default |
|---|---|---|---|
| browsers | No | Filter to specific browsers (e.g., ["chrome", "safari"]). Omit for default desktop browsers. | |
| features | Yes | Array of BCD feature identifiers to compare (e.g., ["api.fetch", "api.XMLHttpRequest"]) | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the agent knows it's safe. The description adds that it returns a side-by-side comparison table and supports markdown/json output, plus constraints like 2-5 features. This provides useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: a one-liner, usage context, arguments, returns, and examples. It is reasonably concise without wasted words, though the examples could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity (3 params, no output schema), the description covers inputs, output format, usage context, and provides concrete examples. It does not detail the return structure beyond 'comparison table', but the examples and format options (markdown/json) are sufficient for an agent to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds extra semantic value with practical examples (e.g., 'api.fetch') and clarifies constraints (minItems 2, maxItems 5) and the default for response_format. This elevates the score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares browser compatibility across multiple features side by side. The verb 'compare' and resource 'browser compatibility' are specific, and the tool is distinguished from siblings like compat_check which likely handles single features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Useful for choosing between alternative APIs or understanding support differences.' This tells the agent when to use it. Examples further illustrate typical use cases. However, it does not explicitly state when not to use it or directly name alternatives, though siblings are listed separately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compat_get_baselineGet Baseline StatusARead-onlyIdempotent
Get the Baseline status for a web platform feature from W3C WebDX web-features data.
Baseline indicates whether a feature is supported across all major browsers:
"high" (Widely Available): Supported for 30+ months across all core browsers
"low" (Newly Available): Recently became interoperable across all core browsers
false (Not Baseline): Not yet supported across all core browsers
Args:
feature (string): web-features identifier in kebab-case (e.g., "container-queries", "push", "view-transitions")
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Baseline status, browser support versions, related BCD features, and spec links.
Examples:
"Is container queries Baseline?" β feature: "container-queries"
"Is the Push API widely available?" β feature: "push"
"Check View Transitions baseline" β feature: "view-transitions"
| Name | Required | Description | Default |
|---|---|---|---|
| feature | Yes | web-features identifier using kebab-case (e.g., "container-queries", "push", "view-transitions") | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds the meaning of baseline levels (high, low, false) and the returned data (browser support versions, related BCD features, spec links), providing valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: first sentence states purpose, then explains baseline levels, followed by Args, Returns, and Examples. It is concise yet comprehensive without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explicitly lists return values (Baseline status, browser support, etc.). It fully addresses the tool's functionality given its simplicity and the presence of sibling tools for alternative queries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. The description adds value by explaining feature identifier format (kebab-case), detailing response_format options with default, and providing concrete examples that clarify parameter usage beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets Baseline status for a web platform feature from W3C WebDX web-features data. It distinguishes from siblings like compat_check and compat_list_baseline by focusing specifically on a single feature's baseline level.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and explains the output format, but does not explicitly state when not to use this tool versus alternatives like compat_check or compat_list_baseline. However, the examples give clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compat_list_baselineList Features by Baseline StatusARead-onlyIdempotent
List web platform features filtered by their Baseline status.
Use this to discover which features are Widely Available, Newly Available, or not yet Baseline.
Args:
status (string, optional): Filter by "high" (Widely Available), "low" (Newly Available), or "false" (Not Baseline)
group (string, optional): Filter by feature group (e.g., "css", "javascript", "forms")
limit (number): Max results (default: 20, max: 100)
offset (number): Pagination offset (default: 0)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Paginated list of features with their Baseline status and availability dates.
Examples:
"List all Widely Available features" β status: "high"
"What CSS features are Newly Available?" β status: "low", group: "css"
"What features aren't Baseline yet?" β status: "false"
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Filter by web-features group (e.g., "css", "javascript", "forms") | |
| limit | No | Maximum number of results to return (1-100, default: 20) | |
| offset | No | Number of results to skip for pagination (default: 0) | |
| status | No | Filter by Baseline status: "high" (Widely Available), "low" (Newly Available), "false" (Not Baseline) | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context such as pagination defaults (limit, offset) and output format options (markdown/json), which are beyond what annotations provide. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (list function, Args, Returns, Examples). It is concise, with no fluff, and every sentence provides necessary information. The examples are particularly helpful for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and a clear purpose, the description covers all necessary aspects: parameters, defaults, return structure (paginated list with status and dates), and examples. It could mention that results are sorted or other details but is sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining each parameter's purpose, enumerating values for status and response_format, and specifying defaults and constraints (e.g., limit range, offset behavior). This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists web platform features filtered by Baseline status, using specific verbs and resource. It distinguishes from sibling tools like compat_check and compat_search by focusing on listing and filtering by status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use the tool (discover features by Baseline status) and includes multiple examples covering different use cases. However, it does not explicitly mention when not to use it or provide direct alternatives among sibling tools, though the use case is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compat_list_browsersList Tracked BrowsersARead-onlyIdempotent
List all browsers tracked in MDN Browser Compat Data with their current versions and release dates.
Args:
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: List of browsers with id, name, type (desktop/mobile/server), current version, and release date.
Examples:
"What browsers are tracked?" β no params needed
"List all browser versions" β no params needed
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds behavioral context by specifying the output structure (list of browsers with fields) and the response_format parameter. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear structure: one-line purpose, Args section, Returns section, and examples. Every sentence adds value without redundancy. Front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully covers the return format by listing fields (id, name, type, version, release date) and provides usage examples. The single optional parameter is well-documented. Adequate for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with detailed descriptions (e.g., 'Output format: markdown for human-readable or json for structured data'). The description only adds the default value and example usage, providing marginal additional value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'browsers', specifies scope 'all', and lists the returned fields (current versions, release dates). It distinguishes from sibling tools like compat_check (which checks support) and compat_list_baseline (which lists baselines).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples like 'What browsers are tracked?' and 'List all browser versions' that imply appropriate use cases. However, it does not explicitly state when to avoid this tool or mention alternatives like compat_search for filtered queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compat_searchSearch Web Platform FeaturesARead-onlyIdempotent
Search BCD (Browser Compat Data) features by keyword. Use this to find the correct BCD identifier for compat_check.
Searches across 15,000+ web platform features including APIs, CSS properties, HTML elements, JavaScript built-ins, and more.
Args:
query (string): Search keyword (e.g., "push", "grid", "service-worker", "fetch")
category (string, optional): Filter by category ("api", "css", "html", "javascript", "svg", etc.)
limit (number): Max results (default: 20, max: 100)
offset (number): Pagination offset (default: 0)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: List of matching feature IDs with standard/experimental/deprecated status.
Examples:
"Find Push API features" β query: "push", category: "api"
"Find CSS grid features" β query: "grid", category: "css"
"Find all service worker APIs" β query: "serviceworker", category: "api"
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1-100, default: 20) | |
| query | Yes | Search keyword to match against feature identifiers (e.g., "push", "grid", "service-worker") | |
| offset | No | Number of results to skip for pagination (default: 0) | |
| category | No | Filter by BCD category (e.g., "api", "css", "html", "javascript") | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, idempotent, non-destructive. Description adds that it searches 15k+ features and returns status flags, plus pagination details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized: purpose first, then args, examples. Each sentence serves a purpose, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all 5 parameters, return type with status, pagination, and examples. No output schema but description adequately explains results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description reinforces each parameter with examples and context, adding value beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches BCD features by keyword to find identifiers for compat_check. Differentiates from sibling tools like compat_check by specifying its role in finding identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (find BCD identifier for compat_check). Does not list exclusions but context implies it's for searching, not checking support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.4- First observed
compat_check - First observed
compat_check_support - First observed
compat_compare - First observed
compat_get_baseline - First observed
compat_list_baseline - First observed
compat_list_browsers - First observed
compat_search
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: checking a feature's compatibility, finding features by version, comparing features across features, getting Baseline status, listing features by Baseline status, listing browsers, and searching for features. No ambiguity.
All tools follow a consistent 'compat_<verb>' or 'compat_<verb>_<noun>' pattern in snake_case. Names like compat_check, compat_search, compat_compare are predictable and descriptive.
Seven tools is well-scoped for a web compatibility server. It covers all essential query operations without being bloated or too sparse.
The tool set covers the full query lifecycle: discovery (search, list baselines), single feature lookup (check, get baseline), comparison, and version-specific queries. No major gaps for the stated purpose.
Maintenance
Related MCP Connectors
W3C MCP β web-standards lookup over w3c/browser-specs (GitHub, CF-reachable).
Independent MCP server for the TC39 specs (ECMA-262 + ECMA-402): clauses, search, diffs, history.
caniuse MCP β browser feature support tables
MCP server for Product Management
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server that checks the Baseline status using Web Platform APIs.37MIT
- AlicenseAqualityBmaintenanceMCP Server for accessing W3C/WHATWG/IETF web specifications. Provides AI assistants with access to official web standards data including specifications, WebIDL definitions, CSS properties, and HTML elements.11363 npm4MIT
- FlicenseBqualityDmaintenanceAn MCP server that queries the baseline status of web platform features using data from webstatus.dev. It provides tools to get feature baseline status and a summary of baseline categories.21-
- AlicenseNot gradedqualityCmaintenanceMCP server for exploring the ECMAScript specification and its implementation, enabling semantic search of spec sections, JavaScript execution in engine262, and access to a knowledge graph linking spec sections to implementation functions.8 npmISC