dompruner-mcp について
dompruner-mcpは、URLからページ本文を抽出し、レイアウト由来のノイズを除去するMCPサーバーです。モデルやAPIキーを必要とせず、任意のBM25セクション絞り込みで、必要なウェブ内容を扱うエージェントのワークフローを支援します。
主な機能
- 01ページ本文を抽出してレイアウトノイズを除去
- 02クエリによるBM25関連セクション絞り込み
- 03サイトマップ内のページ取得
- 04全文を返さずトークン削減を分析
活用シーン
- 01URLが分かっているページから必要な本文を取得
- 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

LLM のウェブパイプライン向け DOM AST ミドルウェアです。レイアウトのノイズ(ナビゲーション、スクリプト、サイドバー)を除去し、元のテキストをそのまま渡します。クエリを追加すると、BM25 で関連するセクションに絞り込めます。
LLM がウェブ取得ツールを使うと、生のページ 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 のツールの説明では、WebFetch より dompruner_fetch を優先するよう、すでにクライアントに指示しています。それでもクライアントがフォールバックする場合は、指示ファイルに次の内容を追加してください。
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 %p の差は、既知の見出しバイアスの制限範囲内です。
Crawl4AI との比較
Crawl4AI はクローラーフレームワークです。ブラウザー自動化、JS レンダリング、クリック/スクロール操作、JSON 抽出、ディープクロールに対応します。DomPruner は LLM コンテキストミドルウェアです。エージェントがすでに URL を把握している場合に、トークンコストを削減する単一目的のレイヤーです。
両者は異なる課題を解決します。 ただし、どちらも MCP エージェント内でウェブページを読み取るために使用できるため、比較には意味があります。
セットアップ
| 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 — サーバー不要 |
| トークンをフィルタリングする設定 | コードでフィルターオブジェクトを渡します(BM25ContentFilter(user_query=...)) | 不要 — query= を渡すだけです |
ホールドアウト検証:DomPruner の調整セットに含まれていない5つのサイト
最も信頼性の高い比較です。DomPruner のパラメータ調整に使用されていない5つのサイト(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 の調整に使われていないサイトでは、同じ精度(96%)でトークン数を1.9分の1に削減します。
参考:調整用10ページセット(MDN、docs.python.org)
DomPruner の調整用ページで Crawl4AI の PruningContentFilter と比較すると、13.2倍小さく、精度が8 pp向上します(90% → 98%)。同じクエリを使用した Crawl4AI の BM25ContentFilter は、10ページ中5ページでほぼ空の出力を返します。これは、しきい値スイープ(0.0~0.10)で0.01に急激な境界があり、中間に最適値が見つからない、<dl>/<dt>/<dd> の定義リストを含むページにおける構造上の問題です。
関連項目
- dompruner-py — Python 移植版。LangChain 用の
DomPrunerLoader、DomPrunerSitemapLoader、DomPrunerFetchToolを提供します。pip install dompruner。 - LangChain integrations — dompruner-py がサードパーティーのウェブローダーとして掲載されています。
Glama Score
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。