mcpField
V
ViewportWitness by Apex Labs

ViewportWitness by Apex Labs

リモート
qa.honeygate.app開発ツール05 日前に更新
リポジトリ公式サイト

ViewportWitness by Apex Labs について

ViewportWitness は Agent 向けのリモート Web サイト QA サービスで、公開 HTTPS ページをスマートフォンとデスクトップのビューポートで検査します。スクリーンショット、アクセシビリティとレイアウトの指摘を返し、アサーション、表示比較、Markdown 抽出、セキュリティ確認にも対応します。

主な機能

  1. 013 種類のビューポートでスクリーンショットを撮影
  2. 02アクセシビリティとレイアウトの問題を報告
  3. 03読み取り専用のページアサーションを実行
  4. 04ベースラインと表示を比較
  5. 05公開ページを Markdown に抽出
  6. 06リリースのセキュリティ制御を確認

活用シーン

  1. 01公開前にデプロイ済みサイトを確認
  2. 02画面サイズごとのレスポンシブレイアウトを検査
  3. 03状態を変更せずにページ条件をテスト
  4. 04リリースを保存済みベースラインと比較

MCP 対応

リモート MCP インターフェースを通じて、有料の Web サイト QA ツールを公開します。公開 HTTPS ページを対象とし、有料操作では x402 による支払いを利用します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://qa.honeygate.app/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

6
パラメーター型必須説明
urlstringはい公開 HTTPS ページの URL。プライベート、ループバック、認証情報を含む URL、および HTTPS 以外の URL は拒否されます。

詳細

Apex Labs の ViewportWitness

承認前に、デプロイ済みのウェブサイトを確認しましょう。 ブラウザーのセットアップなしで、3 種類の画面サイズにおけるスクリーンショット、アクセシビリティ、レイアウトの証拠を取得できます。対象は公開 HTTPS ページのみです。

無料のサンプルレポート · 支払い不要の予算プレビューから始める

サンプルは、ローカルテスト用の静的なデモです。この変更がデプロイされると、公開 URL を利用できるようになります。

リソース消費を抑えた2つの有料エージェントツールが、ブラウザー QA を補完します。extract_page は、公開 HTML ページを1つ、決定論的な Markdown に変換します($0.005 USDC)。web_release_gate は、公開ページ1つのリリースセキュリティ制御を受動的に確認します($0.05 USDC)。どちらも Base/Solana x402 の決済レール、冪等性保護、単一ワーカーのキュー、7日間のレポートライフサイクルを共有します。呼び出し元が指定する HTML、認証情報、Cookie、カスタムヘッダー、アップロード、プライベートネットワークのターゲットは受け付けません。

AI エージェントによるブラウザー QA 用のリモート MCP サーバー兼 x402 API です。公開 HTTPS URL を送信すると、スマートフォンとデスクトップのビューポートにわたるスクリーンショット、アクセシビリティに関する指摘、レイアウト分析、構造化 JSON を取得できます。

ライブサービスは https://qa.honeygate.app にあります。標準レポートは $0.08 USDC、読み取り専用アサーションは $0.10、ベースラインとの比較は $0.12 です。ローカルインスタンスは、支払いなしのテストモードで実行できます。


ライブサービス

# Probe the live service (returns 402 with payment requirements)
curl -s -X POST https://qa.honeygate.app/v1/checks \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://example.com"}'

# Payment discovery
curl -s https://qa.honeygate.app/.well-known/x402 | jq .

# Agent skill manifest
curl -s https://qa.honeygate.app/skill.md

有料リクエストには、x402 対応クライアント(資金を入れたウォレットで @x402/fetch を使用するなど)をお使いください。 エージェント向けの完全な利用ガイドは、llms.txt をご覧ください。


有料製品の使用例

有料エンドポイントへの通常の HTTP リクエストは HTTP 402 を返します。これはネットワーク、資産、金額、送金先アドレスを含む x402 チャレンジです。 (資金を入れたウォレットで @x402/fetch を使うなどの)x402 対応クライアントはチャレンジに対する支払いを行い、自動的に再試行します。その結果、コードは成功時の JSON を受け取ります。以下の例はリクエストの形式のみを示しています。開発中はライブサービスを呼び出したり、支払いを送信したりしないでください。ローカルでは PAYMENT_MODE=test を使用してください(ローカル開発を参照)。

POST /v1/checks — 0.08 USDC

公開 HTTPS URL を送信すると、スマートフォンとデスクトップのビューポートにわたるスクリーンショット、アクセシビリティに関する指摘、レイアウト分析、ブラウザーエラーを取得できます。

// x402-aware client pays the 402 challenge and retries automatically
const { id, pollUrl } = await fetch402('https://qa.honeygate.app/v1/checks', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ url: 'https://example.com' }),
}).then((r) => r.json())
// Poll GET pollUrl until { status: 'complete' }
POST /v1/verify — 0.10 USDC

稼働中の公開 HTTPS URL に対して、明示的な読み取り専用アサーションを実行します。ワーカーが実行するのは、状態を変更しない確認だけです。フォームの送信や、購入・削除コントロールのクリックは行いません。

const { id, pollUrl } = await fetch402('https://qa.honeygate.app/v1/verify', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    url: 'https://example.com',
    assertions: [
      { type: 'selectorVisible', selector: 'h1' },
      { type: 'titleIncludes', value: 'Example Domain' },
    ],
  }),
}).then((r) => r.json())
POST /v1/compare — 0.12 USDC

現在のレンダリングをベースラインジョブと比較します。baselineJobId には、3つすべてのビューポート(phonePortrait、phoneLandscape、desktop)のスクリーンショットを含む、完了済みで有効期限内の ViewportWitness チェックを指定する必要があります。ベースラインの有効期限は7日間です。ベースラインジョブが保留中または失敗している場合、あるいはいずれかのビューポートのスクリーンショットが欠けている場合、リクエストは拒否されます。

const { id, pollUrl } = await fetch402('https://qa.honeygate.app/v1/compare', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    url: 'https://example.com',
    baselineJobId: 'JOB_ID_FROM_PREVIOUS_CHECKS',
  }),
}).then((r) => r.json())

安全性:公開 HTTPS URL のみを受け付けます。ループバック、プライベート、リンクローカル、メタデータのアドレスは、すべてのホップでブロックされます。ブラウザーワーカーは状態を変更しません。フォームの送信や、状態を変更する操作は行いません。


ローカル開発

npm install
npx playwright install chromium
cp .env.example .env
npm run dev
# Create a check (test mode — no payment required)
curl -s -X POST http://localhost:3000/v1/checks \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://example.com"}' | jq .

# Poll result
curl -s http://localhost:3000/v1/checks/JOB_ID | jq .status

# Get screenshot
curl -o desktop.png http://localhost:3000/v1/checks/JOB_ID/screenshots/desktop

ローカル環境のデフォルトは PAYMENT_MODE=test です。テストモードでは CDP キーは不要です。結果には paymentMode: "test" とラベルが付けられ、実際の支払い決済を表すものではありません。


API

MethodPathDescription
GET/サービス情報
GET/health稼働確認プローブ
GET/ready準備状況確認プローブ(DB + ワーカー)
GET/openapi.jsonOpenAPI 3.1 仕様
GET/llms.txtエージェント向け利用ガイド
GET/skill.md簡潔なエージェントスキルマニフェスト
GET/privacyプライバシーポリシー
GET/terms利用規約
GET/logo.pngディレクトリおよび連携用ロゴ
GET/.well-known/x402決済情報の検出
POST/v1/checksQA チェックジョブを作成
POST/v1/verify明示的な読み取り専用アサーションを確認
POST/v1/compare有効期限内のベースラインジョブと比較
POST/mcpx402 有料ツールを備えたリモート MCP インターフェース
GET/v1/checks/:idジョブのステータスを確認/レポートを取得
GET/v1/checks/:id/screenshots/:viewportスクリーンショット PNG をダウンロード
GET/v1/checks/:id/diffs/:viewport比較差分 PNG をダウンロード
ページ履歴アーカイブ(デフォルトでは無効)

ARCHIVE_ENABLED=true の場合、完了したすべての check、verify、compare レポートは、7 日間のジョブ保持期間を超えて保存される別のアーカイブ(ARCHIVE_DIR)にもコピーされます。エージェントは、指定した公開 URL 1 件について過去のスナップショットをリクエストできます。アーカイブには公開ページの証拠(スクリーンショット、検出結果、判定)のみが保存され、ジョブ ID、決済データ、呼び出し元のアサーション、ベースライン参照は除外されます。

MethodPathDescription
GET/v1/history/availability?url=無料:スナップショットの件数と期間を確認
POST/v1/history有料(HISTORY_PRICE_USDC、デフォルトは 0.02):一覧を取得
GET/v1/history/snapshots/:idアーカイブ済みスナップショット全体(有料一覧で取得した ID を指定)
GET/v1/history/snapshots/:id/screenshots/:viewportアーカイブ済みスクリーンショット PNG

POST /v1/history は { "url": "https://example.com", "limit": 5, "before": "<ISO time>" } を受け取り、nextBefore カーソルとともに新しい順でスナップショットを返します。スナップショットが存在しない URL への署名済みリクエストは、決済が確定する前に 404 no_snapshots を返します。上限は .env で設定します: ARCHIVE_RETENTION_DAYS(90)、ARCHIVE_MAX_STORAGE_GB(5)、ARCHIVE_MAX_SNAPSHOTS_PER_URL(30)、 HISTORY_MAX_RESULTS(10)。

ビューポート:phonePortrait(375×812)、phoneLandscape(812×375)、desktop(1440×900)


支払いモード

モード支払いの要否ネットワーク
test不要—(ローカル開発のみ)
testnet必要(x402)Base Sepolia;オプションで Solana Devnet
production必要(x402、$0.08 USDC)Base mainnet;オプションで Solana mainnet

本番モードには、ENABLE_MAINNET_PAYMENTS=true とレビュー済みリリースが必要です。 Solana は別途、デフォルトで無効になっています。有効にするには、ENABLE_SOLANA_PAYMENTS=true、公開テスト用および収益受取用の送金先、ファシリテーター機能の確認、独自の決済テストが必要です。 アプリケーションは PAYMENT_MODE に応じて適切な送金先を選択します。 有料モードでは、32 文字以上の非公開の CUSTOMER_HASH_SECRET も必要です。これは、リピート利用の測定に使う、安定した一方向の顧客ラベルを作成するためのものです。支払者のウォレットアドレスは保存されません。 アトリビューションはベストエフォートで行われ、支払い確認後の配信を妨げることはありません。このシークレットを変更すると新しい測定シリーズが開始されますが、過去のジョブは書き換えられません。 有効化の手順については、docs/RUNBOOK.md を参照してください。


テストの実行

npm test              # unit tests (no browser required)
npm run test:e2e      # local e2e (requires Playwright Chromium)
npm run typecheck     # TypeScript strict check

Docker

docker compose build
docker compose up -d
curl http://localhost:3000/health

さらに詳しく


MIT ライセンス

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。