Cách kích hoạt các đại lý Mastra AI với khả năng truy cập web theo thời gian thực
Lead Scraping Automation Engineer
Những điểm chính:
- Các tác nhân Mastra không thể truy cập web trực tiếp cho đến khi bạn kết nối một công cụ — MCP là cách dễ nhất để vào. Một
Agentcủa Mastra lý luận dựa trên mô hình của nó và bất kỳ công cụ nào bạn cung cấp. Hướng nó đến máy chủ Scrapeless MCP và tác nhân có được tìm kiếm Google trực tiếp, xử lý JavaScript, và một trình duyệt đám mây chống phát hiện hoàn chỉnh mà không cần viết một trình thu thập thông tin nào bằng tay. - Một
MCPClientcộng vớiawait mcp.listTools()kết nối tất cả vào nhau. Tạo mộtMCPClientvới một mục nhập máy chủscrapeless, truyềnawait mcp.listTools()vàonew Agent({ tools }), và tác nhân sẽ nhận được một trình thu thập thông tin SERP của Google, một trình thu thập thông tin Trends, các công cụ hỗ trợ HTML/Markdown/Screenshot, và 16 công cụ tự động hóa trình duyệt — tất cả đều là các công cụ TypeScript đã được gõ kiểu. - Tác nhân tìm kiếm, xử lý và điều khiển trình duyệt từ các lệnh nhắc đơn giản. Gọi
agent.generate(...)hoặcagent.stream(...)với một tác vụ bằng ngôn ngữ tự nhiên và Mastra sẽ lập kế hoạch các lời gọi công cụ Scrapeless đúng đắn từng bước một thay vì bị giới hạn ở kiến thức cũ. - Proxy dân cư và chống phát hiện được xử lý ở phía đám mây. Mỗi yêu cầu đi qua trình duyệt đám mây chống phát hiện Scrapeless với proxy dân cư ở hơn 195 quốc gia, vì vậy tác nhân nhận được phản hồi sử dụng được, đã được xử lý trên các trang thương mại mà không cần thiết lập proxy hoặc dấu vân tay trên máy của bạn.
- 21 công cụ cho SERP, thu thập thông tin không trạng thái, và tự động hóa trình duyệt. Máy chủ Scrapeless MCP cung cấp
google_search,google_trends,scrape_html/scrape_markdown/scrape_screenshot, cộng với 16 công cụbrowser_*— tên miềnscrapeless_<tool>khi Mastra tải chúng lên, một nguồn tài nguyên mà kế hoạch của tác nhân dựa vào từng lượt. - Giao thức stdio hoặc HTTP-streamable. Khởi chạy máy chủ cục bộ với
npx, hoặc hướng cùng mộtMCPClientđến điểm cuối HTTP có thể truyền tải cho các chức năng không máy chủ, công nhân từ xa và các quy trình CI. - Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm thời gian chạy Trình duyệt thu thập thông tin miễn phí — đăng ký tại app.scrapeless.com.
Giới thiệu: một tác nhân TypeScript có thể cuối cùng đọc web trực tiếp
Mastra là một framework mã nguồn mở TypeScript để xây dựng các tác nhân AI. Bạn định nghĩa một Agent với một mô hình, một tập hợp các hướng dẫn và các công cụ mà nó có thể gọi, sau đó điều khiển nó từ mã của riêng bạn với agent.generate(...) hoặc agent.stream(...). Đây là một cách sạch sẽ, an toàn về kiểu dáng để triển khai các tác nhân bên trong một ứng dụng Node hoặc không máy chủ. Những gì mà một tác nhân Mastra không thể làm một mình là nhìn thấy web trực tiếp. Kiến thức của nó dừng lại ở điểm cắt đào tạo của mô hình và bất kỳ công cụ nào bạn rõ ràng cung cấp cho nó.
Mastra rất rõ ràng về ranh giới đó: tầm với của một tác nhân đối với thế giới chính xác là tập hợp các công cụ mà bạn gắn vào. Điều đó khiến lớp công cụ trở thành nơi để thêm quyền truy cập web theo thời gian thực — và Giao thức Ngữ cảnh Mô hình (MCP) là cách tiêu chuẩn, không phụ thuộc vào framework để thực hiện điều đó. Mastra cung cấp hỗ trợ MCP hạng nhất thông qua gói @mastra/mcp, vì vậy bất kỳ máy chủ MCP nào cũng trở thành một tập hợp các công cụ Mastra gốc, đã được gõ kiểu. Cho đến khi bạn kết nối một cái, tác nhân không thể lấy SERP hiện tại, đọc trang giá cả của đối thủ cạnh tranh, kiểm tra nhật ký thay đổi mới nhất, hoặc xử lý một ứng dụng chỉ sử dụng JavaScript.
Bài viết này thu hẹp khoảng cách đó bằng cách kết nối máy chủ Scrapeless MCP vào Mastra. Một MCPClient duy nhất cung cấp cho tác nhân tìm kiếm Google, xử lý JavaScript, và một trình duyệt đám mây chống phát hiện hoàn chỉnh, tất cả đều có thể truy cập thông qua cùng những lời nhắc ngôn ngữ tự nhiên mà bạn đã truyền vào agent.generate(...). Đối với cùng một bề mặt Scrapeless thông qua một khách hàng MCP khác, xem tích hợp Pi Agent.
Bạn có thể làm gì với nó
- Nghiên cứu SERP trực tiếp từ một tác nhân TypeScript. Yêu cầu tác nhân chạy
google_searchcho một truy vấn và trả về các kết quả hàng đầu dưới dạng JSON, vì vậy nghiên cứu diễn ra bên trong ứng dụng của bạn thay vì một tab trình duyệt tách biệt. - Ảnh chụp đối thủ và giá cả. Truyền một URL trong lời nhắc và cho tác nhân xử lý trang và trích xuất tên gói, giá cả, và các tính năng vào một bản ghi có cấu trúc mà mã của bạn có thể lưu trữ.
- Tra cứu tài liệu và nhật ký thay đổi cung cấp mã. Cho tác nhân lấy tài liệu hiện tại của thư viện hoặc ghi chú phát hành dưới dạng markdown sạch sẽ và lý luận dựa trên văn bản đã xử lý thay vì một bộ nhớ cũ về API.
- Kiểm tra thị trường và xu hướng. Sử dụng
google_trendsđể lấy tín hiệu quan tâm cho một chủ đề tại một khu vực mục tiêu, sau đó gợi ý nội dung sao chép, kế hoạch nội dung, hoặc ý tưởng thí nghiệm với bằng chứng hiện tại. - Trích xuất trang JavaScript vào một bản ghi đã gõ kiểu. Định hướng tác nhân đến một ứng dụng trang đơn; trình duyệt đám mây bơm nước vào nó và tác nhân phân tích kết quả vào một đối tượng đã gõ kiểu mà quy trình làm việc của bạn tiêu thụ.
- Luồng trình duyệt đa bước. Chuỗi
browser_goto,browser_click,browser_type, vàbrowser_scrollđể tác nhân đi qua phân trang, mở rộng các bảng điều khiển, hoặc bước qua một wizard trước khi trích xuất. - Chụp ảnh màn hình để xem xét. Sử dụng
scrape_screenshothoặcbrowser_screenshotđể lấy một trang đã được hiển thị dưới dạng hình ảnh mà tác nhân có thể trả lại cho ứng dụng của bạn. - Dòng chảy tìm kiếm rồi đọc. Kết hợp
google_searchvớiscrape_markdownđể tác nhân tìm kết quả hàng đầu, đọc từng kết quả và tóm tắt chúng trong một lần phản hồi của tác nhân.
Tại sao chọn Máy chủ MCP Scrapeless
Máy chủ MCP Scrapeless là một cầu nối tùy chỉnh, chống phát hiện giữa một tác nhân AI và web trực tuyến. Đối với Mastra cụ thể, nó mang lại:
- Một trình duyệt đám mây chống phát hiện với khả năng kết xuất JavaScript. Các trang được chế biến trong một Trình duyệt Thu thập dữ liệu Scrapeless trước khi trích xuất, vì vậy các ứng dụng một trang (SPA), nguồn tin cuộn vô hạn và các bảng tải lười trở thành mục tiêu hàng đầu cho
browser_goto+browser_get_html. - Proxy dân cư tại hơn 195 quốc gia. Các truy vấn theo địa lý trả về danh sách mà một người dùng địa phương sẽ thấy, với việc xuất proxy được xử lý hoàn toàn ở phía Scrapeless.
- Một lệnh stdio qua
npx, không cần mã thu thập dữ liệu. Máy chủ khởi động như một quy trình con từnpx -y scrapeless-mcp-server; không có gì cần xây dựng, lưu trữ, hoặc nhập vào dự án của bạn ngoàiMCPClient. - 21 công cụ trải dài từ SERP, thu thập dữ liệu không trạng thái, đến tự động hóa trình duyệt hoàn toàn.
google_searchvàgoogle_trendsbao phủ dữ liệu SERP,scrape_html/scrape_markdown/scrape_screenshotbao phủ các truy cập một lần vào trang, và 16 công cụbrowser_*bao phủ điều hướng có trạng thái, nhấp chuột, gõ phím, cuộn và chụp ảnh màn hình. - Công cụ xuất hiện như các công cụ gốc của Mastra. Bởi vì
@mastra/mcpthích ứng các công cụ MCP vào loại công cụ của Mastra, bề mặt Scrapeless xuất hiện chính xác như bất kỳ công cụ nào bạn viết tay — được gõ, có không gian tên, và sẵn sàng cho kế hoạch của tác nhân.
Gói miễn phí đủ để kết nối và chạy các yêu cầu thực; so sánh mức quota trên trang giá khi bạn vượt qua nó. Nhận khóa API của bạn trên gói miễn phí tại app.scrapeless.com.
Điều kiện tiên quyết
- Node.js 18 hoặc mới hơn trên máy tính làm việc — Mastra nhắm đến Node hiện đại, và máy chủ stdio MCP được sinh ra với
npx. - Một dự án Mastra với nhà cung cấp mô hình đã được cấu hình.
Agentcủa Mastra nhận mộtmodel; vòng lặp tác nhân cần một mô hình hoạt động từ bất kỳ nhà cung cấp nào bạn kết nối trước khi bất kỳ công cụ gọi nào chạy. - Một tài khoản Scrapeless và khóa API — đăng ký trên gói miễn phí tại app.scrapeless.com và sao chép khóa từ Cài đặt → Quản lý Khóa API.
- Sự quen thuộc cơ bản với TypeScript — toàn bộ cấu hình có hai gói cộng với một định nghĩa nhỏ
MCPClient.
Kết nối Scrapeless với Mastra
Cấu hình có năm bước; mỗi bước có thể được xác minh độc lập.
1. Cài đặt gói Mastra MCP và gói chính
Thêm gói khách hàng MCP và gói lõi vào dự án của bạn:
bash
npm install @mastra/mcp @mastra/core
@mastra/mcp cung cấp lớp MCPClient kết nối với các máy chủ MCP, và @mastra/core cung cấp lớp Agent mà bạn đính kèm các công cụ.
2. Cấu hình MCPClient (stdio)
Tạo một MCPClient với một mục nhập scrapeless duy nhất. Khi có command, Mastra sẽ tự động xác định giao thông stdio và khởi động máy chủ như một quy trình con:
ts
// npm install @mastra/mcp @mastra/core
import { MCPClient } from "@mastra/mcp";
const mcp = new MCPClient({
id: "scrapeless-client",
servers: {
scrapeless: {
command: "npx",
args: ["-y", "scrapeless-mcp-server"],
env: { SCRAPELESS_KEY: process.env.SCRAPELESS_KEY! },
},
},
});
Một chi tiết quan trọng ở đây: máy chủ MCP Scrapeless đọc khóa của nó từ SCRAPELESS_KEY, không phải SCRAPELESS_API_KEY — CLI và SDK Scrapeless sử dụng SCRAPELESS_API_KEY, nhưng máy chủ MCP là ngoại lệ được tài liệu. Giữ khóa trong môi trường của bạn (export SCRAPELESS_KEY=...) và truyền nó qua đối tượng env thay vì mã cứng. Một nguồn máy chủ có thể được tìm thấy tại github.com/scrapeless-ai/scrapeless-mcp-server.
3. Hoặc sử dụng giao thông HTTP có thể stream
Nếu máy chủ không thể đáng tin cậy khởi động npx — một chức năng không máy chủ, một công nhân từ xa, hoặc một hộp cát CI — hướng MCPClient cùng một vào điểm cuối HTTP Scrapeless thay vì quy trình cục bộ. Truyền một url và đặt khóa dưới dạng tiêu đề thông qua requestInit:
ts
const mcp = new MCPClient({
servers: {
scrapeless: {
url: new URL("https://api.scrapeless.com/mcp"),
requestInit: { headers: { "x-api-token": process.env.SCRAPELESS_KEY! } },
},
},
});
Khi bạn cung cấp một url, Mastra cố gắng sử dụng HTTP có thể phát trực tuyến trước và tự động rơi vào giao thức SSE cổ điển. Cùng một giá trị khóa hoạt động trong cả hai chế độ; HTTP có thể phát trực tuyến chuyển nó thành tiêu đề x-api-token thay vì biến môi trường SCRAPELESS_KEY. Stdio là mặc định đúng trên một trạm phát triển; HTTP có thể phát trực tuyến là mặc định đúng bất cứ nơi nào mà một quá trình con lâu dài khó giữ sống.
4. Gắn các công cụ vào một Agent
Tải các công cụ bằng await mcp.listTools() và truyền chúng vào một Agent mới. Với cách tiếp cận tĩnh này, các công cụ được định các trong một lần xây dựng và có không gian tên serverName_toolName:
ts
import { Agent } from "@mastra/core/agent";
const agent = new Agent({
id: "web-agent",
name: "Agent Nhận Thức Web",
instructions: "Sử dụng các công cụ Scrapeless để tìm kiếm và đọc web trực tiếp.",
model: "<your-provider-model>",
tools: await mcp.listTools(), // -> scrapeless_google_search, scrapeless_scrape_markdown, scrapeless_browser_* ...
});
Sử dụng mô hình mà nhà cung cấp của bạn cung cấp — Agent của Mastra nhận bất kỳ id mô hình nào từ nhà cung cấp, và không yêu cầu mô hình hay phiên bản cụ thể nào cho các công cụ hoạt động.
Đối với một lựa chọn động, Mastra cũng cung cấp await mcp.listToolsets(), cái này xác định các công cụ theo từng lần gọi và không gian tên chúng serverName.toolName. Truyền các bộ công cụ tại thời điểm gọi thay vì tại thời điểm xây dựng:
ts
const result = await agent.stream(prompt, {
toolsets: await mcp.listToolsets(),
});
listTools() là con đường đơn giản nhất khi một khách hàng phục vụ toàn bộ ứng dụng; listToolsets() phù hợp cho các thiết lập đa thuê bao mà mỗi yêu cầu có thể mang các thông tin xác thực hoặc lựa chọn máy chủ khác nhau. Sử dụng await mcp.disconnect() để dọn dẹp khi bạn đã hoàn thành với khách hàng.
5. Xác minh bằng cách liệt kê 21 công cụ
Giải quyết các công cụ và kiểm tra các khóa của chúng xác nhận rằng quá trình bắt tay đã hoàn tất và máy chủ đang báo cáo bề mặt đầy đủ của nó:
ts
const tools = await mcp.listTools();
console.log(Object.keys(tools));
Đầu ra sẽ liệt kê 21 công cụ của máy chủ, mỗi cái có không gian tên là scrapeless_<tool> — các công cụ dữ liệu Google (scrapeless_google_search, scrapeless_google_trends), các trợ giúp trang một lần (scrapeless_scrape_html, scrapeless_scrape_markdown, scrapeless_scrape_screenshot), và các nguyên tố trình duyệt đám mây (scrapeless_browser_create, scrapeless_browser_goto, scrapeless_browser_get_html, scrapeless_browser_get_text, scrapeless_browser_click, scrapeless_browser_type, scrapeless_browser_press_key, scrapeless_browser_scroll, scrapeless_browser_scroll_to, scrapeless_browser_screenshot, scrapeless_browser_snapshot, scrapeless_browser_wait, scrapeless_browser_wait_for, scrapeless_browser_go_back, scrapeless_browser_go_forward, scrapeless_browser_close).
Cách bạn thực sự sử dụng điều này: nhắc nhở Agent Mastra của bạn
Sau khi kết nối với máy chủ MCP, bạn sẽ nhận được dữ liệu web trực tiếp bằng cách gọi agent trong mã của bạn — không cần viết tay các cuộc gọi công cụ. Agent đọc danh sách công cụ mà máy chủ Scrapeless MCP cung cấp và chọn scrapeless_google_search, scrapeless_scrape_markdown, hoặc các công cụ scrapeless_browser_* khi cần, phối hợp chúng theo từng lượt từ nhiệm vụ bằng ngôn ngữ tự nhiên. Không có JSON công cụ nào cần viết trên bên của bạn. Bạn điều khiển một lượt đơn bằng agent.generate(prompt), hoặc phát trực tuyến chạy từng token với agent.stream(prompt).
Các lời nhắc bạn có thể dán vào
| Lời nhắc | Điều mà agent làm |
|---|---|
"Tìm kiếm các kết quả hàng đầu trên Google cho vector database benchmarks 2026 và trả chúng dưới dạng JSON." |
scrapeless_google_search với q, hl, gl → hàng kết quả đã gõ. |
"Những chủ đề tìm kiếm nào đang tăng lên cho công cụ phát triển ở Mỹ ngay bây giờ?" |
scrapeless_google_trends. |
"Kéo trang tại https://example.com/docs dưới dạng markdown sạch." |
scrapeless_scrape_markdown. |
"Mở https://pricing.example.com, nó là một ứng dụng JavaScript — hiển thị nó và trích xuất tên gói, giá, và các tính năng dưới dạng JSON." |
scrapeless_browser_create → scrapeless_browser_goto → scrapeless_browser_get_html → trích xuất đã gõ. |
"So sánh các trang giá cả tại https://a.example.com/pricing và https://b.example.com/pricing và cho tôi biết chúng khác nhau ở đâu." |
scrapeless_browser_create → scrapeless_browser_goto (A) → scrapeless_browser_get_html → scrapeless_browser_goto (B) → scrapeless_browser_get_html → so sánh. |
"Chụp ảnh toàn bộ trang của https://example.com/landing." |
scrapeless_scrape_screenshot. |
"Lấy HTML đã render của https://example.com để agent có thể đọc markup." |
scrapeless_scrape_html. |
"Mở https://example.com/jobs, chờ các danh sách tải, chụp ảnh trang, sau đó trích xuất mọi tiêu đề và địa điểm công việc dưới dạng JSON." |
scrapeless_browser_create → scrapeless_browser_goto → scrapeless_browser_wait_for → scrapeless_browser_snapshot → trích xuất đã gõ → scrapeless_browser_close. |
Ví dụ đã hoạt động
Bạn viết (một cuộc gọi duy nhất trong ứng dụng TypeScript của bạn):
ts
const result = await agent.generate(
"Use the Scrapeless google_search tool to find the top results for " +
"'mastra ai github' and return the top 3 as a JSON array of {title, link}.",
);
console.log(result.text);
Kế hoạch của tác giả (bằng tiếng Việt):
- Gọi
scrapeless_google_searchvớiq: "mastra ai github",hl: "en",gl: "us". - Nhận một mảng các dòng kết quả và đọc các trường
position,title, vàlink. - Sắp xếp theo
positionvà giữ lại ba dòng đầu tiên. - Ánh xạ mỗi dòng thành một đối tượng
{title, link}. - Trả về mảng JSON như là câu trả lời của tác giả.
Những gì bạn nhận lại (hình dáng minh họa - tác giả làm việc từ các dòng như thế này):
json
[
{ "title": "Mastra là một khung đại lý mã nguồn mở TypeScript, ...", "link": "https://example.com/mastra" },
{ "title": "Tài liệu Mastra — xây dựng các đại lý", "link": "https://example.com/mastra-agents" },
{ "title": "@mastra/core trên npm", "link": "https://example.org/mastra-core" }
]
// Tên trường phù hợp với hình dạng dòng kết quả google_search; giá trị là các mẫu minh họa.
Các công cụ dữ liệu không trạng thái trả về payload của chúng dưới dạng một body được tiền tố bằng Response:\n\n; tác giả giải nén tiền tố đó trước khi phân tích JSON, vì vậy bạn không bao giờ thấy nó trong câu trả lời.
Hình dạng của các câu lệnh
| Nói như này | Tác dụng |
|---|---|
| "…từ Đức" / "…kết quả tiếng Đức" | Định tuyến đầu ra qua proxyCountry và đặt gl=de trong tìm kiếm. |
| "…dưới dạng markdown, bỏ qua điều hướng và khung mẫu" | Chọn scrapeless_scrape_markdown để lấy payload văn bản sạch thay vì HTML thô. |
| "…trước tiên hãy render, đây là một ứng dụng một trang" | Buộc sử dụng đường dẫn scrapeless_browser_* để việc trích xuất chạy chống lại DOM đã được giải nén. |
| "…chỉ 5 đầu tiên" | Cắt ngắn mảng trả về chỉ còn ba dòng đầu tiên. |
| "…bao gồm đoạn trích cho mỗi kết quả" | Giữ lại trường snippet trong các dòng kết quả. |
| "…đóng phiên khi xong" | Thêm một scrapeless_browser_close cuối cùng với sessionId từ scrapeless_browser_create. |
Mọi thứ bên dưới là tham chiếu ngầm - bề mặt công cụ, các hình dạng trả về chính xác, và hành vi mà tác giả xử lý cho bạn.
Bề mặt công cụ Scrapeless MCP
Khi khách hàng kết nối, Mastra thấy 21 công cụ trải dài từ dữ liệu SERP, thu thập không trạng thái, cho đến điều khiển trình duyệt đám mây chống phát hiện hoàn toàn. Các tên dưới đây được hiển thị không có không gian tên để dễ đọc; trong Mastra, chúng xuất hiện dưới dạng scrapeless_<tool> thông qua listTools().
| Công cụ | Chức năng |
|---|---|
google_search |
Thực hiện một tìm kiếm trên Google (q, hl, gl) và trả về các dòng kết quả hữu cơ có cấu trúc. |
google_trends |
Lấy dữ liệu quan tâm từ Google Trends cho một truy vấn. |
scrape_html |
Tải một URL và trả về HTML đã được render. |
scrape_markdown |
Tải một URL và trả về Markdown sạch cho trang. |
scrape_screenshot |
Chụp một ảnh màn hình của một URL mục tiêu. |
browser_create |
Mở một phiên làm việc trên trình duyệt đám mây chống phát hiện. |
browser_goto |
Điều hướng phiên làm việc đến một URL. |
browser_click |
Nhấp vào một phần tử trên trang trực tiếp. |
browser_type |
Gõ văn bản vào một trường nhập hoặc trường có thể chỉnh sửa. |
browser_get_text / browser_get_html |
Đọc văn bản hoặc HTML của trang. |
browser_screenshot |
Chụp một ảnh màn hình của phiên làm việc trực tiếp. |
browser_snapshot |
Trả về một snapshot truy cập/cấu trúc của trang. |
browser_wait / browser_wait_for |
Chờ một khoảng thời gian cố định, hoặc cho một điều kiện/phần tử. |
browser_scroll / browser_scroll_to |
Cuộn trang, hoặc tới một phần tử cụ thể. |
browser_go_back / browser_go_forward |
Di chuyển trong lịch sử phiên làm việc. |
browser_press_key |
Gửi một phím bàn phím đến trang. |
browser_close |
Kết thúc phiên làm việc trên trình duyệt đám mây. |
Nhận khóa API của bạn trong kế hoạch miễn phí: app.scrapeless.com
Những gì bạn nhận lại
Một cuộc gọi google_search trả về một mảng JSON các dòng kết quả hữu cơ. Mỗi dòng mang cùng một khóa, vì vậy tác giả có thể ánh xạ thẳng đến tiêu đề, liên kết và đoạn trích:
json
// Tên trường phản ánh đầu ra của công cụ google_search; giá trị là các mẫu minh họa.
[
{
"position": 1,
"title": "Hướng Dẫn Hoàn Chỉnh Về Web Scraping Với TypeScript",
"link": "https://example.com/typescript-web-scraping",
"snippet": "Hướng dẫn từng bước để lấy dữ liệu từ web với TypeScript và phân tích HTML.",
"source": "example.com"
},
{
"position": 2,
"title": "Lấy Dữ Liệu Từ Các Trang Động",
"link": "https://example.org/dynamic-scraping",
"snippet": "Cách render các trang JavaScript trước khi trích xuất dữ liệu.",
"source": "example.org"
}
]
Một vài nhận định trung thực khi bạn bắt đầu chạy các câu lệnh:
- Các công cụ không trạng thái như
google_searchvàscrape_markdowntrả về một body được tiền tố bằngResponse:\n\ntheo sau là payload JSON; tác giả tự động giải nén tiền tố đó, vì vậy bạn làm việc với dữ liệu, không phải bọc. - Các công cụ
browser_*trả về văn bản thuần túy mà không có tiền tốResponse:\n\n. - Đối số công cụ sử dụng kiểu camelCase: truyền vào
sessionId,proxyCountry, và các trường tương tự chính xác như được đặt tên. proxyCountrylà một yêu cầu, không phải là đảm bảo - nó có thể dựa vào khu vực đã được cấu hình trên tài khoản của bạn, vì vậy hãy xác nhận khu vực xuất khi việc nhắm mục tiêu địa lý quan trọng.- Các giá trị trong đầu ra của công cụ phụ thuộc vào nội dung: số lượng kết quả, thứ tự, và văn bản đoạn trích thay đổi theo truy vấn trực tiếp.
Kết luận: tìm kiếm, hiển thị và duyệt từ TypeScript
Toàn bộ tích hợp giảm xuống chỉ còn một MCPClient cộng với các yêu cầu ngôn ngữ tự nhiên. Với một mục nhập máy chủ scrapeless, await mcp.listTools() được truyền cho new Agent({ tools }), và chìa khóa của bạn trong SCRAPELESS_KEY, một tác nhân Mastra có thể tìm kiếm Google trực tiếp, hiển thị JavaScript, và một trình duyệt đám mây hoàn toàn chống phát hiện - chính xác là lớp web mà tác nhân không tự phát hành. Bạn mô tả nhiệm vụ; tác nhân chọn công cụ.
Nếu bạn kết nối các tác nhân khác, cùng một máy chủ Scrapeless MCP cũng có thể áp dụng cho chúng: xem tích hợp tác nhân Pi và tổng quan về máy chủ Scrapeless MCP để tham khảo đầy đủ công cụ. Giữ chìa khóa API của bạn trong SCRAPELESS_KEY, ưu tiên phương thức stdio cho phát triển cục bộ và HTTP-streamable cho các thời gian chạy được lưu trữ, chọn listTools() cho một khách hàng tĩnh duy nhất hoặc listToolsets() cho các tập động theo từng cuộc gọi, và để tác nhân chọn các công cụ. Tham khảo đầy đủ tại docs.scrapeless.com.
Sẵn sàng xây dựng đường ống dữ liệu powered by AI của bạn?
Tham gia cộng đồng của chúng tôi để yêu cầu một kế hoạch miễn phí và kết nối với các nhà phát triển đang xây dựng các tác nhân Mastra + Scrapeless MCP: Discord · Telegram.
Đăng ký tại app.scrapeless.com để nhận thời gian chạy Trình duyệt thu thập dữ liệu miễn phí và điều chỉnh tích hợp phía trên cho các SERPs, trang, và khu vực mà nhóm của bạn cần. Tham khảo đầy đủ tại docs.scrapeless.com.
Câu hỏi thường gặp
Q: Tại sao một tác nhân Mastra cần một máy chủ MCP để truy cập web?
Bởi vì một Agent Mastra chỉ có thể gọi các công cụ mà bạn gán cho nó, và nó không có tìm kiếm web hoặc trình duyệt tích hợp. MCP là cách tiêu chuẩn, không phụ thuộc vào framework để thêm khả năng đó, và @mastra/mcp chuyển đổi bất kỳ máy chủ MCP nào thành các công cụ Mastra gốc. Kết nối Scrapeless cung cấp cho tác nhân tìm kiếm Google trực tiếp, truy cập trang đã hiển thị, và một trình duyệt đám mây hoàn toàn chống phát hiện trong một bước.
Q: Sự khác biệt giữa listTools() và listToolsets() là gì?
await mcp.listTools() giải quyết các công cụ một lần và trả về chúng với tên không gian serverName_toolName (ví dụ scrapeless_google_search); bạn truyền kết quả vào new Agent({ tools }) khi khởi tạo. await mcp.listToolsets() giải quyết các công cụ theo từng cuộc gọi và đặt tên không gian serverName.toolName; bạn truyền kết quả tại thời điểm gọi thông qua agent.stream(prompt, { toolsets }) hoặc agent.generate(prompt, { toolsets }). Sử dụng listTools() cho một khách hàng tĩnh duy nhất, và listToolsets() khi mỗi yêu cầu có thể mang theo các thông tin xác thực hoặc lựa chọn máy chủ khác nhau.
Q: Biến môi trường nào chứa khóa Scrapeless?
SCRAPELESS_KEY. Đây là ngoại lệ đã được tài liệu hóa - Scrapeless CLI và SDK đọc SCRAPELESS_API_KEY, nhưng máy chủ MCP đọc SCRAPELESS_KEY. Trong cấu hình stdio, bạn truyền nó qua đối tượng env như process.env.SCRAPELESS_KEY; trong chế độ HTTP-streamable, bạn gửi cùng một giá trị dưới dạng tiêu đề x-api-token.
Q: stdio và HTTP-streamable - khi nào bạn nên sử dụng mỗi cách?
Sử dụng stdio khi máy chủ chạy cục bộ cùng với ứng dụng của bạn: Mastra khởi động scrapeless-mcp-server như một quy trình con và giao tiếp với nó qua đầu vào/đầu ra tiêu chuẩn. Sử dụng HTTP-streamable (một url của https://api.scrapeless.com/mcp với tiêu đề x-api-token qua requestInit) khi thời gian chạy là không máy chủ hoặc từ xa và không thể giữ một quy trình con cục bộ hoạt động. Khi bạn cung cấp một url, Mastra cố gắng sử dụng HTTP Streamable trước và tự động quay lại SSE kế thừa.
Q: Điều này có yêu cầu một mô hình cụ thể không?
Không. Agent của Mastra chấp nhận bất kỳ id mô hình nhà cung cấp nào, vì vậy bạn sử dụng mô hình mà nhà cung cấp của bạn cung cấp. Các công cụ Scrapeless không phụ thuộc vào mô hình; chọn một mô hình xử lý tốt các cuộc gọi công cụ, và tác nhân kết hợp các công cụ Scrapeless theo cách giống nhau bất kể nhà cung cấp.
Q: Làm thế nào các công cụ trở thành kiểu trong dự án của tôi?
@mastra/mcp điều chỉnh từng công cụ MCP thành loại công cụ riêng của Mastra, vì vậy các công cụ Scrapeless xuất hiện chính xác như các công cụ mà bạn sẽ viết tay — có không gian tên và sẵn sàng cho kế hoạch của tác nhân. Bạn kết nối chúng thông qua tools: await mcp.listTools() và không bao giờ tự viết JSON cho công cụ.
Q: Việc thu thập dữ liệu từ web thông qua tác nhân có hợp pháp không?
Việc thu thập dữ liệu công khai thường là hợp pháp, nhưng bạn chịu trách nhiệm về cách bạn sử dụng nó. Xem xét Điều khoản Dịch vụ của từng trang web và tôn trọng robots.txt, và hãy nhớ rằng các quy định xung quanh dữ liệu cá nhân và quyền truy cập thay đổi theo khu vực pháp lý. Khi không chắc chắn, hãy tìm kiếm tư vấn pháp lý cho trường hợp sử dụng cụ thể của bạn.
Q: Bạn có thể sử dụng điều này mà không cần Mastra không?
Có. Máy chủ Scrapeless MCP là một máy chủ MCP tiêu chuẩn, vì vậy bất kỳ khách hàng tương thích với MCP nào cũng có thể gọi nó — hoặc bạn có thể điều khiển nó trực tiếp qua JSON-RPC (initialize, sau đó tools/list và tools/call). Mastra là sự thuận tiện cho các ứng dụng TypeScript, không phải là yêu cầu.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.



