← Tất cả bài viết· ~7 phút

WebMCP: cách trang web trao công cụ cho AI agent

WebMCP cho trang web đăng ký công cụ mà AI agent trong trình duyệt gọi được. Form khai báo, registerTool(), và kết quả kiểm tra 11 trang.

Tác giả: Long Nguyen — CTO, ERPFit

WebMCP: cách trang web trao công cụ cho AI agent

Câu trả lời ngắn: WebMCP cho một trang web trao cho AI agent trong trình duyệt danh sách công cụ: mỗi hành động trang làm được (tìm kiếm, đặt bàn, thêm vào giỏ) có tên, mô tả và schema đầu vào JSON. Trang đăng ký công cụ bằng JavaScript với document.modelContext.registerTool(), hoặc đánh dấu một form bằng toolname và tooldescription. Đây là bản nháp của W3C Web Machine Learning Community Group (Draft Community Group Report, ngày 20/10/2026), không phải tiêu chuẩn W3C. Chrome cho thử qua origin trial từ Chrome 149. Không có tệp khám phá: agent tìm công cụ bằng cách tải trang.

Vì sao agent cần công cụ thay vì đọc màn hình

Ngày nay một agent trong trình duyệt dùng website bằng cách đọc màn hình, đoán ô nào là ô tìm kiếm, rồi bấm. Cách đó chậm và hỏng khi bố cục đổi. Một công cụ có tên và schema là một hợp đồng: agent gọi book_table(date, time, people), trang chạy code của chính nó, trong phiên của người dùng, khi người dùng đang xem. Tài liệu Chrome mô tả WebMCP là thiết kế "chủ yếu cho quy trình trong trình duyệt, có con người tham gia". Xem thêm Agent Readiness và bài về AI crawler và JavaScript: crawler đọc trang, còn WebMCP dành cho agent làm việc trên trang.

Hai cách đăng ký một công cụ

Khai báo (declarative) — thêm thuộc tính vào form có sẵn. Cách này có trong explainer và trong Chrome, chưa có trong bản đặc tả:

<form toolname="book_table" tooldescription="Đặt bàn tại nhà hàng">
  <input name="date" type="date" toolparamdescription="Ngày đặt bàn">
  <input name="people" type="number" toolparamdescription="Số khách">
  <button>Đặt bàn</button>
</form>

Trình duyệt dựng schema từ các ô có name. Nếu ô không có toolparamdescription, trình duyệt dùng nội dung <label>, rồi đến aria-description. Không có toolautosubmit thì trình duyệt chỉ điền form; người dùng tự bấm gửi.

Mệnh lệnh (imperative) — có trong bản đặc tả:

document.modelContext.registerTool({
  name: "search_products",
  description: "Tìm sản phẩm theo từ khóa",
  inputSchema: { type: "object", properties: { q: { type: "string" } } },
  execute: async ({ q }) => runSearch(q),
}, { signal });

Các quy tắc cần nhớ:

  • Tên công cụ dài 1–128 ký tự, chỉ gồm chữ, số ASCII và _, -, .. Chrome khuyên tên không quá 30 ký tự và mô tả không quá 500 ký tự.
  • Không có hàm hủy đăng ký: hủy AbortSignal đã truyền vào. Với form, bỏ toolname hoặc tooldescription.
  • Annotation readOnlyHint, untrustedContentHint và consequentialHint cho agent biết lời gọi làm gì; consequentialHint: true để agent hoặc trình duyệt xin người dùng xác nhận.
  • Chỉ chạy trong secure context (HTTPS). Iframe khác origin cần allow="tools"; header Permissions-Policy: tools=() tắt WebMCP.
  • API xem trước tháng 2/2026 (navigator.modelContext, provideContext) đã được thay bằng document.modelContext.

Chúng tôi kiểm tra 11 trang

Ngày 25/10/2026, chúng tôi chạy bộ chấm của bản quét CiteStat (packages/core/webmcp.ts) trên 11 trang: 7 bản demo của Chrome Labs và 4 trang phổ biến. Bộ chấm đọc HTML, script inline và tối đa 5 script cùng origin; nó không chạy JavaScript.

TrangKết quảMức
Chrome Labs: french-bistro1 form tool (7/7 ô có mô tả) + registerTool trong script.jsĐạt
Chrome Labs: order-tracking, doorsForm khai báo (1 và 3 công cụ)Đạt
Chrome Labs: pizza-maker, react-flightsearch, hotel-chainregisterTool trong script cùng origin (2 trong số đó là bundle React đã nén)Đạt
Chrome Labs: coffee-shopregisterTool trong script inlineĐạt
github.com, developer.chrome.com/docs/ai/webmcpCó form người dùng điền, không form nào là công cụThấp
citestat.com/en/wiki/agent-readiness (trước khi sửa)2 form, không công cụThấp
citestat.com (trang chủ)Không có form để điền, không công cụKhông áp dụng

Điều chúng tôi thấy:

  • Chỉ các bản demo có công cụ. Ngay trang tài liệu WebMCP của Chrome cũng có một form tìm kiếm không phải là công cụ. WebMCP còn ở giai đoạn origin trial, nên điều này là bình thường — và là cơ hội cho trang nào làm trước.
  • Bundle đã nén vẫn đọc được. Trong bundle React, lời gọi trở thành e.modelContext.registerTool(; bộ chấm tìm modelContext.registerTool, không cần chữ document.
  • Công cụ đăng ký bằng script mà bản quét không đọc thì không thấy được. Kết quả luôn ghi số script đã đọc, để bạn biết giới hạn.

Hai lỗi của chính chúng tôi

Đến ngày 25/10/2026, bản quét CiteStat hỏi mọi website tệp /.well-known/web-mcp.json hoặc thẻ <meta name="web-mcp"> — hai thứ mà không tài liệu WebMCP nào định nghĩa — và tính việc thiếu chúng là một lần trượt Agent Readiness. Cả 7 bản demo Chrome Labs đều bị báo "Không hỗ trợ WebMCP". Nay bản quét tìm công cụ thật. Trang không có form và không có công cụ nhận "Không áp dụng", không bị tính vào mẫu số.

Lỗi thứ hai lộ ra ngay sau khi triển khai: bản quét trang /wiki/webmcp của chúng tôi báo "registerTool trong 1 script". Script đó là JSON-LD — phần mô tả của trang có trích tên API. JSON-LD là dữ liệu, trình duyệt không chạy nó. Nay bộ chấm chỉ đọc script mà trình duyệt chạy (không có type, MIME JavaScript, hoặc module).

Ô quét ở đầu mỗi trang wiki và blog của CiteStat nay là một công cụ khai báo thật, prefill_website_scan: agent điền địa chỉ website, trang chủ mở với ô quét đã điền, và người dùng tự bấm quét. Form dùng GET và không có toolautosubmit, vì một lần quét tốn lượt quét của người dùng.

Chủ website nên làm gì

  1. Bắt đầu với form bạn đã có. Form tìm kiếm, đặt lịch, liên hệ: thêm toolname, tooldescription và toolparamdescription cho từng ô. Đó là vài thuộc tính HTML.
  2. Đặt tên theo việc, không theo giao diện: search_products, không phải form1. Mỗi tên chỉ dùng cho một form trên trang.
  3. Để người dùng bấm với hành động có hậu quả. Không dùng toolautosubmit cho đơn hàng hay thanh toán; với registerTool, đặt consequentialHint.
  4. Không tạo tệp khám phá. Không có tệp nào để tạo; một tệp tự đặt ra chỉ làm công cụ kiểm tra hiểu sai.
  5. Thử trong Chrome với cờ chrome://flags/#enable-webmcp-testing, hoặc đăng ký origin trial.

CiteStat kiểm tra gì

Trong thẻ Agent Readiness, bản quét đọc HTML của trang tìm form có toolname và tooldescription, và đọc script inline cùng 5 script cùng origin đầu tiên tìm modelContext.registerTool(. Công cụ hợp lệ: đạt. Form có toolname nhưng thiếu mô tả hoặc tên sai: trung bình (trình duyệt sẽ không đăng ký). Chỉ có API xem trước tháng 2/2026: thấp. Có form người dùng điền nhưng không có công cụ: thấp. Không form, không công cụ: không áp dụng. Không phần nào làm đổi điểm SEO tổng. Bạn có thể quét website của mình miễn phí, 10 lần mỗi ngày; nếu bạn kiểm tra website khách hàng hằng tuần, gói Pro cho 100 lần mỗi ngày với giá 500.000₫/tháng (chưa gồm VAT) — xem bảng giá.

Câu hỏi thường gặp

Website của tôi có cần tệp WebMCP trong /.well-known/ không?

Không. Không tài liệu WebMCP nào định nghĩa tệp khám phá hay thẻ meta. Agent tìm công cụ bằng cách tải trang trong trình duyệt. Tài liệu của Chrome ghi rõ: agent phải vào trang trực tiếp mới biết trang có công cụ.

WebMCP khác gì một server MCP?

Server MCP chạy ở backend, agent kết nối từ xa và cần thông tin đăng nhập riêng. Công cụ WebMCP chạy trong chính trang web, trong phiên của người dùng, khi người dùng đang xem. Một website có thể có cả hai; server MCP từ xa được tìm qua MCP Server Card.

Agent có tự gửi form của tôi không?

Chỉ khi form có thuộc tính toolautosubmit. Nếu không có, trình duyệt điền form và người dùng tự bấm nút gửi. Với hành động có hậu quả (đặt hàng, thanh toán), nên để người dùng bấm.

WebMCP có giúp tăng thứ hạng Google không?

Tài liệu WebMCP của Chrome không nhắc đến tìm kiếm hay thứ hạng; nó nói về agent hoàn thành việc trên trang. Bản quét CiteStat chỉ tính WebMCP trong thẻ Agent Readiness; điểm SEO tổng không đổi.

Nguồn: WebMCP (W3C Web Machine Learning CG, Draft Community Group Report 20/10/2026) · WebMCP explainer · Chrome: WebMCP (cập nhật 7/10/2026) · Chrome: Declarative API (25/9/2026) · Chrome: bảo mật công cụ WebMCP (1/9/2026) · Chrome Labs: webmcp-tools. Dữ liệu 11 trang: tải ngày 25/10/2026.