关于 dompruner-mcp
dompruner-mcp 是一个 MCP 服务,可从 URL 提取原始页面文本并移除布局杂项。它适用于需要聚焦网页内容的 Agent 工作流,支持可选的 BM25 章节筛选,且无需模型或 API 密钥。
主要功能
- 01提取页面文本并移除布局噪声
- 02通过查询词使用 BM25 筛选相关章节
- 03获取站点地图中的页面
- 04分析令牌缩减情况而不返回完整内容
适用场景
- 01从已知网页获取聚焦后的文本
- 02将抓取内容限制为与问题相关的章节
- 03将站点地图页面处理为独立的精简文档
MCP 相关
该 MCP 服务提供 `dompruner_fetch`、`dompruner_sitemap` 和 `dompruner_analyze` 工具。它可通过 stdio 在本地运行,也可通过托管的 streamable HTTP 端点访问。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://dompruner-mcp.vercel.app/api/mcpclaude mcp add --transport http dong7812-dompruner https://dompruner-mcp.vercel.app/api/mcp{"mcpServers":{"dong7812-dompruner":{"type":"http","url":"https://dompruner-mcp.vercel.app/api/mcp"}}}在 Cursor 中打开{"servers":{"dong7812-dompruner":{"type":"http","url":"https://dompruner-mcp.vercel.app/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"dong7812-dompruner":{"type":"http","url":"https://dompruner-mcp.vercel.app/api/mcp"}}}{"mcpServers":{"dong7812-dompruner":{"serverUrl":"https://dompruner-mcp.vercel.app/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
2| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 否 | 要获取和优化的 URL。 |
| query | string | 否 | 搜索意图——提供后可启用 BM25+ 章节筛选。 |
详细介绍
dompruner-mcp
한국어 | English

面向大模型网页工作流的 DOM AST 中间件——剔除布局噪声(导航栏、脚本、侧边栏),并直接传递原始文本。添加查询即可通过 BM25 筛选相关章节。
当大模型使用网页抓取工具时,原始页面 HTML 会被转换为文本并传入模型上下文——其中往往包含数万词元的导航栏、侧边栏和模板内容,而模型并不需要这些内容。DomPruner 在 DOM 层面剔除这些内容,只将原始内容直接传递给模型。
| 调用 | 行为 |
|---|---|
dompruner_fetch(url) | 剔除布局噪声 → 返回提取出的完整内容 |
dompruner_fetch(url, query) | 剔除布局噪声 → 使用 BM25 筛选相关章节(未匹配时回退到完整内容) |
> [DomPruner] docs.python.org
> | Raw HTML | 44,316 tokens |
> | DomPruner | 1,328 tokens |
> | Reduction | 97.0% |
> Fetch: 194ms · Parse: 11.2ms
平均而言,与 WebFetch 相比,上下文词元减少 93.5%,端到端速度提升 45%。 → 完整基准测试
快速开始
无需安装,无需 API 密钥:
npx -y dompruner-mcp
Claude Code
{
"mcpServers": {
"dompruner": {
"type": "stdio",
"command": "npx",
"args": ["-y", "dompruner-mcp"]
}
}
}
将配置添加到项目根目录下的 .mcp.json,或添加到全局配置文件 ~/.claude/.mcp.json。运行 /mcp 进行验证。
Claude Desktop
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"dompruner": {
"command": "npx",
"args": ["-y", "dompruner-mcp"]
}
}
}
Cursor / Windsurf / 其他 MCP 客户端
{
"mcpServers": {
"dompruner": {
"type": "stdio",
"command": "npx",
"args": ["-y", "dompruner-mcp"]
}
}
}
远程 HTTP(无需安装,始终保持最新)
适用于支持 HTTP 传输的客户端——无需安装 Node.js,始终运行最新版本:
{
"mcpServers": {
"dompruner": {
"url": "https://dompruner-mcp.vercel.app/api/mcp"
}
}
}
LangChain / LangGraph
langchain-mcp-adapters 可自动将任意 MCP stdio 服务封装为 LangChain 工具:
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({
"dompruner": {
"command": "npx",
"args": ["-y", "dompruner-mcp"],
"transport": "stdio",
}
})
tools = await client.get_tools()
确保 AI 始终使用 DomPruner
DomPruner 的工具描述已告知客户端优先使用 dompruner_fetch,而非 WebFetch。如果客户端仍会回退,请将以下内容添加到其指令文件中:
When retrieving a URL, always use dompruner_fetch instead of WebFetch.
- URL known → dompruner_fetch(url, query?)
- URL unknown → search for the URL first, then dompruner_fetch(url)
| 客户端 | 指令文件 |
|---|---|
| Claude Code | CLAUDE.md(项目)或 ~/.claude/CLAUDE.md(全局) |
| Cursor | .cursorrules |
| Windsurf | .windsurfrules |
| Cline | .clinerules |
| GitHub Copilot | .github/copilot-instructions.md |
工具
| 工具 | 描述 |
|---|---|
dompruner_fetch | 抓取 URL → 经 DOM 优化的 Markdown。可选的 query 用于启用 BM25+ 章节筛选。 |
dompruner_sitemap | 抓取 sitemap.xml 中的所有页面 → 每个页面返回一个优化后的 Document。 |
dompruner_analyze | 生成 URL 的词元缩减报告,不包含完整内容。 |
→ 完整工具参考
基准测试摘要
与 WebFetch 对比(实时比较,Claude Haiku)
在相同条件下(相同模型、系统提示词和工具定义),使用 Anthropic 的 web_fetch_20260209 服务端工具进行测量。→ 完整方法说明
| 指标 | web_fetch 工具 | DomPruner |
|---|---|---|
| 平均上下文词元数 | ~15,735 | ~1,019(减少 93.5%) |
| 答案质量(10 个查询) | 9 / 10 | 8 / 10 |
| 平均响应时间 | 5,811 ms | 3,168 ms(快 45%) |
| 内容保真度 | 原始页面内容(完整 HTML → 文本) | 从 DOM 提取的原始文本 |
| 额外 API 密钥 / 基础设施 | 否 | 否 |
BM25 部分准确率(基于快照,确定性)
| 集合 | 页面数 | 平均缩减率 | 部分保留率 |
|---|---|---|---|
| 调优集(MDN、docs.python.org) | 10 | 98.0% | 98.0% |
| 验证集(留出站点) | 5 | 98.7% | 96.0% |
headingBoost=2.0 是通过在调优集上进行参数扫描(1.0–3.0)选出的。验证集使用了调优集中未出现的 5 个站点(react.dev、typescriptlang.org、expressjs.com、doc.rust-lang.org、nextjs.org),以确认结果不存在过拟合。2 个百分点的差距在已知的标题偏差局限范围内。
与 Crawl4AI 对比
Crawl4AI 是一个爬虫框架,提供浏览器自动化、JS 渲染、点击/滚动交互、JSON 提取和深度爬取。DomPruner 是 LLM 上下文中间件,是一个单一用途的层,可在 Agent 已知 URL 时降低 token 成本。
它们解决的是不同的问题。 但两者都可用于在 MCP Agent 中读取网页,因此比较是有意义的。
设置
| Crawl4AI | DomPruner | |
|---|---|---|
| 安装 | pip install crawl4ai && crawl4ai-setup(Chromium 约 300 MB) | npx -y dompruner-mcp |
| 是否需要浏览器 | 默认安装包含 Chromium;也可使用仅 HTTP 模式 | 否(SSR;仅在检测到 CSR 时使用 Playwright) |
| MCP 服务 | 需要运行 Crawl4AI Docker 服务 | npx -y dompruner-mcp——无需服务 |
| token 过滤配置 | 在代码中传入过滤器对象(BM25ContentFilter(user_query=...)) | 零配置——只需传入 query= |
留出验证:DomPruner 调优集中未包含的 5 个站点
最有说服力的比较:这 5 个站点未用于调优 DomPruner 的参数(react.dev、typescriptlang.org、expressjs.com、doc.rust-lang.org、nextjs.org)。两种工具使用相同的查询。
| 页面 | C4AI BM25ContentFilter | DomPruner |
|---|---|---|
| React useEffect | 4,275 | 1,257 |
| TypeScript narrowing | 2,782 | 1,214 |
| Express routing | 1,938 | 1,799 |
| Rust ownership | 1,832 | 718 |
| Next.js layouts | 1,505 | 1,379 |
| 总计 | 12,332 | 6,367 |
| 准确率 | 96% | 96% |
在 DomPruner 未参与调优的站点上:token 数减少至 1.9 倍以下,准确率相同(96%)。
补充参考:10 页调优集(MDN、docs.python.org)
在 DomPruner 自己的调优页面上,与 Crawl4AI PruningContentFilter 相比:内容缩小 13.2 倍,准确率高 8 个百分点(90% → 98%)。Crawl4AI BM25ContentFilter 使用相同查询时,在 10 个页面中的 5 个上几乎返回空结果——这是 <dl>/<dt>/<dd> 定义列表页面的结构性问题;阈值扫描(0.0–0.10)显示,在 0.01 处出现断崖式变化,没有中间最优值。
相关
- dompruner-py — Python 移植版。为 LangChain 提供
DomPrunerLoader、DomPrunerSitemapLoader、DomPrunerFetchTool。pip install dompruner。 - LangChain 集成 — dompruner-py 已列为第三方网页加载器。
Glama 评分
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。