返回市场
废弃-mcp

废弃-mcp

作者:sigmaSd7 星标更新:2025-06-23

项目介绍

Web Scraper MCP Server

这是一个使用CSS选择器抓取网页并提取内容的MCP(模型上下文协议)服务器。该服务器基于deno-dom构建,用于快速解析HTML。

为什么需要这个MCP?

大多数LLM客户端已经具备一些HTTP获取能力,但直接获取页面通常会返回大量不必要的内容。这不仅会混淆LLM,还会迅速填满上下文窗口。

这就是这个MCP的作用——它通过CSS选择器实现有针对性的抓取,因此你只需提取实际需要的内容。

示例:Zed

参见ZedExample.md了解实际用例。

特性

  • 🌐 通过URL获取任何公开访问的网页
  • 🔍 使用快速的deno-dom库解析HTML内容
  • 📋 使用标准CSS选择器提取文本内容
  • 🎯 支持复杂的选择器(类、ID、属性、伪选择器)
  • ⚡ 内置网络问题和解析失败的错误处理
  • 🛡️ 在最小权限要求下安全执行

预备条件

  • 系统上已安装Deno
  • 获取网页的网络访问权限

运行服务器

deno run --allow-net jsr:@sigma/scrap-mcp

你也可以分别使用bunxnpx来运行Bun和Node.js:

bunx xjsr @sigma/scrap-mcp
npx xjsr @sigma/scrap-mcp

MCP工具参考

scrape_page

这是抓取网页并提取内容的主要工具。

参数:

  • url(字符串,必需):要抓取的页面的URL
  • query_selector(字符串,必需):查询元素的CSS选择器

返回格式:

在URL上找到X个与选择器"SELECTOR"匹配的元素:

元素1:TEXT_CONTENT

元素2:TEXT_CONTENT
...

使用示例

基本选择器

  1. 提取所有标题:

    {
      "url": "https://example.com",
      "query_selector": "h1, h2, h3"
    }
    
  2. 提取所有段落:

    {
      "url": "https://example.com",
      "query_selector": "p"
    }
    
  3. 从特定类中提取内容:

    {
      "url": "https://news.ycombinator.com",
      "query_selector": ".titleline > a"
    }
    
  4. 提取所有链接:

    {
      "url": "https://example.com",
      "query_selector": "a"
    }
    

高级选择器

  1. 提取导航项:

    {
      "url": "https://deno.land",
      "query_selector": "nav a"
    }
    
  2. 提取具有特定属性的元素:

    {
      "url": "https://example.com",
      "query_selector": "a[href^='https://']"
    }
    
  3. 提取表单输入:

    {
      "url": "https://example.com",
      "query_selector": "input[type='text'], input[type='email']"
    }
    

CSS选择器参考

基本选择器

  • 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 - 文章内容中的段落和H2
  • nav 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 - 运行时类型验证和模式定义

错误处理

服务器提供了全面的错误处理,包括:

  • 网络问题:无效的URL、连接超时、DNS故障等
  • HTTP错误:404未找到、403禁止访问、500服务器错误等
  • 解析失败:格式不正确的HTML、编码问题等
  • 选择器问题:无效的CSS选择器、没有匹配的元素等
  • 内容问题:找到了元素但没有可用的文本内容

所有错误都通过MCP协议以可读的文本消息形式返回。

最佳实践

  • 尊重robots.txt:始终检查目标站点的robots.txt文件
  • 添加延迟:在请求之间使用合理的延迟,避免过载服务器
  • User-Agent:抓取器使用Deno的默认User-Agent

安全性

所需权限

  • --allow-net - 从互联网获取网页

安全特性

  • 无任意代码执行:仅接受CSS选择器,不接受JavaScript
  • 网络沙箱:仅允许出站HTTP/HTTPS请求
  • 输入验证:所有输入均使用Zod模式进行验证

故障排除

“权限被拒绝”错误:

# 确保授予了所有必要的权限
deno run --allow-net jsr:@sigma/scrap-mcp

有效选择器但未找到元素:

  • 页面可能通过JavaScript动态加载内容
  • 尝试不同的选择器或检查实际的HTML源码
  • 有些网站会阻止自动化请求

许可证

MIT许可证 - 详情见LICENSE文件