ScrapeCheck について
ScrapeCheckは、取得した値を元ページの再取得結果と照合するMCPサーバーです。データに基づいて行動するエージェント向けに署名付き判定を返し、署名をオフラインで検証するツールも備えています。
主な機能
- 01元ページを再取得して主張を照合
- 02LLM判定による値の完全検証
- 03値の有無のみを確認
- 04Ed25519署名付き判定
- 05判定結果のオフライン検証
活用シーン
- 01利用前に取得した価格を確認
- 02エージェントの行動前に抽出項目を検証
- 03ネットワークなしで判定署名を確認
MCP 対応
ストリーミングHTTP経由で、MCPクライアントに `verify_web_field`、`verify_presence`、`get_verifier_info` を提供します。無料枠を超える呼び出しは、インバンドのx402決済を利用します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://scrapecheck-mcp.fly.dev/mcpclaude mcp add --transport http scrapecheck https://scrapecheck-mcp.fly.dev/mcp{"mcpServers":{"scrapecheck":{"type":"http","url":"https://scrapecheck-mcp.fly.dev/mcp"}}}Cursor で開く{"servers":{"scrapecheck":{"type":"http","url":"https://scrapecheck-mcp.fly.dev/mcp"}}}VS Code で開く{"mcpServers":{"scrapecheck":{"type":"http","url":"https://scrapecheck-mcp.fly.dev/mcp"}}}{"mcpServers":{"scrapecheck":{"serverUrl":"https://scrapecheck-mcp.fly.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
3| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 申告内容をスクレイピングしたソースページの URL |
| claim | object | はい | ライブページと照合するスクレイピング済みフィールド。例:{"price": "£51.77", "in_stock": true} |
| asked | string | はい | スクレイパーに抽出するよう依頼された内容。例:「get the current price and stock status」 |
詳細
ScrapeCheck MCP:支出するエージェントのための検証ステップ
オフライン検証ツールをお探しですか? このリポジトリにあります:
tools/verify-verdict.mjs— 単一ファイルで、依存関係はなく、 ネットワークに接続せずに ScrapeCheck の判定を検証できます。 使い方 →
エージェントは今や、プロバイダーを見つけ、x402 で支払い、データを受け取り、それに
基づいて行動します。この一連の流れには、データが真実かどうかを確認するものがありません。このサーバーは、
その欠けていたステップを補います。エージェントが取得または購入した値に基づいて行動する前に、
ソース URL、値、尋ねた内容を送信すると、ScrapeCheck は独自のインフラからページを
再取得し、ed25519 署名付きの判定 pass、fail、unverifiable のいずれかを返します。
推測は一切なく、確認できないものはすべて unverifiable となり、決して pass にはなりません。
インストールは 1 行で完了し、エージェントはすでに支払いに使っているものと同じ x402 レールを通じて、チェックごとに支払います。API キーも登録も不要で、支払いが必要になる前に無料枠があり、 すべての判定を公開鍵を使ってオフラインで検証できます。
インストール前に判定を確認したいですか? scrapecheck.fly.dev では、ブラウザーから無料で 1 回チェックできます。
テスト済みのスニペット付きで、4 つすべての連携方法(MCP、x402 ネイティブ、Apify、プレーン HTTP)を紹介しています: scrapecheck.fly.dev/integrations
エンドポイント: https://scrapecheck-mcp.fly.dev/mcp(ストリーム可能な HTTP)
支払い: x402 インバンド(Base 上の USDC)— API キーも登録も不要です。支払いが必要になる前に、クライアント ID ごとの無料枠が適用されます。
ご自身でご確認ください — 検証できる 3 つの項目: 任意の判定をオフラインで検証 · 実行統計(失敗も含む) · ベンチマークとその限界
ツール
verify_web_field— $0.01 — 完全な検証:再取得したライブページに値が存在すること、ライブで配信されていること、独立した LLM 判定者が尋ねられた内容への回答になっていると確認すること。肯定的な判定はpassです。verify_presence— $0.002 — 存在のみを確認します。値が質問への回答になっていることは確認しません。肯定的な判定はpresentであり、passにはなりません。get_verifier_info— 無料 — 信頼性を示す情報:公開鍵、ベンチマークの概要、対象範囲、エンドポイント。
エージェントの支出ループにおける位置づけ
決済レールは、誰が何を、誰の権限で支払ったのかを示します。領収書に間違いはありませんが、 データに関する証拠は何も記載されていません。このツールは、受け取りから行動までの間に入るステップです。 エージェントが信頼しようとしている値ごとに 1 回呼び出し、データ自体の費用と同じ単位の価格で利用できます。
信頼性の保証は統計的ではなく、構造的なものです
ScrapeCheck が独立してページを再取得し、主張された値が実際にページ上にあると確認しない限り、主張が認証されることはありません。
また、判定者が主張を言い換えた内容が実際の主張と一致しない場合、その判定者の票は
機械的に無効になります。不在の値が合格することはなく、別の値への置き換えが合格することもありません。
確認できないもの — チェックがスキップされた場合、取得に失敗した場合、判定者でエラーが発生した場合 —
はすべて unverifiable を返し、決して pass にはなりません。
ベンチマークによる裏付け(完全な検証のみ):固定ラベル付きケース 67 件で誤った pass は 0 件
(すべての調整から除外した 26 件を含み、主張された値がページ上に誤ったものとして現れる敵対的な罠も含む)。
また、敵対的な罠 9 件を含むライブウェブのケース 21 件でも、誤った pass は 0 件です。
これは構造的なガードを少数のサンプルで裏付けるものであり、母集団全体の精度を示す主張ではありません。
このサーバー自身の主張を信頼できる理由
信頼する必要はありません。すべての判定には、signature を除くすべてのフィールドをキーで正規ソートした JSON に対する ed25519 署名が付いています。公開鍵は /pubkey で提供され、get_verifier_info 経由でも取得できます。また、すべての判定には、判定を生成したプロンプトとキャリブレーションを正確に特定するエンジンダイジェストが含まれています。オフラインで検証できるため、通信経路も、販売元も、私たちも信頼する必要はありません。
見逃しを含む、リアルタイムの未加工実行統計: scrapecheck.fly.dev/stats。合格だけを表示する検証ツールは、何も示していません。
支払いフロー(インバンド x402)
標準的な @x402/mcp v2 フローです。無料利用枠を超えた未払いの呼び出しは、ツールの結果として PaymentRequired チャレンジを返します。任意の x402 v2 クライアントで支払いを行うと(例:EVM 署名者を使った @x402/mcp の wrapMCPClientWithPaymentFromConfig)、再試行された呼び出しは判定とオンチェーン決済情報を _meta["x402/payment-response"] で返します。支払いが拒否または失敗した場合、判定は返されません。また、判定の生成に失敗した場合は決済されません。料金が発生するのは、作業が完了した場合のみです。
インテグレーター向けメモ
- 署名済み判定オブジェクト全体は、通信上の
structuredContentに含まれます(また、content[0].text内の JSON としてバイト単位で同一です)。注:@x402/mcpの支払いクライアント向け簡易結果ではcontentのみが転送されます。その場合はcontent[0].textを解析するか、通常の MCP クライアントでstructuredContentを読み取ってください。 - 入力仕様(固定):
{ url, claim, asked }—claimはフィールド値のオブジェクトです。例:{"price": "£51.77", "in_stock": true}。 - 対象範囲(v1):サーバー側でレンダリングされたページです。クライアント側でレンダリングされた(JS のみの)コンテンツは
unverifiableを返します。誤ったfailや誤ったpassを返すことはありません。 - 検証結果はその時点のものです。
passは、取得時に主張された値がページ上にあったことを意味し、ページ自体が最新であることを示すものではありません。古さを示す情報があるページでも、主張された値が実際に存在すればpassになることがあります。 - 同じエンジンは、x402 HTTP API(
https://scrapecheck.fly.dev/verify)としても、バッチデータセット検証向けの Scrape QA Apify actor としても提供されています。エンジンは1つ、署名鍵は1つ、永続ログは1つです。
判定を自分で検証する(オフライン)
このリポジトリには、依存関係ゼロの検証ツールが含まれています。私たちも、通信経路も、このサーバーも信頼せずに、ScrapeCheck の判定を検証できます。
$ node tools/verify-verdict.mjs examples/verdict.json
(2 keys fetched from https://scrapecheck.fly.dev/pubkey — pass --pubkey to verify fully offline)
VALID: signature verifies (signed by k2, active)
verdict: pass (confidence 0.97)
verdict_id: 17aa1a39-0e3f-42a7-a3f4-3cbf664f9786
check_type: web_field_v1
engine: web_field_v1/0.2.1+6739b7f9ebf8
key_id: k2 (envelope claim matches the verifying key)
issuer: https://scrapecheck.fly.dev (embedded pointer; keys were checked against the pinned origin, never the embedded URL)
source_hash: sha256:b2025003076927098d4aaeeb2d7f41554299a8d6d68f060745b18a0527749bf8 — fingerprint of the normalized page text this verdict judged. Comparable between verdicts with the same engine digest; not independently recomputable today.
$ echo $?
0
# flip a single field — "verdict": "pass" -> "fail" — and run it again
$ node tools/verify-verdict.mjs tampered.json
(2 keys fetched from https://scrapecheck.fly.dev/pubkey — pass --pubkey to verify fully offline)
INVALID: signature does not verify against any of the 2 published keys — the verdict was altered, or was not signed by this service
$ echo $?
1
--pubkey を省略すると、現在の鍵を /pubkey から取得します。完全にオフラインで検証するには、鍵(ed25519:… 形式の文字列、または保存した /pubkey のレスポンス)を渡してください。
examples/verdict.json は実際の本番判定です。いずれかのフィールドを変更すると、検証に失敗します。判定が有効なのは、signature 以外のすべてのフィールドを含む正規化済み(再帰的にキーでソートされた)JSON に対して、ed25519 署名が検証された場合に限ります。MIT ライセンスです。関連する約40行のコードを、ご自身のパイプラインに自由に組み込めます。
2026年8月に追加されたエンベロープフィールド
新しい判定には、署名対象となるフィールドが3つ追加されています。key_id は、判定の署名に使われた /pubkey アーカイブ内の鍵を示します。これは参考情報です。署名は公開済みの鍵のいずれかで検証できるか、できないかのどちらかです。主張と検証に使った鍵が一致しない場合は、警告として表示されます。
verifier_url は、/pubkey と /verdicts を参照するための正規オリジンです。これは本来の場所を示すポインターであり、信頼の起点ではありません。検証ツールは、ドキュメント自身が提示する URL から鍵を取得してはなりません。そのため、当方の検証ツールは既知のオリジンを固定し、埋め込み値は表示と不一致警告にのみ使用します。
source_hash は、判定が実際に評価した正規化済みページテキストの SHA-256 であり、refetched_at 時点のページ状態を示すフィンガープリントです。同じエンジンダイジェストを持つ判定間ではハッシュの一致に意味がありますが、ダイジェストが異なる場合は参考程度にとどまります。また現時点では、独立して再計算するのではなく、判定同士を比較するためのものです。これらのフィールドが存在する前に発行された判定も、従来どおり正確に検証できます。
2026 年 8 月のキーのローテーション
2026 年 8 月 6 日、運用者のミスにより認証情報ファイルが外部のチャットチャンネルに投稿されたため、ed25519 署名キーが漏えいしたものとして扱いました。当社の方針では、信頼できないチャンネルに触れたキーは、誰かに使われたかどうかにかかわらず侵害されたものとみなします。この方針に従い、同日にキーをローテーションしました。
判定結果に影響はありません。署名の対象は判定ペイロードであるため、ローテーション前に発行された判定結果は変更されず、廃止されたキーでも引き続き検証できます。このキーは k1 として /pubkey で永久に公開されています。ローテーション後に発行された判定結果には k2 で署名しています。オフライン検証ツールは公開されているすべてのキーを試し、一致したキーを報告します。
k1 で署名された判定結果をお持ちの場合は、発行元を確認してください。 廃止されたキーによる有効な署名が証明するのは、そのキーで判定結果に署名したということだけです。当社が発行したことまでは証明しません。漏えいした秘密キーを持つ人なら誰でも、実在する verdict_id を再利用した偽造を含め、何にでも署名できるためです。そこで、発行記録を公開しています。
GET https://scrapecheck.fly.dev/verdicts/<verdict_id>
このエンドポイントは、その ID を当社が発行したかどうかと、利用可能な場合は signature_sha256(当社がその ID に対して発行した署名の SHA-256 ハッシュ)を返します。ed25519 は決定論的なため、お手元の署名のハッシュを計算して比較すれば、判定結果の正確な内容が当社のものと一致するか確認できます。一致すれば、それは当社が発行した判定結果、つまり同じ署名済みコンテンツです。一致しなければ、実在する ID を使った偽造コンテンツです。このエンドポイントは、判定結果の内容、クライアントのデータ、列挙可能な情報を一切返しません。--pubkey を指定せずに検証ツールを実行すると、k1 で署名された判定結果について、この確認が自動的に行われます。
正直にお伝えすべき制約が 1 つあります。 2026 年 8 月 6 日より前は署名ハッシュを記録していなかったため、ローテーション前の判定結果の大半は発行の確認はできますが、内容との紐付けはできません。これらは content_binding: "unavailable_legacy" を返し、検証ツールは確認済みではなく PARTIAL と報告します。公開前に公開されたアーティファクトからローテーション前の判定結果との紐付けが可能な場合、つまり、このリポジトリ内の例の判定結果のように、偽造者が書き換えられない公開 Git 履歴に署名が固定されている場合は、記録にその旨を示し、来歴を明記しています。当社が非公開で保持していたアーティファクトから復元した紐付けには available_backfilled と記載しています。紐付けの信頼性は、その根拠となるアーティファクトの来歴に左右されるためです。ローテーション前の判定結果はすべて当社自身に対して発行されており、外部の顧客が保有するものはありません。
この対応に伴う約束があります。 発行記録は公開されているため、記録された判定結果を削除することはできません。当社が実際に署名した判定結果について issued: false と報告するのは、自らの履歴について嘘をつくことになります。そのため、記録の保持は運用上の選択ではなく、信頼に関する取り決めの一部となりました。
今回の漏えいによって生じた影響は、旧秘密キーを持つ人が、旧公開キーで検証できる偽造判定結果を作成できたことです。すでに発行された判定結果を改ざんすることはできず、このキーによってサービス、ログ、資金にアクセスすることもできません。偽造された判定結果は確認されていません。
これは設計どおりに機能した手続きです。また、自らのインシデントを隠す検証ツールは検証ツールとは言えないため、ここに記録しています。
このリポジトリについて
このリポジトリに含まれるのは、トランスポート、決済処理、ツール登録のみを担う薄い MCP ストアフロントです。検証エンジン(固定した参照先の再取得、レンズ、判定機能、署名キー、ベンチマーク用フィクスチャ)は ScrapeCheck のオリジンで実行され、このコードベースには含まれていません。
変更履歴
- 2026-08-13 — ライブ統計ページでは、当社自身のテストトラフィックが合計に含まれていました。現在は自社分、クローラー分、外部分を分けて表示します。
/statsにtrafficセクションを追加し、両方の数値を公開しています。これには、この変更時点ではゼロで、今後も名称が変更されないexternal_paidも含まれます。自社トラフィックには、これまでも永続ログでラベルが付いていました。公開画面にもその情報が表示されるようになりました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。