Scavenge
Scavenge — 人間とコーディングエージェントのための決定論的ウェブ証拠収集ツール
Scavengeは、1つのウェブページ上の1つのフィールドを検査し、そのフィールドが現れるすべての場所、各表現の内容、そして各値の正確な出所を報告します。
フィールドの観測結果を正確な出所とともに収集します。どの観測結果が意味的に正しいかを判断することはしません。 その判断にはページの意味を理解する必要があり、本エンジンは意図的にその能力を持ちません — 詳しくはなぜそこで止めるのかを参照してください。
機能
$ scavenge inspect https://example.com/product/123 --field price
FIELD: price
RAW_DOM 99.00 USD [raw_dom:0]
raw: '$99.00'
source: div.product-price
STRUCTURED_DATA 99.00 USD [structured_data:0]
raw: '99.00'
source: script[0]/offers/price
EMBEDDED_STATE not observed
RENDERED_DOM 79.00 USD [rendered_dom:0]
raw: '$79.00'
source: div.product-price
NETWORK_JSON 79.00 USD [network_json:0]
raw: '79.00'
source: GET https://example.com/api/products/123 /price
ACQUISITION
HTTP 200 48213 bytes 0.31s
RENDER OK
JSON responses observed: 12生のHTMLは99.00と表示し、レンダリングされたページは79.00と表示し、API呼び出しがその理由を説明します。これを2秒で確認できますが、エンジンはそれを主張しません。
Related MCP server: mcp-ux-vision
存在理由
ページは同じ事実を複数の場所で示します — 可視HTML、JSON-LD、ハイドレーションブロブ、レンダリングされたDOM、XHRレスポンス — そしてそれらは想定以上に頻繁に食い違います。どの場所に目的のフィールドが含まれているかを特定するのは、手作業で行うDevToolsの仕事であり、ターゲットごとに一度だけ、永遠に続きます。エージェントも同様の作業を行えますが、再現性がなく、正確な出所もありません。
なぜそこで止めるのか
当初の目標はより野心的でした:異なる表現で見つかった値が同じ現実世界のものを指しているかを決定論的に判断し、一致または不一致の箇所を報告することでした。
実際のストアフロントはその前提を破りました。比較可能に見えた値は、レコメンデーションカルーセル、カート、分割払いテーブル、ストアロケーター、商品バリエーション、同じページ上の2つ目のProductブロックに属していました。12のストアフロントでの検証実行では、エンジンが報告したすべての不一致がこの種のものでした — 値と出所は正しかったが、比較が間違っていました。
これを適切に修正するにはエンティティ解決が必要になります。そのためScavengeは一歩手前で止まります:証拠を決定論的に収集し、人間またはエージェントに解釈を委ねます。 以前の設計を破棄させた結果を含む完全な説明は、docs/research/にあります。
対応フィールド
price(価格)とavailability(在庫状況)。2つだけです。「任意」ではありません。
対応チャネル
RAW_DOM · STRUCTURED_DATA · EMBEDDED_STATE · RENDERED_DOM · NETWORK_JSON
これらは同等に検証されていません。 12のストアフロントでの23ページの検証において、STRUCTURED_DATAは46回の実行中28回で値を生成し、EMBEDDED_STATEはわずか6回でした。
MCP
1つのツール、inspect_web_field(url, field)が、構造化された証拠を返します — 散文ではありません。
{
"mcpServers": {
"scavenge": { "command": "python", "args": ["-m", "scavenge.mcp"] }
}
}サーバーは何も推論せず、スクレイピングコードを生成せず、モデルを呼び出しません。
構造化出力
{
"schema_version": 3,
"target": "https://example.com/product/123",
"field": "price",
"observations": [
{
"id": "raw_dom:0",
"channel": "RAW_DOM",
"normalized_value": {"kind": "money", "amount": "99.00", "currency": "USD"},
"raw": "$99.00",
"provenance": {"selector": "div.product-price"},
"subject": {"scope": "PAGE", "key": "", "reason": ""},
"status": "OK",
"note": ""
}
],
"acquisition": {
"http_status": 200, "http_bytes": 48213, "http_challenge": "",
"render_status": "OK", "json_responses": 12
},
"warnings": []
}アーキテクチャ
MCP ─┐
├─→ evidence engine ─→ HTTP · raw DOM · structured data
CLI ─┘ embedded state · rendered DOM · network JSON1つのエンジン。両方のインターフェースがそれを呼び出します。テストはCLIのJSONがエンジンのJSONと同じであることを検証します。
インストール
pip install git+https://github.com/aarohim24/Scavenge.git
python -m playwright install chromium # required for rendered DOM and network channels
scavenge inspect https://example.com/p/1 --field priceまだPyPIにはありません — APIが外部からのフィードバックを一巡するまでは意図的に公開していません。
--no-renderはブラウザをスキップし、HTTPのみのチャネルを報告します。
セキュリティ境界
http/httpsのみ。file://、localhost、ループバック、リンクローカルおよびプライベート範囲は、リクエスト前に拒否されます — これはMCP下で、エージェントが人間の確認なしにURLを提供する場合に特に重要です。本文は512KB、JSONレスポンスは40に制限され、待機時間とrobots.txtの取得にも制限があります。robots.txtは尊重され、タイムアウトや到達不能なrobots.txtは決して許可として扱われません。キャプチャされたリクエストは再実行されず、認証済みリクエストは再発行されず、ページからの何も実行されません。
明示的に行わないこと
どの観測結果が正しいかの判断。 v0.1では比較を一切公開しません。
エンティティ解決。 ページの商品を2つ目のProductブロック、アップセルタイル、カート合計、ストアロケーター行から確実に区別できません。
クロール、スケジュール、リンクの追跡。
アンチボットシステムの回避。明らかなチャレンジを検出して報告しますが、決してバイパスしません。
いかなるモードでもLLMを呼び出しません。
既知の制限事項
v0.1では比較機能なし。 以前のバージョンは
EQUAL/DIFFERENT関係を公開していました。実世界の検証で、実際のストアフロントで生成されたDIFFERENTのすべてが異なるエンティティを比較していたため、この機能は修正ではなく削除されました。完全な結果はdocs/research/OSS-FINAL-CORRECTNESS.mdにあります。通貨はしばしば
null。$は十数の通貨を指します。宣言された証拠がない場合、金額は保持され通貨は拒否されます。不明は一般的ですが、誤りは避けるべきです。補助通貨単位はモデル化されていません — Shopifyの
2950と表示された29.50は異なる観測結果です。決定論的であるのはレポート生成であり、ウェブ自体ではありません。 同じバイト入力から同じレポート出力が得られます。同じURLが常に同じバイトを返すとは限りません。
レンダリングのブロックは名前付きシグナルからのみ検出されます。名前のない薄いシェルは検出されません。
robots.txtを尊重するアクセスでは、多くの大規模小売業者が完全に除外されます。
ライセンス
Apache-2.0。
ステータス
実験的v0.1。 技術的なフィードバックのために公開されており、本番環境用ではありません。APIは変更される可能性があります。12のストアフロントで23ページ、および決定論的フィクスチャスイートで検証されています。これは小さなサンプルであり、ベンチマークではありません。
研究記録 — このアイデアの以前のバージョンを破棄させた結果を含む — はdocs/research/にあります。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceStructured web context infrastructure for AI agents. Extract reliable schema-guided JSON from websites using Claude-powered parsing, Browserless fallback rendering, and MCP-native workflows.11MIT
- Flicense-qualityDmaintenanceEnables AI-powered visual analysis of webpages for UI/UX assessment, including screenshot capture, element detection, accessibility auditing, and comprehensive JSON reporting.1
- Flicense-qualityBmaintenanceEnables AI agents to perceive and interact with web interfaces by extracting a unified UI Scene Graph from live URLs, providing tools for navigation, element detection, visual analysis, and state tracking.
- AlicenseAqualityAmaintenanceGives AI agents a compact, semantic interface to the browser, returning structured page snapshots with stable element IDs instead of raw DOM. Enables agents to navigate, interact, and extract information from web pages efficiently.26014MIT
Related MCP Connectors
Deterministic public-web change observation with evidence-bound commercial interpretation.
Turn the web into structured, reliable, actionable enterprise data for AI Agents
Web search, page extraction and structured commerce, social and business data for AI agents
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aarohim24/Scavenge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server