这是一个使用CSS选择器抓取网页并提取内容的MCP(模型上下文协议)服务器。该服务器基于deno-dom构建,用于快速解析HTML。
大多数LLM客户端已经具备一些HTTP获取能力,但直接获取页面通常会返回大量不必要的内容。这不仅会混淆LLM,还会迅速填满上下文窗口。
这就是这个MCP的作用——它通过CSS选择器实现有针对性的抓取,因此你只需提取实际需要的内容。
deno run --allow-net jsr:@sigma/scrap-mcp
你也可以分别使用bunx和npx来运行Bun和Node.js:
bunx xjsr @sigma/scrap-mcp
npx xjsr @sigma/scrap-mcp
scrape_page这是抓取网页并提取内容的主要工具。
参数:
url(字符串,必需):要抓取的页面的URLquery_selector(字符串,必需):查询元素的CSS选择器返回格式:
在URL上找到X个与选择器"SELECTOR"匹配的元素:
元素1:TEXT_CONTENT
元素2:TEXT_CONTENT
...
提取所有标题:
{
"url": "https://example.com",
"query_selector": "h1, h2, h3"
}
提取所有段落:
{
"url": "https://example.com",
"query_selector": "p"
}
从特定类中提取内容:
{
"url": "https://news.ycombinator.com",
"query_selector": ".titleline > a"
}
提取所有链接:
{
"url": "https://example.com",
"query_selector": "a"
}
提取导航项:
{
"url": "https://deno.land",
"query_selector": "nav a"
}
提取具有特定属性的元素:
{
"url": "https://example.com",
"query_selector": "a[href^='https://']"
}
提取表单输入:
{
"url": "https://example.com",
"query_selector": "input[type='text'], input[type='email']"
}
h1 - 所有H1标题.className - 所有具有类名“className”的元素#elementId - 具有ID“elementId”的元素* - 所有元素div p - 所有位于div元素内的段落div > p - 直接作为div元素子元素的段落h1 + p - 紧随H1元素之后的段落h1 ~ p - 在H1元素之后的所有兄弟段落[href] - 所有具有href属性的元素a[title] - 所有具有title属性的链接a[href^="https://"] - 以"https://"开头的链接a[href$=".pdf"] - 以".pdf"结尾的链接a[href*="github"] - 包含"github"的链接li:first-child - 第一个列表项li:last-child - 最后一个列表项li:nth-child(2n) - 偶数编号的列表项p:not(.special) - 没有“special”类的段落.article-content p, .article-content h2 - 文章内容中的段落和H2nav ul li a - 导航链接table tr:nth-child(odd) td - 奇数表格行中的单元格form input[required] - 必填表单输入@modelcontextprotocol/sdk@1.8.0 - 用于服务器实现的MCP SDK@b-fuze/deno-dom@^0.1.49 - 快速的DOM解析器,用于HTML内容zod@3.24.2 - 运行时类型验证和模式定义服务器提供了全面的错误处理,包括:
所有错误都通过MCP协议以可读的文本消息形式返回。
--allow-net - 从互联网获取网页“权限被拒绝”错误:
# 确保授予了所有必要的权限
deno run --allow-net jsr:@sigma/scrap-mcp
有效选择器但未找到元素:
MIT许可证 - 详情见LICENSE文件