跳到正文

让你的网站​智能体就绪。

AI 智能体已经在读你的网页。先看看它们读到了什么,再用一行代码给它们真正的工具。

8,500+ 个网站已经用上 WebMCP。

点击任意一个,实时扫描。

数量:webmcp.com 目录中的在线网站(2026-11-05)。更严格的 Known Good 索引 实际运行了这些页面,确认有 541 个网站注册了工具(2026-11-04)。Logo 于 2026-11-07 经扫描器核验;Logo 归各自所有者所有,与本项目无关联。

为什么用 WebMCP?

给智能体契约,而不是截图。

WebMCP 让页面把带类型的工具交给 AI 智能体,工具就在用户自己的标签页里运行。下面是它带来的改变,证据最强的排在最前。

  1. 智能体能把事办完

    现在

    在真实网站上,测试中表现最好的智能体也有约 4 成任务失败,大多卡在筛选、排序和导航上。

    用上 WebMCP

    智能体调用工具、传入带类型的参数,不用再猜哪个按钮是干什么的。

    来源 Online-Mind2Web, 2025 WindTunnel (nekuda) 我们的基准测试

  2. 只花一小部分 token

    现在

    一次页面快照就要 12k 到 77k token,而智能体每一步都要重新发送一遍。

    用上 WebMCP

    一次调用只返回所需的数据:在我们的基准测试中,Cloudflare 上的 token 最多少用 97×(最佳情况)。

    来源 快照成本实测 我们的基准测试

  3. 秒级,而不是分钟级

    现在

    看、想、点,再来一遍:在高难度的真实任务上,智能体最长跑了 44 分钟。

    用上 WebMCP

    一次调用替代一连串点击:在 WindTunnel 的基准测试中,中位耗时快 3.4 倍。

    来源 Online-Mind2Web, 2025 WindTunnel (nekuda)

  4. 无需新服务器,无需 OAuth。

    现在

    给智能体开放 API,通常意味着单独的后端、重复的状态和一套鉴权流程。

    用上 WebMCP

    工具就是你的前端代码,沿用用户已有的会话运行。Shopify 就是这样上线的。

    来源 WebMCP 说明文档 Shopify Cloudflare

  5. 用户始终知情、可控

    现在

    智能体在用户看不见的地方操作,或者把用户带去别处。

    用上 WebMCP

    智能体就在用户眼前的页面上工作,工具还能标记哪些操作需要用户确认。

    来源 WebMCP 草案 Shopify 结账

  6. 同一个购物车,同一张表单

    现在

    后端 API 看不到用户标签页里打开的购物车、表单或选中项。

    用上 WebMCP

    工具直接作用于用户看到的状态,智能体一边操作,页面一边更新。

    来源 Shopify

  7. 智能体能做什么,你说了算

    现在

    能读页面的智能体,用户能点的它都能点。

    用上 WebMCP

    开放哪些操作、接受什么输入、怎么校验,都由你来定。

    来源 WebMCP 草案

  8. 接入很轻,忽略也无害

    现在

    让网站支持智能体,听上去像个大工程。

    用上 WebMCP

    注册几个工具就够了。不支持 WebMCP 的浏览器会直接跳过,一个响应头就能把它们关掉。

    来源 WebMCP 草案

WebMCP 是 W3C 社区组草案(2026 年 11 月 2 日),不是 W3C 标准,目前处于 Chrome 源试用(origin trial)阶段。注解是网站自行声明的提示,不是保证。

基准测试

同一个智能体,同一个问题。

一个智能体靠页面快照来读、点、填;另一个调用网站的 WebMCP 工具。选一个模型看看,节省最多的排在最前。

GPT-6 Luna(OpenAI)

精选案例:35 个问题中的 21 个,即 WebMCP 的 token 用量不超过一半的问题。全部结果均已公开,你也可以用 just bench 自己跑一遍。

Cloudflare

“How many requests per day can my Workers handle on the Cloudflare Workers Free plan before hitting the limit?”

打开 (打开 Cloudflare)
不用 WebMCP

113k

token

13.1s · 10.0 步 · 每千次 $4.45

解决 3/3

97× token 更少

用 webmcpx

1.2k

token

3.8s · 2.0 步 · 每千次 $0.15

解决 3/3
Token(按问题统计,每次运行的 token 数):越低越好。另附各组成功率。
问题不用 WebMCP:token用 webmcpx:token不用 WebMCP:解决情况用 webmcpx:解决情况
Cloudflare:How many requests per day can my Workers handle on the Cloudflare Workers Free plan before hitting the limit?113k1.2k100%100%
Cloudflare:I'm on the Workers Paid plan. What's the maximum size a single Cloudflare D1 database can grow to?22k1.0k100%100%
Cloudflare:What is the maximum size of a single value stored in Cloudflare Workers KV?21k1.0k100%100%
Cloudflare:How long can a key be in Cloudflare Workers KV? I want to know the maximum key size.21k1.5k100%100%
Cloudflare:What is the largest message I can send to a Cloudflare Queue? I need the per-message size limit.21k2.8k100%100%
耗时(按问题统计,每次运行的秒数):越低越好。另附各组成功率。
问题不用 WebMCP:耗时用 webmcpx:耗时不用 WebMCP:解决情况用 webmcpx:解决情况
Cloudflare:How many requests per day can my Workers handle on the Cloudflare Workers Free plan before hitting the limit?13.1s3.8s100%100%
Cloudflare:I'm on the Workers Paid plan. What's the maximum size a single Cloudflare D1 database can grow to?6.8s4.7s100%100%
Cloudflare:What is the maximum size of a single value stored in Cloudflare Workers KV?7.0s3.5s100%100%
Cloudflare:How long can a key be in Cloudflare Workers KV? I want to know the maximum key size.6.4s4.9s100%100%
Cloudflare:What is the largest message I can send to a Cloudflare Queue? I need the per-message size limit.6.4s9.2s100%100%
步数(按问题统计,每次运行的模型轮次):越低越好。另附各组成功率。
问题不用 WebMCP:步数用 webmcpx:步数不用 WebMCP:解决情况用 webmcpx:解决情况
Cloudflare:How many requests per day can my Workers handle on the Cloudflare Workers Free plan before hitting the limit?10.02.0100%100%
Cloudflare:I'm on the Workers Paid plan. What's the maximum size a single Cloudflare D1 database can grow to?6.02.0100%100%
Cloudflare:What is the maximum size of a single value stored in Cloudflare Workers KV?6.02.0100%100%
Cloudflare:How long can a key be in Cloudflare Workers KV? I want to know the maximum key size.6.02.3100%100%
Cloudflare:What is the largest message I can send to a Cloudflare Queue? I need the per-message size limit.6.03.7100%100%
成本(按问题统计,每 1,000 次运行的美元数):越低越好。另附各组成功率。
问题不用 WebMCP:成本用 webmcpx:成本不用 WebMCP:解决情况用 webmcpx:解决情况
Cloudflare:How many requests per day can my Workers handle on the Cloudflare Workers Free plan before hitting the limit?$4.45$0.15100%100%
Cloudflare:I'm on the Workers Paid plan. What's the maximum size a single Cloudflare D1 database can grow to?$0.94$0.12100%100%
Cloudflare:What is the maximum size of a single value stored in Cloudflare Workers KV?$0.80$0.12100%100%
Cloudflare:How long can a key be in Cloudflare Workers KV? I want to know the maximum key size.$0.81$0.20100%100%
Cloudflare:What is the largest message I can send to a Cloudflare Queue? I need the per-message size limit.$0.86$0.32100%100%

Cloudflare 注册的 2 个 WebMCP 工具

智能体当时看到的版本 · 2026-11-07

工具描述已调用
search

Full-text search across Cloudflare developer documentation. Returns matching pages with titles, URLs, and content snippets. Use this to find documentation on any Cloudflare product or feature.

search({"query":"Workers Free plan requests per day limit 100,000 requests daily"})

search({"query":"D1 maximum database size Workers Paid plan single database"})

search({"query":"Cloudflare Workers KV maximum size of a single value"})

search({"query":"Cloudflare Workers KV maximum key size limit key length 512 bytes"})

search({"query":"Cloudflare Queues per-message size limit maximum message size","limit":5})

search({"query":"site:developers.cloudflare.com/queues/platform/limits/ message size 128 KB per message Cloudflare Queues","limit":5})

search({"query":"Queues Limits \"Message size\" Cloudflare 128 KB","limit":10})

search({"query":"\"Message size\" \"Queues\" \"128 KB\" Cloudflare","limit":5})

已调用
list-directories

Returns a list of all Cloudflare products available in the developer documentation, including each product's name, docs URL, short description, and category group. Use this to discover what products exist before searching or navigating.

–未调用
  • gpt-6-luna,推理强度 medium,无头 Chrome。两组使用相同的提示词和步数上限;每个问题每组运行 3 次。
  • 不用 WebMCP:基于 DOM 快照的智能体,靠读、点、填完成操作。
  • 用 webmcpx:只能使用页面注册的工具。
  • 按答案中的事实和页面状态评分,不用 LLM 当评委。
  • 真实网站:自带 WebMCP 工具。
复现步骤
git clone https://github.com/webmcpx/webmcpx
cd webmcpx && just setup
OPENAI_API_KEY=sk-... just bench

Notion

“I'm writing long paragraphs into a Notion page through the API. What's the maximum number of characters a single rich text object's text content can have in a request?”

打开 (打开 Notion)
不用 WebMCP

64k

token

14.0s · 10.7 步 · 每千次 $2.37

解决 3/3

61× token 更少

用 webmcpx

1.0k

token

3.0s · 2.0 步 · 每千次 $0.13

解决 3/3
Token(按问题统计,每次运行的 token 数):越低越好。另附各组成功率。
问题不用 WebMCP:token用 webmcpx:token不用 WebMCP:解决情况用 webmcpx:解决情况
Notion:I'm writing long paragraphs into a Notion page through the API. What's the maximum number of characters a single rich text object's text content can have in a request?64k1.0k100%100%
Notion:How many requests per minute does the Notion API allow per connection on plans other than Business and Enterprise?57k1.1k33%100%
Notion:When my Notion integration sends too many requests, what error code string does the API put in the error response body?38k1.0k100%100%
Notion:I'm paginating through results from the Notion API. What's the largest page_size I can request per call on the list endpoints?37k1.1k67%100%
耗时(按问题统计,每次运行的秒数):越低越好。另附各组成功率。
问题不用 WebMCP:耗时用 webmcpx:耗时不用 WebMCP:解决情况用 webmcpx:解决情况
Notion:I'm writing long paragraphs into a Notion page through the API. What's the maximum number of characters a single rich text object's text content can have in a request?14.0s3.0s100%100%
Notion:How many requests per minute does the Notion API allow per connection on plans other than Business and Enterprise?17.3s3.1s33%100%
Notion:When my Notion integration sends too many requests, what error code string does the API put in the error response body?12.2s2.6s100%100%
Notion:I'm paginating through results from the Notion API. What's the largest page_size I can request per call on the list endpoints?11.1s3.0s67%100%
步数(按问题统计,每次运行的模型轮次):越低越好。另附各组成功率。
问题不用 WebMCP:步数用 webmcpx:步数不用 WebMCP:解决情况用 webmcpx:解决情况
Notion:I'm writing long paragraphs into a Notion page through the API. What's the maximum number of characters a single rich text object's text content can have in a request?10.72.0100%100%
Notion:How many requests per minute does the Notion API allow per connection on plans other than Business and Enterprise?11.72.033%100%
Notion:When my Notion integration sends too many requests, what error code string does the API put in the error response body?9.32.0100%100%
Notion:I'm paginating through results from the Notion API. What's the largest page_size I can request per call on the list endpoints?9.32.067%100%
成本(按问题统计,每 1,000 次运行的美元数):越低越好。另附各组成功率。
问题不用 WebMCP:成本用 webmcpx:成本不用 WebMCP:解决情况用 webmcpx:解决情况
Notion:I'm writing long paragraphs into a Notion page through the API. What's the maximum number of characters a single rich text object's text content can have in a request?$2.37$0.13100%100%
Notion:How many requests per minute does the Notion API allow per connection on plans other than Business and Enterprise?$1.79$0.1333%100%
Notion:When my Notion integration sends too many requests, what error code string does the API put in the error response body?$1.32$0.12100%100%
Notion:I'm paginating through results from the Notion API. What's the largest page_size I can request per call on the list endpoints?$1.13$0.1367%100%

Notion 注册的 5 个 WebMCP 工具

智能体当时看到的版本 · 2026-11-07

工具描述已调用
search_docs

Search the Notion Docs documentation for relevant pages and content.

search_docs({"query":"maximum number characters single rich text object text content request API rich_text 2000"})

search_docs({"query":"requests per minute per connection plans other than Business Enterprise Notion API rate limit"})

search_docs({"query":"too many requests error response body error code string rate limit"})

search_docs({"query":"largest page_size request per call list endpoints pagination maximum 100"})

已调用
get_site_overview

Get an outline of the Notion Docs documentation, grouped by section, with a short description of each page. May be truncated for large sites; use search_docs to find pages not listed.

–未调用
navigate_page

Navigate the current browser tab to a Notion Docs documentation page.

–未调用
read_page

Read the full content of a Notion Docs documentation page as markdown.

–未调用
read_skill

Read a Notion Docs agent skill document by name.

–未调用
  • gpt-6-luna,推理强度 medium,无头 Chrome。两组使用相同的提示词和步数上限;每个问题每组运行 3 次。
  • 不用 WebMCP:基于 DOM 快照的智能体,靠读、点、填完成操作。
  • 用 webmcpx:只能使用页面注册的工具。
  • 按答案中的事实和页面状态评分,不用 LLM 当评委。
  • 真实网站:自带 WebMCP 工具。
复现步骤
git clone https://github.com/webmcpx/webmcpx
cd webmcpx && just setup
OPENAI_API_KEY=sk-... just bench

specification.website

“How long should a page's meta description be, according to this spec?”

打开 (打开 specification.website)
不用 WebMCP

43k

token

13.2s · 11.3 步 · 每千次 $1.39

解决 3/3

11× token 更少

用 webmcpx

4.0k

token

3.5s · 3.0 步 · 每千次 $0.39

解决 3/3
Token(按问题统计,每次运行的 token 数):越低越好。另附各组成功率。
问题不用 WebMCP:token用 webmcpx:token不用 WebMCP:解决情况用 webmcpx:解决情况
specification.website:How long should a page's meta description be, according to this spec?43k4.0k100%100%
specification.website:What's the minimum tap target size this spec requires for buttons and other interactive controls?41k4.4k67%100%
specification.website:What max-age should I put in my HSTS header for production, per this spec?18k3.7k100%100%
specification.website:What INP value does this spec set as the target for good responsiveness?13k3.3k100%100%
specification.website:What minimum contrast ratio does this site's spec require for normal-size body text?13k3.9k100%100%
耗时(按问题统计,每次运行的秒数):越低越好。另附各组成功率。
问题不用 WebMCP:耗时用 webmcpx:耗时不用 WebMCP:解决情况用 webmcpx:解决情况
specification.website:How long should a page's meta description be, according to this spec?13.2s3.5s100%100%
specification.website:What's the minimum tap target size this spec requires for buttons and other interactive controls?13.1s3.5s67%100%
specification.website:What max-age should I put in my HSTS header for production, per this spec?8.0s3.9s100%100%
specification.website:What INP value does this spec set as the target for good responsiveness?7.2s3.0s100%100%
specification.website:What minimum contrast ratio does this site's spec require for normal-size body text?5.9s3.7s100%100%
步数(按问题统计,每次运行的模型轮次):越低越好。另附各组成功率。
问题不用 WebMCP:步数用 webmcpx:步数不用 WebMCP:解决情况用 webmcpx:解决情况
specification.website:How long should a page's meta description be, according to this spec?11.33.0100%100%
specification.website:What's the minimum tap target size this spec requires for buttons and other interactive controls?10.33.067%100%
specification.website:What max-age should I put in my HSTS header for production, per this spec?6.73.0100%100%
specification.website:What INP value does this spec set as the target for good responsiveness?6.02.7100%100%
specification.website:What minimum contrast ratio does this site's spec require for normal-size body text?6.03.0100%100%
成本(按问题统计,每 1,000 次运行的美元数):越低越好。另附各组成功率。
问题不用 WebMCP:成本用 webmcpx:成本不用 WebMCP:解决情况用 webmcpx:解决情况
specification.website:How long should a page's meta description be, according to this spec?$1.39$0.39100%100%
specification.website:What's the minimum tap target size this spec requires for buttons and other interactive controls?$1.34$0.3567%100%
specification.website:What max-age should I put in my HSTS header for production, per this spec?$0.76$0.31100%100%
specification.website:What INP value does this spec set as the target for good responsiveness?$0.59$0.29100%100%
specification.website:What minimum contrast ratio does this site's spec require for normal-size body text?$0.59$0.30100%100%

specification.website 注册的 5 个 WebMCP 工具

智能体当时看到的版本 · 2026-11-07

工具描述已调用
search_spec

Search The Website Specification for matching topics. Returns ranked results with title, status, category, canonical URL, and a one-line summary. Use this when the user asks about a topic by keyword (e.g. "CSP", "alt text", "llms.txt").

search_spec({"query":"meta description recommended length characters"})

search_spec({"query":"minimum tap target size interactive controls buttons"})

search_spec({"query":"HSTS max-age production"})

search_spec({"query":"INP target good responsiveness value","limit":5})

search_spec({"query":"minimum contrast ratio normal-size body text WCAG"})

已调用
get_topic

Fetch the Markdown for one spec page by its slug, returned as lines you can page through. Use this after search_spec or list_topics to read the canonical guidance.

get_topic({"slug":"meta-description"})

get_topic({"slug":"touch-target-size"})

get_topic({"slug":"hsts","limit":200})

get_topic({"slug":"color-contrast"})

已调用
list_topics

List spec topics, optionally filtered by category and/or status. Returns title, status, category, summary, and URL per topic. Use this when the user wants the canonical list (e.g. "all required SEO topics"). Results are paged — follow page/page_size to walk the whole list.

–未调用
open_checklist

Navigate the user to the full spec checklist page. Optionally jumps to a category section via URL hash. UI action — does not return data.

–未调用
open_search

Open the on-page ⌘K search overlay so the user can search the spec interactively. Optionally pre-fills a query. UI action — does not return results; use search_spec for that.

–未调用
  • gpt-6-luna,推理强度 medium,无头 Chrome。两组使用相同的提示词和步数上限;每个问题每组运行 3 次。
  • 不用 WebMCP:基于 DOM 快照的智能体,靠读、点、填完成操作。
  • 用 webmcpx:只能使用页面注册的工具。
  • 按答案中的事实和页面状态评分,不用 LLM 当评委。
  • 真实网站:自带 WebMCP 工具。
复现步骤
git clone https://github.com/webmcpx/webmcpx
cd webmcpx && just setup
OPENAI_API_KEY=sk-... just bench

Kiln & Co

“Add one Stoneware Teapot and one Speckled Bowl to my cart, then tell me the cart total.”

不用 WebMCP

12k

token

7.7s · 6.0 步 · 每千次 $0.45

解决 3/3

6.0× token 更少

用 webmcpx

2.1k

token

3.9s · 3.7 步 · 每千次 $0.26

解决 3/3
Token(按问题统计,每次运行的 token 数):越低越好。另附各组成功率。
问题不用 WebMCP:token用 webmcpx:token不用 WebMCP:解决情况用 webmcpx:解决情况
Kiln & Co(本地测试网站):Add one Stoneware Teapot and one Speckled Bowl to my cart, then tell me the cart total.12k2.1k100%100%
Kiln & Co(本地测试网站):I need a green gift under $30 that I can buy right now. What do you have?5.7k1.1k100%100%
Kiln & Co(本地测试网站):Add two of the cheapest blue mug to my cart.5.4k1.6k100%100%
Kiln & Co(本地测试网站):Put the most expensive teapot you sell in my cart.4.8k1.5k100%100%
耗时(按问题统计,每次运行的秒数):越低越好。另附各组成功率。
问题不用 WebMCP:耗时用 webmcpx:耗时不用 WebMCP:解决情况用 webmcpx:解决情况
Kiln & Co(本地测试网站):Add one Stoneware Teapot and one Speckled Bowl to my cart, then tell me the cart total.7.7s3.9s100%100%
Kiln & Co(本地测试网站):I need a green gift under $30 that I can buy right now. What do you have?6.6s3.3s100%100%
Kiln & Co(本地测试网站):Add two of the cheapest blue mug to my cart.5.1s3.1s100%100%
Kiln & Co(本地测试网站):Put the most expensive teapot you sell in my cart.3.9s3.2s100%100%
步数(按问题统计,每次运行的模型轮次):越低越好。另附各组成功率。
问题不用 WebMCP:步数用 webmcpx:步数不用 WebMCP:解决情况用 webmcpx:解决情况
Kiln & Co(本地测试网站):Add one Stoneware Teapot and one Speckled Bowl to my cart, then tell me the cart total.6.03.7100%100%
Kiln & Co(本地测试网站):I need a green gift under $30 that I can buy right now. What do you have?4.02.0100%100%
Kiln & Co(本地测试网站):Add two of the cheapest blue mug to my cart.4.33.0100%100%
Kiln & Co(本地测试网站):Put the most expensive teapot you sell in my cart.3.73.0100%100%
成本(按问题统计,每 1,000 次运行的美元数):越低越好。另附各组成功率。
问题不用 WebMCP:成本用 webmcpx:成本不用 WebMCP:解决情况用 webmcpx:解决情况
Kiln & Co(本地测试网站):Add one Stoneware Teapot and one Speckled Bowl to my cart, then tell me the cart total.$0.45$0.26100%100%
Kiln & Co(本地测试网站):I need a green gift under $30 that I can buy right now. What do you have?$0.39$0.19100%100%
Kiln & Co(本地测试网站):Add two of the cheapest blue mug to my cart.$0.23$0.20100%100%
Kiln & Co(本地测试网站):Put the most expensive teapot you sell in my cart.$0.25$0.17100%100%

Kiln & Co 注册的 4 个 WebMCP 工具

智能体当时看到的版本 · 2026-11-07

工具描述已调用
search_products

Search the catalog. Every filter is optional; with none, returns every product. Prices are USD.

search_products({"query":"Stoneware Teapot"})

search_products({"query":"Speckled Bowl"})

search_products({"color":"green","max_price":30,"sort":"price_asc"})

search_products({"category":"mug","color":"blue","sort":"price_asc"})

search_products({"category":"teapot","sort":"price_desc"})

已调用
add_to_cart

Add a product to the cart by sku. Adding a sku already in the cart increases its quantity.

add_to_cart({"sku":"TPT-01","quantity":1})

add_to_cart({"sku":"BWL-01","quantity":1})

add_to_cart({"sku":"MUG-03","quantity":2})

add_to_cart({"sku":"TPT-02","quantity":1})

已调用
get_cart

Return the cart: items with quantity and the total in USD.

–未调用
get_page_context

Describe the page the user is on: title, URL, language, meta description, heading outline and the text the user has selected. Use it for the page's structure or the user's selection; to find a fact on the page, call search_page instead.

–未调用
  • gpt-6-luna,推理强度 medium,无头 Chrome。两组使用相同的提示词和步数上限;每个问题每组运行 3 次。
  • 不用 WebMCP:基于 DOM 快照的智能体,靠读、点、填完成操作。
  • 用 webmcpx:只能使用页面注册的工具。
  • 按答案中的事实和页面状态评分,不用 LLM 当评委。
  • 本地测试网站:工具由 webmcpx 提供。
复现步骤
git clone https://github.com/webmcpx/webmcpx
cd webmcpx && just setup
OPENAI_API_KEY=sk-... just bench

Allbirds

“I bought my Allbirds in the US but I'm moving to London next month. Can I exchange them for another size over there?”

打开 (打开 Allbirds)
不用 WebMCP

27k

token

17.3s · 9.3 步 · 每千次 $1.13

解决 2/3

4.4× token 更少

用 webmcpx

6.0k

token

5.3s · 2.0 步 · 每千次 $0.26

解决 3/3
Token(按问题统计,每次运行的 token 数):越低越好。另附各组成功率。
问题不用 WebMCP:token用 webmcpx:token不用 WebMCP:解决情况用 webmcpx:解决情况
Allbirds:I bought my Allbirds in the US but I'm moving to London next month. Can I exchange them for another size over there?27k6.0k67%100%
耗时(按问题统计,每次运行的秒数):越低越好。另附各组成功率。
问题不用 WebMCP:耗时用 webmcpx:耗时不用 WebMCP:解决情况用 webmcpx:解决情况
Allbirds:I bought my Allbirds in the US but I'm moving to London next month. Can I exchange them for another size over there?17.3s5.3s67%100%
步数(按问题统计,每次运行的模型轮次):越低越好。另附各组成功率。
问题不用 WebMCP:步数用 webmcpx:步数不用 WebMCP:解决情况用 webmcpx:解决情况
Allbirds:I bought my Allbirds in the US but I'm moving to London next month. Can I exchange them for another size over there?9.32.067%100%
成本(按问题统计,每 1,000 次运行的美元数):越低越好。另附各组成功率。
问题不用 WebMCP:成本用 webmcpx:成本不用 WebMCP:解决情况用 webmcpx:解决情况
Allbirds:I bought my Allbirds in the US but I'm moving to London next month. Can I exchange them for another size over there?$1.13$0.2667%100%

Allbirds 注册的 12 个 WebMCP 工具

智能体当时看到的版本 · 2026-11-07

工具描述已调用
ask_business

Ask the store a question about its policies and services: returns, refunds and exchanges, shipping and delivery, privacy, terms, subscriptions, contact details and opening hours, or FAQ topics such as gift wrapping. The store answers it: from its own knowledge base when the store offers Ask, otherwise from its published policies, FAQ pages and articles. Put the shopper's question in ask.query in their own words, one question per call; name the topic when the shopper only implies it (e.g. a question about sending back a gift is a returns question). Read-only: it does not change the cart, place orders, or start returns. For products, prices and availability, use search_catalog or get_product. Examples of questions: - What is your return policy? - How long does shipping to Canada take? - What is your phone number? - What are your hours of operation? - Do you offer gift wrapping?

ask_business({"ask":{"query":"Can I exchange Allbirds bought in the US for another size in London, UK?","context":{"intent":"moving to London next month; asking about international size exchanges"}}})

已调用
browse_store

Browse OR navigate to store collections. Set navigate=true whenever the user wants to be taken to a collection page in the browser (triggers: "browse to", "go to", "show me", "open", "take me to", "navigate to" a collection or category). With navigate=false (default), returns collection or product data without changing the page — use this only when the user is asking a question about the catalog, not asking to view it. Without a collection handle, lists all collections. With a handle, returns products from that collection; use "all" to browse everything. Does NOT add anything to the cart; use create_cart or update_cart for cart changes. Prefer this over search_catalog when the user names a category, collection, or wants to explore. With navigate=true this MOVES the browser to the collection page; the tool result confirms the destination, and no further navigation is needed to show it.

–未调用
cancel_cart

Remove all items from the cart in one step. Use when the user wants to empty their cart or start over.

–未调用
create_cart

Create the shopper's cart with the given items, for a shopper whose cart has no items yet. It is the tool for a shopper asking to add or buy something when the cart is empty, and that request is all the authorization it needs. Each line item names a ProductVariant GID in item.id (variant_id from search_catalog or browse_store, or variants[].id from get_product for specific options) and a quantity; every item from one request fits in one call. When the cart already has items, nothing is created or changed: the result is that existing cart with an error message, and update_cart can extend it with its current lines plus the new ones. Returns the whole resulting cart, including its id and line ids. Repeating a call with the same items leaves the cart as it is.

–未调用
get_cart

Get the shopper's current cart: its id, every line (line id, product and variant titles, variant id, handle, URL, image, unit price, quantity, line price) and the totals. Everything needed to describe the cart to the user in natural language, without a follow-up get_product call per line. It is also where a change to an existing cart starts from: update_cart takes the cart's id and the complete set of lines the cart should hold, and create_cart applies only to a cart with no items. Works from any page.

–未调用
get_product

Get product details, OR navigate the browser to the product page. Set catalog.navigate=true whenever the user wants to see/view the product in the browser (triggers: "show me", "open", "view", "go to", "take me to", "navigate to" a product). Set catalog.navigate=false (default) only when you need data (description, options, variants, prices, availability) to answer a question or to prepare a cart change — the browser stays on the current page. Defaults to the current page's product if no catalog.id is provided. Does NOT add anything to the cart; use create_cart or update_cart for that. To view a specific variant (color/size/etc.) in the browser, use show_variant instead — it accepts partial option selections like "purple" without needing every option. To add a specific variant to the cart, call get_product with catalog.selected_options to get its variant id. With catalog.navigate=true this MOVES the browser to the product page; the tool result confirms the destination, and no further navigation is needed to show it.

–未调用
get_ucp_profile

Get this store's Universal Commerce Protocol (UCP) profile, as served at /.well-known/ucp: the UCP version, the services the store offers with their endpoints (e.g. the store's UCP MCP server), its capabilities, and its payment handlers. Use it to discover how to continue a purchase with this store over UCP, or to check which platform operates the store. Read-only; works from any page.

–未调用
manage_orders

Navigate to the customer's order history page. Use when the user asks about past orders, order status, tracking, or returns. The user will be prompted to log in if not already authenticated. This MOVES the browser to the order history page; the tool result confirms the destination, and no further navigation is needed to show it.

–未调用
proceed_to_checkout

Proceed to checkout. Verifies the cart is not empty, then MOVES the browser to the checkout page. The tool result confirms the destination, and no further navigation is needed to show it.

–未调用
search_catalog

Search the store catalog for products, collections, articles, and pages. Does NOT add anything to the cart; use create_cart or update_cart for cart changes. Each product carries variant_id, its selected or first available variant. If the user asks for a specific product variant, call get_product after search_catalog to get that variant's id, or use show_variant to display it.

–未调用
show_variant

Navigate the browser to a product page, with a specific variant OR a partial option filter selected. Use for view intents: "show me", "open", "view", "go to", "take me to" a specific product configuration. Accepts EITHER variant_id (fully specified variant) OR selected_options (partial, e.g. only Color=Purple) — with partial options the first matching available variant is picked automatically, so DO NOT ask the user for missing options when their intent is to view. Does NOT add anything to the cart; use create_cart or update_cart for cart changes. For cart operations you still need a full variant_id — call get_product with the full option combination first. This MOVES the browser to the exact variant page with the variant pre-selected; the tool result confirms the destination, and no further navigation is needed to show it.

–未调用
update_cart

Set the shopper's cart to exactly the given line items. This is a full replacement, not a patch: afterwards the cart holds these lines and only these. - A listed line with its line_items[].id keeps its place and is set to the given quantity, which is absolute (2 means 2, not 2 more). - A listed item without a line id is added, or, when that variant is already on one line of the cart, sets that line's quantity. - A line in the cart that is not listed is removed. It takes the cart's lines as most recently returned by get_cart, create_cart or update_cart. When the cart has changed since then (for example, the shopper edited it on the page, or a new cart replaced it), or an id is given that is not the shopper's current cart, nothing changes and the result is the current cart with an error message. Since the outcome depends only on the lines sent, repeating a call leaves the cart as it is. An empty line_items list empties the cart; leaving line_items out leaves the lines as they are. Returns the whole resulting cart, including its line ids, and messages about the call.

–未调用
  • gpt-6-luna,推理强度 medium,无头 Chrome。两组使用相同的提示词和步数上限;每个问题每组运行 3 次。
  • 不用 WebMCP:基于 DOM 快照的智能体,靠读、点、填完成操作。
  • 用 webmcpx:只能使用页面注册的工具。
  • 按答案中的事实和页面状态评分,不用 LLM 当评委。
  • 真实网站:自带 WebMCP 工具。
复现步骤
git clone https://github.com/webmcpx/webmcpx
cd webmcpx && just setup
OPENAI_API_KEY=sk-... just bench

Orbit docs

“Which environment variable makes Orbit read its config file from a different path?”

不用 WebMCP

2.5k

token

3.4s · 2.0 步 · 每千次 $0.15

解决 3/3

2.5× token 更少

用 webmcpx

989

token

3.4s · 2.0 步 · 每千次 $0.12

解决 3/3
Token(按问题统计,每次运行的 token 数):越低越好。另附各组成功率。
问题不用 WebMCP:token用 webmcpx:token不用 WebMCP:解决情况用 webmcpx:解决情况
Orbit docs(本地测试网站):Which environment variable makes Orbit read its config file from a different path?2.5k989100%100%
Orbit docs(本地测试网站):By default, how many past releases does Orbit keep for rollback?2.5k992100%100%
耗时(按问题统计,每次运行的秒数):越低越好。另附各组成功率。
问题不用 WebMCP:耗时用 webmcpx:耗时不用 WebMCP:解决情况用 webmcpx:解决情况
Orbit docs(本地测试网站):Which environment variable makes Orbit read its config file from a different path?3.4s3.4s100%100%
Orbit docs(本地测试网站):By default, how many past releases does Orbit keep for rollback?2.1s2.1s100%100%
步数(按问题统计,每次运行的模型轮次):越低越好。另附各组成功率。
问题不用 WebMCP:步数用 webmcpx:步数不用 WebMCP:解决情况用 webmcpx:解决情况
Orbit docs(本地测试网站):Which environment variable makes Orbit read its config file from a different path?2.02.0100%100%
Orbit docs(本地测试网站):By default, how many past releases does Orbit keep for rollback?2.02.0100%100%
成本(按问题统计,每 1,000 次运行的美元数):越低越好。另附各组成功率。
问题不用 WebMCP:成本用 webmcpx:成本不用 WebMCP:解决情况用 webmcpx:解决情况
Orbit docs(本地测试网站):Which environment variable makes Orbit read its config file from a different path?$0.15$0.12100%100%
Orbit docs(本地测试网站):By default, how many past releases does Orbit keep for rollback?$0.15$0.12100%100%

Orbit docs 注册的 3 个 WebMCP 工具

智能体当时看到的版本 · 2026-11-07

工具描述已调用
search_page

Find passages on the current page that match a query. Returns up to `limit` passages ranked by relevance, each with its section heading and a link to it. Prefer it to reading the whole page when looking for something specific.

search_page({"query":"environment variable config file path Orbit","limit":5})

search_page({"query":"past releases rollback default","limit":5})

已调用
fetch_as_markdown

Return the main content of the current page as Markdown. Long pages come in parts: when `truncated` is true, call again with `cursor` set to `next_cursor`.

–未调用
get_page_context

Describe the page the user is on: title, URL, language, meta description, heading outline and the text the user has selected. Use it for the page's structure or the user's selection; to find a fact on the page, call search_page instead.

–未调用
  • gpt-6-luna,推理强度 medium,无头 Chrome。两组使用相同的提示词和步数上限;每个问题每组运行 3 次。
  • 不用 WebMCP:基于 DOM 快照的智能体,靠读、点、填完成操作。
  • 用 webmcpx:只能使用页面注册的工具。
  • 按答案中的事实和页面状态评分,不用 LLM 当评委。
  • 本地测试网站:工具由 webmcpx 提供。
复现步骤
git clone https://github.com/webmcpx/webmcpx
cd webmcpx && just setup
OPENAI_API_KEY=sk-... just bench

WebMCP 与 MCP

工具理念相同,运行位置不同。

WebMCP 借鉴了 MCP 的工具模型,但它是浏览器 API,不是 MCP 协议。两者互为补充。

WebMCP 与 MCP 对比
维度WebMCPMCP
工具在哪运行 在页面的 JavaScript 里,在用户的标签页中。 在服务器进程里,本地(stdio)或远程。
智能体如何调用 浏览器 API document.modelContext,每次调用都经由浏览器居中处理。不用 JSON-RPC。 基于 stdio 或 Streamable HTTP 的 JSON-RPC 2.0。
你要运行什么 你现有的前端,无需新服务器。 一个由你托管和运维的 MCP 服务器。
鉴权 沿用用户已登录的会话,无需签发 token。 远程服务器使用基于 OAuth 的授权。
发现 打开页面即可发现;访问之前无从查找。 已知端点上的 tools/list,以及公开的注册表。
生命周期 页面开着多久,就存在多久。 常驻运行,不需要浏览器。
用户 在场,与智能体在同一个页面上。 可有可无:能以无头方式运行。
覆盖范围 只有工具,带输入和输出 schema。 工具、资源和提示词,外加征询(elicitation)和扩展。
工具提示 readOnlyHint、consequentialHint、untrustedContentHint。默认同源。 readOnlyHint、destructiveHint、idempotentHint、openWorldHint。
状态 W3C 社区组草案;Chrome 源试用中。 Linux 基金会旗下项目,公开服务器超过 10,000 个。

两者并用

MCP 服务于从不打开你网站的智能体;WebMCP 服务于在你的标签页里、和用户并肩工作的智能体。两者可以跑在同一个后端上:Shopify 已经这么做了。

来源 WebMCP 草案 WebMCP 说明文档 MCP 规范 Shopify 两者并用

一行代码,智能体就绪。

粘贴到 </body> 之前。浏览器不支持 WebMCP 时,它什么也不做。

index.html
<script type="module" src="https://cdn.jsdelivr.net/npm/[email protected]/src/auto.js"></script>

或者 npm i webmcpx,适用于 npm或者 npx skills add webmcpx/webmcpx,适用于 AI 编程智能体

  • search_page 找到相关段落
  • fetch_as_markdown 分页读取页面
  • get_page_context 知道自己在哪

加载约 2.7 KB · Rust + WebAssembly · MIT 许可证

来自规范议题区

社区提过的需求,已经实现。