Skip to main content
Glama

Live MCP

Cầu nối cho AI agent điều khiển trang web thuần declarative — agent hành động bằng chuột và bàn phím thật (trusted events qua CDP), không gọi JavaScript của trang.

Trạng thái

M0 ✅ · M1 ✅ · M1.5 ✅ · M2 ✅ — toàn tuyến agent → MCP → server → WebSocket → extension → CDP → DOM đã thông; form điền được đủ loại ô bằng bàn phím thật, mọi sự kiện isTrusted: true. Hub có token pairing + chặn origin web, và mọi text từ trang tới agent đi qua đúng một cửa.

Luận điểm trung tâm đã chứng minh được: agent gọi một tool → đợi → nhận tool mới sinh ra từ DOM mới → gọi tiếp, không cần biết trước gì về chúng. Xem packages/demo-site/dynamic.html. Lưới E2E: 30 bài trên Chrome thật, ba locale.

Milestone tiếp theo và thứ tự ưu tiên: docs/livemcp-roadmap.md.

Package

Vai trò

packages/protocol

Hợp đồng trung tâm: ToolDecl + message WebSocket (server ↔ extension dùng chung)

packages/server

Local Server: MCP stdio, WS hub 127.0.0.1:8787, registry tool động

packages/extension

Chrome MV3: content script quét declarative, service worker thi hành qua CDP

packages/demo-site

Trang demo đạt chuẩn, kiêm test bed — index (M0), booking (form M1), dynamic (DOM động M2)

Related MCP server: WeaveTab-MCP

Chạy thử

npm install
npm run build

1. Demo site

npm run dev:site        # http://localhost:5180

2. Local Server — chọn MỘT trong hai cách, không được cả hai

⚠️ Server giữ hub WebSocket ở cổng 8787, và extension chỉ nối vào một chỗ. Chạy npm run dev:server trong lúc agent cũng tự spawn server thì tiến trình thứ hai chết vì EADDRINUSE, và ở phía agent nó hiện ra thành một lỗi MCP không giải thích gì. Đây là cái bẫy dễ sập nhất của cả quy trình.

Cách

Khi nào dùng

Để agent tự spawn (bước 4)

dùng thật — không chạy dev:server

npm run dev:server

muốn xem log server trực tiếp — lúc này đừng đấu nối agent

3. Extensionchrome://extensions → bật Developer modeLoad unpacked → chọn packages/extension/dist.

Ghép token (một lần).

npm run token           # in token, KHÔNG mở cổng nào — chạy được kể cả khi agent đang giữ server

Bấm icon extension → dán token → Lưu & kết nối lại. Token lưu ở ~/.livemcp/token nên mọi tiến trình server đều dùng chung, ghép một lần là xong.

Không có token thì server từ chối kết nối, và đó là chủ ý: handshake WebSocket không bị CORS chặn, nên bất kỳ trang web nào bạn đang mở cũng nối được tới ws://127.0.0.1:8787 nếu hub không kiểm gì. Extension còn bị chặn thêm một lớp theo Origin — trang web không giả mạo được header đó.

Mở http://localhost:5180, mở DevTools Console, phải thấy:

[Live MCP] "LiveMCP Demo" — phát hiện 1 tool declarative.

Popup extension phải hiện chấm xanh "đã nối server". Nếu Console báo server TỪ CHỐI kết nối thì token chưa đúng — chạy npm run token và dán lại.

4. Đấu nối agent

claude mcp add livemcp -- node D:/vibeBoss/webmcp/LiveMCP/packages/server/dist/index.js --stdio

Nhớ tắt npm run dev:server trước bước này (xem cảnh báo ở bước 2) — agent tự spawn server riêng, hai bên không dùng chung cổng được.

Rồi yêu cầu agent: "gọi tool livemcp_list_sites""gọi livemcp_demo__say_hello". Nút trên trang phải thực sự bị bấm, Chrome hiện banner "đang debug", và ô kết quả ghi sự kiện thật (trusted) — đó là bằng chứng CDP hoạt động đúng.

Muốn xem vòng lặp trung tâm của chuẩn thì mở dynamic.html và bảo agent "gọi dynamicdemo__mo_danh_muc": ba tool chon_* chưa hề tồn tại trước lệnh đó, và agent nhận được tên chúng ngay trong kết quả trả về.

Banner "Live MCP is debugging this browser"cố ý, không phải lỗi: không có cách hợp lệ nào tắt nó, và nó cho user biết agent đang điều khiển trình duyệt.

Test

npm test              # unit — logic thuần, ~2s
npm run e2e:setup     # một lần: tải Chromium cho Playwright
npm run test:e2e      # E2E trên Chrome thật, ~1.6 phút

Hai tầng, phân vai rõ:

Tầng

Bắt gì

Vì sao ở đó

Unit (vitest)

logic thuần nhiều nhánh: schema, định tuyến tên tool, thứ tự segment ngày, bảng phím, cổng handshake + bộ lọc text tới agent

nhiều nhánh, sai lặng lẽ, không cần browser

E2E (Playwright)

layout, focus thật, CDP thật, locale thật, vòng đời MV3, DOM động và shadow DOM

chỉ browser thật mới thấy được lớp lỗi này

Ranh giới giữa hai tầng không phải sở thích. jsdom trả getBoundingClientRect() toàn số 0, nên mọi test layout viết trên DOM giả sẽ xanh trong khi sản phẩm hỏng — tệ hơn không có test. Browser chính là layout engine: thuê nó, đừng giả nó.

Lưới E2E chạy agent giả nói MCP thật qua đúng đường sản phẩm (agent → MCP → server → WS → extension → CDP → DOM); Playwright chỉ dựng rạp và đọc DOM để assert, không bao giờ tự click hay gõ. Chi tiết: packages/e2e/README.md.

Cố ý không viết test cho tác vụ thuần giao diện.

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • AI-powered browser automation — navigate, click, fill forms, and extract data from any website.

  • Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.

  • E2LLM gives your AI eyes and hands in a real browser: structured perception (SiFR) plus action.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ghien-dev/live-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server