webcap について
webcapは、ウェブページのキャプチャ、データ抽出、監査を行うHTTPサービス兼MCPサーバーで、定期的なページ監視にも対応します。無料プレビューとx402による有料ツールを提供し、リモートエンドポイントまたはローカルのstdioサーバーとして動作します。
主な機能
- 01スクリーンショットとスクロール動画を取得
- 02ページデータを構造化して抽出
- 03SEOとリンクの状態を監査
- 04サイトマップとクロールからURL一覧を作成
- 05定期監視とアラート通知
- 06無料プレビューとx402決済に対応
活用シーン
- 01目視確認用にウェブページをキャプチャ
- 02後続処理向けにページ内容を抽出
- 03サイトのSEOとリンクを監査
- 04ページ変更を監視してWebhook通知を受信
MCP 対応
MCPサーバーは、リモートのStreamable HTTPエンドポイントまたはローカルのstdioプロセスで利用できます。無料・有料ツールを提供し、決済が設定されていない有料呼び出しにはx402の決済チャレンジを返します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://webcap.shoutsid.fyi/mcpclaude mcp add --transport http shoutsid-lab-webcap https://webcap.shoutsid.fyi/mcp{"mcpServers":{"shoutsid-lab-webcap":{"type":"http","url":"https://webcap.shoutsid.fyi/mcp"}}}Cursor で開く{"servers":{"shoutsid-lab-webcap":{"type":"http","url":"https://webcap.shoutsid.fyi/mcp"}}}VS Code で開く{"mcpServers":{"shoutsid-lab-webcap":{"type":"http","url":"https://webcap.shoutsid.fyi/mcp"}}}{"mcpServers":{"shoutsid-lab-webcap":{"serverUrl":"https://webcap.shoutsid.fyi/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
webcap
あらゆるURLのスクリーンショットを撮影し、構造化データを抽出し、ページの変更を監視できます — すべて単一のHTTP API呼び出しで実行できます。アカウントもAPIキーも不要で、呼び出しごとの従量課金です。
GET /v1/extract/preview?url=... → Free preview (title, headings, links)
POST /v1/x402/capture → PNG/JPEG/PDF screenshot + persistent link
POST /v1/x402/extract → Structured JSON (title, headings, markdown)
POST /v1/x402/video → Scroll-capture video (WebM/VP8)
POST /v1/watches → Scheduled monitoring with webhook alerts
料金:スクリーンショット1回あたり$0.001 · 抽出バッチ1回あたり$0.01 · サブスクリプションなし、最低利用額なし。
webcapを選ぶ理由
| 機能 | webcap | スクリーンショットAPI(一般的なもの) |
|---|---|---|
| 料金 | スクリーンショット1回あたり$0.001 | スクリーンショット1回あたり$0.01~0.10 |
| アカウントの必要性 | なし | あり |
| APIキー | なし | あり |
| 支払い方法 | カード(Stripe)または暗号資産(USDC) | クレジットカードのみ |
| バッチ対応 | 1回の支払いで最大50件のURL | 限定的 |
| セルフホスト可能 | はい(Docker) | いいえ |
| オープンソース | はい(MIT) | いいえ |
機能
| エンドポイント | 内容 | 料金 |
|---|---|---|
POST /v1/x402/capture | PNG/JPEG/PDF形式のスクリーンショット(base64)+ 永続的な公開成果物リンク + OGメタデータ | $0.001 |
POST /v1/x402/extract | JSON形式の構造化されたページデータ:タイトル、説明、見出し、段落、リンク、画像、単語数、Markdown。1回の支払いで最大50件のURLをバッチ処理できます。 | $0.01 |
POST /v1/x402/audit | SEOの基本情報 + リンクとOGの状態を1回の呼び出しで確認 | $0.002 |
POST /v1/x402/map-lite | サイトマップ/robotsからURL一覧を取得 + 1ホップのクロール(最大50件のURL) | $0.002 |
POST /v1/x402/video | ページをスクロールしながらWebM/VP8動画としてキャプチャ | $0.005 |
POST /v1/watches | スケジュール監視を作成(作成は無料、100回分のパックを前払い) | $0.10~$1.00/パック |
Bearerトークン方式(署名キー不要)
同じ製品をAPIキーでも利用できます。POST /v1/register
({"address"} → {apiKey})で登録し、POST /v1/invoice経由で通常のUSDC送金を行って残高を追加した後、
Authorization: Bearer <apiKey>を指定して
POST /v1/extract、POST /v1/audit、POST /v1/map-lite、POST /v1/video、
POST /v1/analyze、またはPOST /v1/analyze/batchにリクエストを送信します。呼び出しごとに1クレジットが必要です。呼び出しが200を返さなかった場合はクレジットが返金されます。残高がない場合は、1クレジット分の追加購入用請求書とともに402を返します。監視の残高も同じ方法で追加します:
POST /v1/watches/{id}/topup {"runs": 100}(captureパックは10クレジット、extractパックは100クレジット)。完全な仕様はGET /openapi.jsonを参照してください(タグ:accounts)。
無料エンドポイント(支払い不要)
| エンドポイント | 説明 |
|---|---|
GET /v1/extract/preview?url=... | 範囲を限定したプレビュー:タイトル、見出し、リンク、単語数(IPあたり10リクエスト/分) |
GET /v1/og?url=... | Open Graphのリンクプレビュー用メタデータ |
POST /v1/watches | スケジュール監視を作成(無料。追加購入で前払い) |
GET /v1/health | 稼働状況の確認 |
POST /v1/feedback | webcapに内容を伝える(マシンまたは人間):{"message":"…","category?"?:"bug|suggestion|pricing|docs|integration|other","endpoint"?:"…"}。アカウント不要、レート制限は60回/時。人間向けフォーム:GET /feedback |
クイックスタート
MCP サーバーとして使用する(エージェントランタイム)
webcap には MCP サーバーが組み込まれているため、どの MCP ホスト(Claude Desktop、Cursor、エージェントフレームワーク)からでもツールとして呼び出せます。接続方法は 2 つあります。リモートエンドポイント(インストール不要)またはチェックアウトしたソースの stdio サーバーです。
リモートエンドポイントはエージェントにとって最も手軽な方法です。インストールも、パッケージレジストリも、アカウントも必要ありません。
{
"mcpServers": {
"webcap": { "url": "https://webcap.shoutsid.fyi/mcp" }
}
}
POST /mcp は MCP Streamable HTTP(HTTPS 経由の JSON-RPC 2.0)で通信します(サーバーは SSE ストリームを開かないため、GET は意図的に 405 を返します)。ウォレットを保持していないため、呼び出し元に代わって支払いを行うことはありません。無料ツールはそのまま実行され、有料ツールは、クライアント自身が決済するための有効な x402 402 チャレンジを返します。このエンドポイントは /.well-known/mcp-tools.json および openapi.json にも記載されています。
公式 MCP Registry には io.github.shoutsid-lab/webcap として登録されているため、レジストリを参照するランタイムは、この README がなくても検出できます。
curl -s 'https://registry.modelcontextprotocol.io/v0/servers?search=webcap'
stdio サーバーはローカルで実行され、有料の呼び出しを自動で決済できます。無料ツールには設定は不要です。有料ツールを自動決済するには、Base メインネットの USDC キーを WEBCAP_MCP_WALLET_KEY に設定してください(ガス代不要 — 支払者が EIP-3009 に署名し、ファシリテーターがガス代を負担します)。キーがない場合、有料ツールはホストが支払うための x402 402 チャレンジを返します。ウォレットを使わない場合は、代わりに運営者が資金を入金したアカウントキーを WEBCAP_MCP_API_KEY に設定してください(POST /v1/register の後、POST /v1/invoice で入金します)。有料ツールは残高から 1 クレジットずつ請求されます。ウォレットを設定している場合は、キーよりも優先されます。
ソースをチェックアウトした場合は、npm ci && npm run build を実行してから、args をその dist/mcp/stdio.js に指定してください。
{
"mcpServers": {
"webcap": {
"command": "node",
"args": ["/absolute/path/to/webcap/dist/mcp/stdio.js"],
"env": { "WEBCAP_MCP_WALLET_KEY": "0x..." }
}
}
}
(npm run mcp は TypeScript を直接実行するため、ビルド手順は不要です。)npm リリース名は @shoutsid/webcap になります。スコープなしの webcap という名前は無関係なパッケージが使用しており、まだ公開されていません。そのため、それまでは上記のリモートエンドポイントがインストール不要の選択肢です。
ツールは全部で 8 つです(すべて /.well-known/openai-tools.json および /.well-known/mcp-tools.json にも記載されています)。
- 無料:
webcap_service_catalog(すべての有料エンドポイントと料金、ネットワークと payTo、支払い方法、呼び出し元に残っている無料利用枠)、webcap_preview(範囲を限定したプレビュー)、webcap_og - 有料:
webcap_capture(png/jpeg/pdf のスクリーンショットまたは PDF、あるいは mp4/webm のスクロール動画 — 常に WebM/VP8 で記録)、webcap_extract(単一 URL または最大 50 件の一括処理)、webcap_audit、webcap_map_lite、webcap_analyze
無料利用枠はツールではなく、利用枠です。5 つの有料ツールのいずれかを未払いで呼び出すと、実際の製品が無料で実行され、IP ごとのローリング期間(デフォルトでは 24 時間あたり 50 回)の対象になります。ウォレット、署名、アカウントは不要です。すべてのレスポンスには現在の利用状況を示す x-webcap-allowance-* ヘッダーが含まれ、利用枠を使い切ると、同じ呼び出しに対して通常の x402 402 チャレンジが返されます。呼び出しに失敗しても利用枠は消費されません。WEBCAP_ALLOWANCE_CALLS、WEBCAP_ALLOWANCE_WINDOW_HOURS、WEBCAP_ALLOWANCE_GLOBAL_LIMIT で調整できます。
フィードバックはツールではなく REST の窓口です:POST /v1/feedback。
スクリーンショットを撮影する
# 1. POST without payment → HTTP 402 + a PAYMENT-REQUIRED header
curl -si -X POST "https://webcap.shoutsid.fyi/v1/x402/capture" \
-H 'content-type: application/json' \
-d '{"url":"https://example.com/"}'
# 2. Decode the base64 challenge → sign a gasless EIP-3009 transfer → retry with PAYMENT-SIGNATURE
JavaScript(x402 自動決済を使用)
import axios from 'axios';
import { x402Client, wrapAxiosWithPayment } from '@x402/axios';
import { ExactEvmScheme } from '@x402/evm';
import { privateKeyToAccount } from 'viem/accounts';
// Needs USDC on Base mainnet (no ETH needed — facilitator pays gas)
const payer = privateKeyToAccount(process.env.PAYER_KEY);
const client = new x402Client().register('eip155:*', new ExactEvmScheme(payer));
const api = wrapAxiosWithPayment(
axios.create({ baseURL: 'https://webcap.shoutsid.fyi' }),
client,
);
// Capture a screenshot (auto: unpaid → 402 → sign → retry)
const { data } = await api.post('/v1/x402/capture', { url: 'https://example.com', format: 'png' });
console.log(data.artifact.url); // persistent public screenshot link
Python
import os
from x402 import X402Client
from x402.schemes import ExactEvmScheme
from eth_account import Account
payer = Account.from_key(os.environ["PAYER_KEY"])
client = X402Client().register("eip155:*", ExactEvmScheme(payer))
response = client.post(
"https://webcap.shoutsid.fyi/v1/x402/capture",
json={"url": "https://example.com", "format": "png"},
)
print(response.json()["artifact"]["url"]) # persistent public screenshot link
構造化データを抽出する
# Single URL
curl -s -X POST "https://webcap.shoutsid.fyi/v1/x402/extract" \
-H 'content-type: application/json' \
-d '{"url":"https://example.com"}'
# Batch (up to 50 URLs, one payment covers the whole batch)
curl -s -X POST "https://webcap.shoutsid.fyi/v1/x402/extract" \
-H 'content-type: application/json' \
-d '{"urls":["https://a.com","https://b.com"],"schema":"company name + tagline"}'
支払いの仕組み
現在の決済レールは暗号資産(x402、Base 上の USDC)です。アカウントも API キーも必要ありません。カード決済は運営者向けのオプションであり、ホスト型の機能ではありません。運営者が STRIPE_SECRET_KEY を設定するまでは、POST /v1/stripe/checkout は stripe_not_configured を返し、暗号資産決済の案内を表示します。(現在、https://webcap.shoutsid.fyi のホスト型デプロイではカード決済を利用できません。)
カード決済(Stripe、設定済みの場合)
- パック ID を指定して
POST /v1/stripe/checkoutを呼び出します。以降は Stripe Checkout が処理します。 - カード情報を入力します。クレジットがアカウントに即時追加されます。
- 以降の呼び出しでは API キー認証を使用します。
暗号資産による支払い(x402 — アカウント不要)
webcap は、HTTP 402 を基盤とするガス代不要・アカウント不要の決済プロトコル x402 v2 を使用します。
- 支払いなしで有料ルートに POST すると、HTTP 402 と、base64 形式の x402 v2 チャレンジを含む
PAYMENT-REQUIREDヘッダーが返されます。 - チャレンジを読み取ります。USDC の金額、加盟店のアドレス、チェーン情報が含まれます。
- ガス代不要の EIP-3009
transferWithAuthorizationに署名します(ご自身のウォレットから加盟店へ、指定金額を送金します)。ETH は不要です。ファシリテーターがトランザクションを送信し、ガス代を負担します。 - 署名済みペイロードを
PAYMENT-SIGNATUREヘッダーに含めて、同じリクエストを再試行します。ファシリテーターが USDC 残高を確認し、オンチェーンで決済して、結果を返します。
アカウントも、API キーも、クレジットも不要です。HTTP と、お好みの支払い方法だけで利用できます。
セルフホスティング
# Clone the repo
git clone https://github.com/shoutsid-lab/webcap.git
cd webcap
# Install dependencies
npm install
# Copy and configure environment
cp .env.example .env
# Edit .env with your settings
# Build and run
npm run build
npm start
リリース tarball からインストールする(npm レジストリのアカウント不要)
パッケージ化された MCP サーバーは GitHub のリリースアセットとしても配布されています。npm に公開せずに、ほかの npm 依存関係と同じようにインストールできます。
# npm 12+ (Node 24) blocks remote tarball URLs by default — opt in explicitly:
npm install --allow-remote=all https://github.com/shoutsid-lab/webcap/releases/download/v0.1.0/shoutsid-webcap-0.1.0.tgz
# npm <= 11 accepts the URL without the flag:
npm install https://github.com/shoutsid-lab/webcap/releases/download/v0.1.0/shoutsid-webcap-0.1.0.tgz
npx webcap-mcp # stdio MCP server
MCP ホストには、インストール不要の方法を引き続き優先してください。リモートエンドポイント https://webcap.shoutsid.fyi/mcp を指定します(ストリーミング可能な HTTP、パッケージ不要)。
Docker
docker compose build
docker compose up -d
Docker の構成には、ヘルスチェック、リソース制限、永続データボリュームが含まれています。詳細は docker-compose.yml を参照してください。
このスタックにはパブリックエッジも含まれています。cloudflared サービスが webcap Cloudflare トンネルを実行し、イングレス設定は cloudflared/config.yml、認証情報は CF_TUNNEL_TOKEN(.env)にあります。アプリはループバック以外に公開されないため、トンネルコンテナだけが接続経路になります。トンネルなしで docker compose up -d を実行すると、webcap.shoutsid.fyi は Cloudflare の 530 を返します。
docker compose ps cloudflared # Up, not Restarting
docker compose logs --tail 20 cloudflared # "Registered tunnel connection"
curl -s -o /dev/null -w '%{http_code}\n' https://webcap.shoutsid.fyi/v1/health # 200
ローカル開発(Anvil テストネット)
npm install
npm run chain:up # Starts Anvil with mintable USDC
WEBCAP_CHAIN=local \
WEBCAP_USDC_ADDRESS=$(jq -r .usdcContract /tmp/webcap-chain.json) \
WEBCAP_MERCHANT_ADDRESS=$(jq -r .merchant.address /tmp/webcap-chain.json) \
npm start
設定
すべての環境変数は .env.example に記載されています。主な変数は次のとおりです。
| 変数 | 説明 | デフォルト |
|---|---|---|
WEBCAP_CHAIN | ネットワーク:base、base-sepolia、または local | base-sepolia |
WEBCAP_PUBLIC_BASE_URL | アーティファクトリンク用の公開 URL | 必須 |
WEBCAP_X402_PRICE_USDC | スクリーンショット 1 枚あたりの価格(USDC) | 0.001 |
WEBCAP_X402_EXTRACT_PRICE_USDC | 抽出 1 回あたりの価格(USDC) | 0.01 |
X402_FACILITATOR_URL | 決済ファシリテーターのエンドポイント | https://x402.org/facilitator |
API リファレンス
OpenAPI 3.1 の完全な仕様:GET /openapi.json
エージェント向けの検出用エンドポイント:GET /.well-known/x402、GET /v1/x402/service、GET /llms.txt、GET /skill.md
テスト
npm test # full vitest suite (tests/**/*.test.ts, no exclusions)
npm run typecheck # Type checking
変更をリリースする前に、両方のテストに合格する必要があります。意図的にテスト数やファイル数を記載していません。これらの数値はこれまでに 2 回古くなっており(2 回目は読者が issue #1 で指摘しました)、誰も更新しない数値は、記載しないよりも問題だからです。npm test を実行すると最新の合計が表示されます。
記載内容の監査
npm run audit:claims # against localhost:8080
npm run audit:claims -- --base-url https://webcap.shoutsid.fyi # against a deployment
テストはコードを検証しますが、こちらは記載内容を検証します。README.md、/skill.md、/llms.txt を読み込み、記載されているすべての METHOD /path が実際に提供されていること、ドキュメントに記載されたすべての価格が 402 チャレンジの金額と一致すること、無料で利用できる範囲に記載された価格が有料ルートの価格と同じであることを確認します。失敗があるとゼロ以外の終了コードを返すため、デプロイのゲートとして使用できます。issue #1 は、手作業でこの確認を行ったエージェントによって報告されました。このコマンドは、同じ確認を実行します。
ライセンス
MIT — 詳細は LICENSE を参照してください。
リンク
- 稼働中の API: https://webcap.shoutsid.fyi
- GitHub: https://github.com/shoutsid-lab/webcap
- OpenAPI ドキュメント: https://webcap.shoutsid.fyi/openapi.json
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。