Svipall について
Svipallは、エージェントや開発者向けのローカルRust製MCPサーバー兼CLIで、Webコンテンツの取得、抽出、検索、クロールを行います。Markdownと構造化された観察結果を返し、サードパーティのAPIキーなしでブロック検出や抽出品質を報告します。
主な機能
- 01WebページをMarkdownとして抽出
- 02設定した上限内でサイトをクロール
- 03APIキーなしで検索
- 04抽出品質と検出したブロックを評価
- 05リストや表を行データに解析
- 06CLIとローカルREST APIを提供
活用シーン
- 01ブラウザ確認画面のあるページを読み要約
- 02ドキュメントサイトをMarkdownコーパス化
- 03リストや表のデータを行として収集
- 04ページやCSS領域の変化を監視
MCP 対応
MCPクライアントに、Web取得、クロール、検索、キャプチャ、ブラウザー操作などのツールを公開します。ツールはWebコンテンツをローカルで処理し、検出したチャレンジと抽出品質ラベルを報告します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
門ごとに、異なる顔を。
お使いのマシンで動作する、AI エージェント向けのウェブ閲覧。
Rust 製の MCP サーバー兼 CLI で、ウェブページを Markdown に抽出し、
設定された制限内でサイトをクロールし、API キーなしで検索し、
対応するチャレンジへの対処を試み、対処できなかったものは明確に伝えます。
インストール · ユースケース · 検証結果 · ツール · Captcha · REST API · 比較 · よくある質問

1 台のマシンでの実際の実行を再生しています。記録方法と生のキャプチャーはこちら。
すべてローカルで動作します。サードパーティの API キー、有料の CAPTCHA サービス、テレメトリーは一切ありません。 ウェブリクエストはアクセス先のサイトに送信され、結果は接続先のエージェントまたはクライアントに届きます。
Svipall はページをローカルで取得・レンダリングし、そのコンテンツを抽出して、検出したチャレンジと抽出品質のラベルを報告します。それでもブロックされるサイトはあり、成功したように見える応答にも、不完全なレコードやページの外枠しか含まれない場合があります。そのため、公開されている比較では、HTTP ステータスやツール自身の判定とは分けて、有用なコンテンツを監査しています。
Svipall を選ぶ理由
| 問題点 | Svipall |
|---|---|
エージェントが「ブラウザーを確認しています」という画面を読み取り、記事として要約してしまいます。ステータスコードは 200 だったため、何も検知されません | 12 種類のブロックを、それぞれが示す動作の名前で分類します。検知されたブロックには明示的な判定が付与されます。分類はヒューリスティックです[詳細](docs/features.md#judging-what-came-back) |
| 5,000 ページをクロールしても、どのページを残す価値があるのか分かりません | 評価済みのページには品質と重複に関する所見が付与されます。品質ラベルによってページが破棄されることはありません[詳細](docs/features.md#judging-what-came-back) |
| 1 ページで、生の HTML が 300,000 トークンになります。対処のための 4 つの手作業を、今後は自分でこなさなければなりません | デフォルトでクリーンな Markdown を出力します。必要に応じて、行形式のテーブル、ディスクへの out_file、サイト独自の JSON API のキャプチャを利用できます[詳細](docs/features.md#reading) |
| 有料のソルバーを使わずに、対応している CAPTCHA の解決を試みたいと考えています | 15 種類のウィジェットファミリーと 11 種類の回答方式に対応しています。すべてローカルで処理されます。ビルドによってはオプションでビジョンモデルを利用でき、未解決のチャレンジには人間向けのダッシュボードを利用できます[詳細](docs/captcha.md) |
成功したアクセス、失敗、不完全な抽出、却下された変更を記録します。過去のベンチマークログと現在の比較では、異なる採点ルールと構成を使用しています。これらの違いは[結果セクション](docs/proof.md)で説明しています。
Rust · MCP + CLI + REST · Node、Python、API キー不要 · ローカルでの保存と処理
[インストール](#install)
[比較表](#how-svipall-compares)では、他のプロジェクトについて、公開されている対応範囲を説明しています。
インストール
以下のどの方法でも、この README が説明するツリーからビルドされた最新の[リリース](https://github.com/ilien-dev/svipall/releases)をインストールできます。`svipall doctor` を実行すると、インストール済みのビルドが、そのマシンで実行できる機能を報告します。
[README の事実確認レビュー](bench/experiments/native-auto-candidate2-20260907/readme-factual-audit.md)には、ソースの確認内容、ドキュメントの修正内容、このレビューの限界を記録しています。
エージェントを使ったセットアップ、Claude Code プラグイン、または手動インストールから選択してください。
すでに使っているエージェントに依頼する
Claude Code、Cursor、Codex、opencode、またはコマンドを実行できるその他のツールに、これを貼り付けてください。
Install and configure Svipall by following the instructions here:
https://raw.githubusercontent.com/ilien-dev/svipall/main/docs/install.md
このページでは、エージェントがプラットフォームを検出して検証できるよう案内します。その後、希望する統合方法として CLI + Skill(推奨、コンテキスト使用量が少ない)または MCP + Skill(MCP ツールの全機能)を尋ねます。また、すべてのプロジェクトを設定するか現在のプロジェクトだけを設定するかを確認し、スキルを MCP の登録と見なすのではなく、選択した設定を検証します。Svipall がすでにインストールされている場合は、インストール済みのバージョンと最新バージョンを表示し、統合を書き込む前に共有ユーザー用インストールを更新するか現在のバージョンを維持するかを尋ねます。セットアップの完了可否は、エージェント、クライアントの設定、利用可能な権限によって異なります。
Claude Code:プラグインをインストールする
/plugin marketplace add ilien-dev/svipall
/plugin install svipall@svipall
/svipall:setup
/svipall:setup は、バイナリが見つからない場合にインストールし、サーバーが応答するかを確認して、すべてのプロジェクトで Claude がウェブにアクセスする方法として Svipall を設定するかどうかを尋ねます。これらの各操作を行う前に確認を求めます。
/svipall:doctor は、インストールの機能を報告します。/svipall:update は、インストール済みと最新のリリースを表示し、選択した場合にのみバイナリを更新します。/svipall:uninstall は、セットアップによる登録、メモリー、厳格モードの変更を削除するかどうかを尋ねます。バイナリの削除とデータの削除は、別々に選択できます。
自分でインストールする
ツールチェーンもコンパイルも不要で、1 行で実行できます。
curl -fsSL https://raw.githubusercontent.com/ilien-dev/svipall/main/install.sh | sh # macOS, Linux
irm https://raw.githubusercontent.com/ilien-dev/svipall/main/install.ps1 | iex # Windows
パッケージマネージャーを使う方法や、コンテナイメージを使う方法もあります。
brew install ilien-dev/svipall/svipall # macOS, Linux
scoop bucket add svipall https://github.com/ilien-dev/scoop-svipall && scoop install svipall
docker pull ghcr.io/ilien-dev/svipall:latest # or :slim, the http tier only; see container notes
npx --yes svipall doctor # if node is already there
cargo install svipall # from source; add `svipall models install` for the models
インストーラーは可能な場合にチェックサムを検証し、不一致があればインストールを停止します。チェックサムファイル、エントリ、またはハッシュ計算ユーティリティが見つからない場合は警告のみが表示されるため、正常終了しただけではアーカイブが検証済みである証拠にはなりません。出力を確認してください。インストール先にすでに別のバージョンがある場合、インストーラーはバイナリがすべてのハーネスで共有されていることを示し、置き換える前に確認を求めます。
新しいリリースがある場合、Svipall はセッションごとに一度だけその旨を知らせます。次のコマンドを実行すると、インストールに使ったチャンネルで両方のバイナリを更新し、手動でコピーしたスキルも更新できます。
svipall update # --check only compares versions
その後、Svipall を使っているすべてのセッションを終了し、再度開いてください。エージェントから同じ操作を行う方法については、docs/update.md を参照してください。
プラットフォームごとのビルド、各環境に含まれるもの、ソースからのビルド、あらゆる MCP クライアントへの接続方法については、docs/install.md をご覧ください。ターミナルから何かをインストールしたことがない場合は、前提知識を必要としないこのセクションが GET-STARTED.md です。
あとは、やりたいことを頼むだけです
貼り付けるキーも、作成するアカウントもありません。
「このページを読んで、料金を要約してください。」 「このドキュメントをクロールして、
llms.txtを作成してください。」 「この出品ページを監視して、価格が変わったら教えてください。」 「この表の全行を CSV で取得してください。」
アシスタントは、公開されているツールから選択できます。人の目による確認が必要な、サポート対象のチャレンジは http://localhost:8787/human の人間向けダッシュボードに送られます。
または、シェルから操作する
svipall fetch https://example.com/article
svipall fetch https://shop.example/item --query "shipping costs"
svipall fetch https://docs.example/api --schema auto # rows from a listing you've never seen
svipall crawl https://docs.example/ --pages 50 --out pages.csv
svipall search "rust async runtime" --engine all
svipall snapshot https://news.ycombinator.com # the page as roles and refs, not markup
svipall serve --port 8788 # the same server as a local REST API
データを扱うコマンドは、完了すると stdout に 1 つの JSON オブジェクトを、診断情報を stderr に出力するため、出力を jq に渡せます。serve は長時間実行されるサーバーで、ヘルプは stderr に出力されます。
返される内容
content 文字列を短くした、svipall fetch https://example.com の過去の実行例です。現在の自動フェッチでは、identity_used に加えて、報告すべき内容がある場合は以下で説明するフォールバックフィールドも返されます。
{
"attempts": ["http: 200 (170ms) OK"],
"chars": 167,
"content": "# Example Domain\n\nThis domain is for use in documentation examples…",
"final_url": "https://example.com/",
"optimization": "ordinary",
"quality": "thin",
"quality_reasons": ["thin_text"],
"status": 200,
"tier_used": "http",
"title": "Example Domain",
"tokens_estimated": 42,
"url": "https://example.com"
}
tier_used は試行の度合いを、quality は実際に取得された内容を示します。ページを取得できなかった場合、同じオブジェクトに blocked_reason、wall_kind、wall_vendor、wall_evidence と、エージェントに次の対応を伝える note が含まれます。コミット済みのベンチマークレコードからそのまま抜粋した例です。
{ "wall_kind": "vendor", "wall_vendor": "kpsdk.io", "wall_evidence": "header x-kpsdk-ct" }
ブロックが検出された場合、返されたコンテンツとともに判定結果が含まれます。ブロックなしという判定の場合も、コンテンツの確認は必要です。分類器だけでは、要求されたレコードがすべて欠けることなく取得されたとは確認できないためです。
実際にできること
| したいこと | 動作 |
|---|---|
| ページをきれいに読む | web_fetch → ヒューリスティックによる不要要素の除去とサニタイズを施した Markdown を返します。query= は語彙的な関連度でテキストをランク付けします |
| 一覧を行に変換する | schema: "auto" はページ内で繰り返される構造を読み取り、列に名前を付けて型付きの行を返します。モデルも API 呼び出しも使わず、1 回の解析で完了します |
| データテーブルを取得する | tables=true → 型付きの行を返します。out_file: rows.csv でディスクに書き込めるので、何千もの行がコンテキストに入り込むことはありません |
| 動画の内容を読む | web_video → 視聴ページ、プレーヤーを埋め込んだページ、<video> のトラック、またはストリームマニフェストから、字幕とチャプターを [m:ss] 形式のタイムラインとして返します |
| スクレイピングを完全に省く | web_capture は、ページの読み込み時に取得された JSON(通常はサイトの実 API)を返します。?page=2 もすぐに利用できます |
| ドキュメントサイトをコーパスに変換する | llms.txt 出力、近似重複ラベル、再開可能なフロンティア、語彙的飽和による停止機能を備えた web_crawl。ページ数、トークン数、トラフィックの上限が適用されます |
| キーなしで検索する | web_search は DuckDuckGo、Bing、Brave をスクレイピングします。engine="all" は検索結果の一致度をもとに統合します |
| エージェントにクリック操作をさせる | web_snapshot(ロールと参照情報をトークンのわずかな消費で取得)に続いて web_act を使い、人間らしい入力でクリック、入力、スクロール、待機を行います |
| ブラウザーのチャレンジを試す | 自動ルーティングによって、より待機時間の長いブラウザー階層に切り替えられる場合があります。解決できないチャレンジや検出されたブロックは報告されますが、原因がリモート側にあるかどうかは常に特定できるとは限りません |
| ローカルで CAPTCHA の解決を試みる | 15 種類のウィジェットファミリーと 11 種類の回答方式に対応し、利用可能な場合はモデルもサポートします。スマートフォンから使いやすい人間向けダッシュボードもあります。有料のソルバーは使いません。ローカルの予算とリモート側の制限は引き続き適用されます |
| 一度ログインして、そのまま使い続ける | web_login は実際のウィンドウを開きます。ログインすると、エクスポート可能なプロファイルに Cookie が保存されます |
| ページを監視する | サーバーの実行中に、web_watch がページ全体または 1 つの CSS 領域を確認します。保存されたセレクターのフィンガープリントは、一部のデザイン変更からの復旧に役立つ場合があります |
| PDF と Office ファイルを読む | docx、xlsx、pptx、odt、epub、rtf、csv、pdf を、ウェブまたは file:// から Markdown として取得します |
| どの言語からでも操作する | svipall serve → 20 個のローカル REST ルートを、生成されるベアラーキーの背後で提供します。各ツールに 1 つずつ対応します |
対象ユーザー
| あなたは… | Svipall が提供するもの… |
|---|---|
| Claude Code、Claude Desktop、または Cursor のユーザー | 1 行のセットアップと、アシスタントが自動的に選ぶツール。調査、ドキュメント、価格比較、監視 |
| AI エージェントを構築する開発者 | 構造化出力、トークン予算、ファイルエクスポート、再開可能なクロールを備えたローカルウェブレイヤー。ライブウェブの結果は引き続き変動します |
| RAG またはデータセットを構築する人 | Markdown への上限付きサイトクロール、近似重複ラベル、llms.txt、評価対象ページの品質に関する所見 |
| データまたは調査に携わる人 | 「ブラウザーを確認しています」という画面の背後にあるページと、アクセスできない場合の正直な回答 |
| プライバシーを重視する運用担当者 | スクレイピング API、CAPTCHA ファーム、位置情報の検索、アップデート確認、テレメトリーはありません。追加でダウンロードされるのは、必要に応じて管理されるブラウザー(自動プロビジョニングは無効化可能)と、有効にしたブロックリストです |
| 自社サイトをテストするセキュリティまたは QA エンジニア | 生の実行ログがこのリポジトリにコミットされた再現可能なベンチマークと、どの階層が応答し、どの画面が表示されたかを記録するリクエストログ |
Svipall はお使いのハードウェア上で動作します。サーバーレス関数から curl できる URL が必要な場合は、ホスト型のスクレイピングサービスをお使いください。ご自身のエージェント内でウェブを使いたい場合、Svipall はその処理をローカルで行います。ブラウザートラフィックとオプションのダウンロードについては、プライバシーと安全性をご覧ください。
仕組みを簡単に説明すると
以下の手順では、エミュレーション階層について説明します。現在の自動ポリシーでは、サポートされているエミュレーション経路を昇格させ、条件を満たすネイティブのフォールバックを1つ追加できます。ウォール判定によって試行が終了する場合があります。コンテンツ品質ラベルだけでは、エスカレーションは発生しません。
- 新しい経路では、まず HTTP 経由でページをリクエストします。デフォルトのエンジンは、選択した Chrome のネットワーク特性をエミュレートします。上記の過去の
public31実行では、93個のセルのうち59個がこの階層で終了し、そのうち44個はベンチマークのルールでokと評価されました。この段階で終了した経路でも、ページが取得できたとは限りません。 - ページで JavaScript が必要な場合は、ブラウザーを開きます。ヘッドレス Chromium がスクリプトを実行し、レンダリング済みのドキュメントを返します。
- サイトがボットをチェックする場合は、身元を隠します。ステルス階層では、既知のブラウザーの特性をパッチし、エミュレートされた ID に合わせます。オフラインのプローブではこれらの特性を確認しますが、任意の検出器が受け入れることを保証するものではありません。
- サイトが人間による操作を求める場合は、人間のように振る舞います。
real階層では、画面外で動作する可視ブラウザーと永続プロファイルを使用します。ポインターを曲線に沿って動かし、ホイールでスクロールします。 - チャレンジがある場合は、回答するか、終わるまで待ちます。
warm階層では、制限時間内に CAPTCHA 戦略ループを実行し、自己検証型と認識されたインタースティシャルではポインター操作を避けます。クリアを保証するものではありません。 - ネイティブは最後の手段としてのみ使用します。条件を満たし、残りの予算内であれば、ネイティブブラウザーで1回だけ試行します。実際のデバイス特性が公開され、プライバシーに関する通知が表示されます。
- うまくいった方法を記録します。裏付けとなる観測結果が2件あると、同じコンテキストでの次回以降のアクセスに向けて、有用なエミュレーション経路を昇格できます。ネイティブで成功した場合でも、最後の手段のままです。
- 観測された失敗を報告します。利用可能な場合、ブロックされた結果には
blocked_reason、分類されたウォール、認識されたベンダーと証拠、および推奨される次の手順が含まれます。分類はヒューリスティックです。トランスポートエラーやローカルの予算による延期では、ページに関する証拠が少ない場合があります。
MCP ツール
すべてローカルで動作する29個のツールです。
| ツール | 説明 |
|---|---|
web_fetch | ページを Markdown または構造化 JSON として取得します。mode=auto は段階的に取得方法を試します。schema(自己修復)、tables、scroll、query、max_tokens/cursor、cache、include_metadata、include_links、include_quality、use_site_template、robots、out_file、mobile、text_only、isolated、css_selector、profile、proxy、method/body/headers を指定できます。URL には raw:<html>、または local_roots 配下の file:// も指定できます |
web_fetch_many | 多数の URL を並列数を制限して取得します。web_fetch と同様に schema と tables を指定できます。実際に異なる文書がセット内にいくつあるかを示す corroboration を報告し、重複する各文書に same_text_as を付け、異なる文書を先頭に移動します。順序を変更した場合は reordered_for_diversity を示します。変更を知らせずに結果の順序だけが変わると、呼び出し元に誤解を与えるためです |
web_search | API キーなしで DuckDuckGo、Bing、Brave を検索します。engine="all" は一致度に基づいて結果を統合します |
web_site_search | サイトの検索フォームを見つけ、可能であればクエリ URL のパターンを把握します。後続の取得には、引き続き通常のルーティングとポリシーが適用されます |
web_crawl | 同一ドメインをクロールします。robots.txt、重複排除、定型部分の除去、strategy=dfs、scroll、行の schema/tables、llms.txt、ファイルへのエクスポート、飽和時の停止、再開用の crawl_id に対応します |
web_map | クロールせずにサイトの URL を列挙します。robots.txt、サイトマップ(ネストされたインデックスと .gz を含む)、RSS/Atom フィード、ホームページのリンクを調べます。クロールに数千トークンかかるところを、サイト構造の把握には数百トークンで済みます |
web_snapshot | ページをロール、アクセシブルネーム、短い参照として取得します。これらは web_act で使用できます。決定論的に動作し、ビジョンモデルは使用しません |
web_act | クリック、入力、フィールドへの入力、キー押下、ホバー、選択、スクロール、待機、評価、移動、スクリーンショット、長押し、検証、コンソール操作を実行します。対応するポインター、キーボード、ホイール操作には動作レイヤーを使用し、eval は呼び出し元が指定した JavaScript を実行します |
web_capture | 時間と範囲を制限したブラウザー訪問中に、一致する JSON/ネットワーク応答を監視します。API の利用可能性と完全性は保証されません |
web_video | 動画の字幕(人間が作成した字幕があればそれを優先し、なければプラットフォームの自動字幕を使用します。lang が指定されている場合はその言語を使用します)とチャプターを、1 つのタイムラインとして取得します。既知のプレーヤーの起動時 JSON、JSON-LD の VideoObject、<track>、HLS/DASH の字幕レンディションを読み取ります。字幕の取得先がプレーヤー自身からのリクエストにしか応答しない場合は、実際にページを開いて借用したリクエストで読み取ります。frames を指定すると、映像が変化するキーフレームが追加されます。キーフレームはプレーヤーのストーリーボードから取得するか、サンプルフレームを比較して検出され、タイムライン内の PNG パスとして返されます。各フレームはページ自身の <video> 要素から読み取るため、プレーヤーのコントロールや字幕は含まれません。これを禁止する別オリジンのファイルは、代わりにスクリーンショットを取得し、その旨を注記します。広告が先に再生される場合は、フレームを取得する前にミュートして再生を終えます。字幕がなく、その背後にメディアファイルがある動画は、音声モデルがインストールされている場合、このマシン上で文字起こしされます(svipall models install)。暗号化されたストリームは drm として報告され、読み取られないため、フレームも取得されません |
browser_open / browser_do / browser_close | 呼び出しをまたいで Cookie とページの状態を維持する永続セッションです |
web_screenshot | レンダリングされたページの PNG を取得します。full_page または mobile を指定できます |
web_diff | Svipall が前回確認してからページ上で変更された内容を示します |
web_watch | 監視を保存し、サーバーの実行中に確認します。変更を取得するには、一覧表示または確認を行います。デザイン変更後の領域復元はヒューリスティックです |
web_notes | セッション終了後も保持されるキーと値のメモリです |
web_log | どのティアが応答したか、どの壁に遭遇したか、ドメインごとにかかった時間を示します |
web_login | 手動ログインまたはチャレンジ対応用の可視ウィンドウを開きます。Cookie はプロファイルに保存されます |
web_route | ドメインごとのプロキシ、または countries を指定した proxies のプールを設定します。サブドメインには設定が継承されます。exit_strategy は固定またはラウンドロビンを指定します。check=true はサードパーティーサービスを使わずに、出口の稼働状況、レイテンシ、DNS リークをテストします |
web_profile | 暗号化されたブラウザープロファイルをマシン間でエクスポート/インポートします |
web_status | 学習済みのティア、クールダウン、ルート、出口ごとの健全性とレイテンシ、プロファイル、開いているブラウザー、ソルバーの統計、応答するモデルとその取得元、ホストに実 GPU があるかどうか、h3_offered_by を示します |
browser_setup | Chrome for Testing をダウンロードまたは管理します |
solve_and_continue | ブロックされたページで CAPTCHA の解決を試み、結果のコンテンツまたは未解決の状態を返します |
solve_image_captcha / solve_recaptcha_v2 / solve_turnstile / solve_hcaptcha / captcha_status / report_captcha | CAPTCHA をローカルで解決します。ダッシュボードでは、対応するタスク向けに in.php / res.php / createTask / getTaskResult 互換のエンドポイントも公開されます。すべてのソルバークライアントオプションと完全な互換性があるわけではありません |
CLI
svipall fetch | crawl | snapshot | capture | search | map | log | notes | watch
profile | browser | route | status | serve | doctor | update | hook
config show | set | preset
solver export-corpus
quality ask | export-training | train
使用方法のテキストに、バイナリが応答するすべてのコマンドが記載されていることを確認するテストと、skill/SKILL.md がその両方と一致していることを維持するテストがあります。
REST API
同じサーバーを HTTP 経由で利用できるため、MCP クライアントやシェルを使わずに、あらゆる言語から操作できます。
svipall serve --port 8788 # the bearer key is printed once, and kept in ~/.svipall/api_key
curl -sH "Authorization: Bearer $KEY" -H 'content-type: application/json' \
-d '{"url":"https://example.com","query":"pricing"}' localhost:8788/v1/fetch
rest_port が設定されている場合、svipall-mcp は専用のリスナー上に同じルーターをマウントし、ブラウザープール、ページキャッシュ、ルートの証拠を MCP ツールと共有します。
ツールごとに 1 つ、合計 19 個のルートがあり、それぞれのツール固有の JSON を本文として受け取ります。
POST /v1/fetch /v1/fetch_many /v1/crawl | ページ |
POST /v1/search /v1/site_search /v1/map | 情報の検索 |
POST /v1/snapshot /v1/act /v1/capture /v1/screenshot | 実際のブラウザー |
POST /v1/solve_and_continue | ブロックされたページ上で解決する CAPTCHA |
POST /v1/diff /v1/watch /v1/notes /v1/log | メモリ |
POST /v1/route /v1/profile /v1/browser_setup | 設定 |
GET/POST /v1/status | このインストールが学習した内容です。GET は設計上読み取り専用です。3 つのクリア用フィールドにアクセスできるのは POST のみです |
GET /v1/health | キーが不要な唯一のルートです。コンテナーのヘルスチェックにキーは必要ありません |
ブロックされたページでも 200 が返されます。呼び出しは実行されましたが、ページの読み込みは実行されていません。blocked_reason、wall_kind、note は MCP 経由の場合と同様に本文に含まれることがあります。2xx 以外の応答には、不正な本文(400)、無効なキー(401)、ブラウザーの Origin または変更された Host(403)、2 MB を超える本文(413)、インストールの破損(500)などがあります。ジョブが見つからない場合は 404 が返されることがあり、ルーティングで未対応のパスやメソッドが拒否される場合もあります。再試行するかどうかを判断する前に、クライアントは HTTP ステータスとツールの結果の両方を確認する必要があります。
ループバック経由でも、すべてのツールルートとジョブルートでキーが必要です。例外は /v1/health のみです。ローカルポートだけでは境界になりません。Svipall はログイン済みのプロファイル、Cookie、出口アドレスを扱うため、そのポートにアクセスできるものはすべて、あなたになりすましてリクエストを送信できます。キーの前にはさらに 2 つのチェックがあります。127.0.0.1 にバインドしても、あなた自身のブラウザーで表示されたページが DNS から 127.0.0.1 の応答を受け取り、そこへ POST することは防げないためです。Origin ヘッダーを含むリクエストはすべて拒否され、ループバックにバインドしている場合は、ループバック以外の Host も拒否されます。CORS レイヤーはなく、今後も追加されません。この API のクライアントとなるブラウザーページはないためです。
10 個のツールは、3 つのグループに分けて意図的にルートから除外されており、その理由はそれぞれ rest.rs に記載されています。永続的なセッションのライフサイクルが現在の REST インターフェースの設計範囲外である browser_open/browser_do/browser_close、対話型ウィンドウも対象外である web_login、そしてクラシックなソルバーのワイヤー形式でダッシュボードポート上ですでに応答する 6 つの solve_*/captcha_status/report_captcha ツールです。29 個のツールからこれら 10 個を除いたものが、上記の 19 個のルートです。新しい #[tool] を追加すると、ルートとして登録するか、名前付きの除外として登録するまでテストスイートは失敗します。
長時間実行されるクロールはジョブとして実行され、接続を占有しません。"async": true を指定すると、ID とともに 202 が返されます。GET /v1/jobs/{id} で状態を確認し、GET /v1/jobs/{id}/stream で Server-Sent Events として追跡し、DELETE で停止できます。ID は crawl_id なので、覚える必要があるハンドルは 1 つだけです。再開には {"crawl_id": "…"} を指定します。これは MCP ツールと CLI ですでに使われているのと同じ名前です。キャンセルされたクロールは、そのページのリンクをキューに追加した後、ページ間で停止するため、フロンティアは保持されます。ブラウザーページがリークするため、強制終了はしません。プロセスが強制終了されたジョブは interrupted になり、interrupted のジョブは再開できます。ストリームの最初のフレームは常にストアからのスナップショットです。そのため、ページ 40 で参加した購読者に、ジョブがゼロから始まったと通知されることはありません。また、対象サイトですでに 1 つのジョブが実行中の場合、キューに入ったジョブは保留されます。同じサイトへの 2 つのクロールを同時に実行すると、そのホストに対する 1 つのアドレスの評判を 2 倍の速さで消費してしまいます。これはローカル専用ツールが持つリソースの中で、最も希少なものです。仕様の全文は docs/rest.md を参照してください。
Svipall の比較
以下は、2026-09-07 に確認した一次資料に基づくプロジェクトの対象範囲です。 機能を網羅した比較でも、直接対決形式のパフォーマンステストでもありません。
| プロジェクト | 文書に記載された主な用途 |
|---|---|
| Svipall | ローカルの Rust CLI、MCP および REST サーバー。範囲を限定した自動ルーティング、コンテンツラベル、人間によるフォールバックを備えたローカルでのチャレンジ試行 |
| Firecrawl | ホスト型とセルフホスト型の選択肢を備えたウェブスクレイピング/クロール API。オープンソース版とクラウド版では提供内容が異なります |
| Crawl4AI | ブラウザー抽出機能を備えた Python クローラー。API と MCP にアクセスできる Docker サーバーも提供します |
| Scrapling | セッション/プロキシ制御と MCP 統合を備えた、Python による適応型解析、フェッチャー、スパイダー |
| Playwright MCP | 構造化されたアクセシビリティスナップショットを使用する、MCP 経由のブラウザー自動化 |
上記の過去のベンチマークは、これらのプロジェクトに対する現在の優位性を示すものではありません。 必要な統合方法に基づいて選び、実際に対象とするページで検証してください。
その他のすべて
このファイルは概要版です。ここで省略されている内容は、以下のドキュメントにすべて記載されています。
| インストール | すべてのプラットフォーム、各環境で提供されるもの、ソースからのビルド、任意の MCP クライアントへの組み込み |
| 証拠 | 公開されているすべての数値と、それを再現するコマンドおよびログ。失敗例も含みます |
| 機能 | ツールごとの全機能 |
| CAPTCHA | 15 種類のウィジェットファミリー、11 種類の回答方式、いずれも機能しない場合の動作 |
| 設定 | ~/.svipall 内のすべてのキーと、変更に伴うコスト |
| REST API | 19 個のルート、ジョブルート、ステータスコードの意味 |
| 抽出 | ページが Markdown になる仕組みと、3 つのコーパスを基準に測定した変換精度 |
| プライバシーと安全性 | このマシンから外部に送信されるものと、送信されないもの |
| 制限事項 | 意図的に明記された制限事項 |
| アーキテクチャ | クレートの構成と、それらが分離されている理由 |
| 開発 | ビルド、テスト、ベンチマーク |
| FAQ | |
| 終了コード | スクリプト向けの、バイナリが返す値 |
| モデル | 組み込みの重み、そのライセンスとサイズ |
| Firefox · HTTP/3 · ベンチマーク | エンジニアリングに関するメモ |
| 変更履歴 · 貢献 · CLA · 免責事項 |
名前の由来
Svipall は『グリームニルの歌』第47節に登場するオーディンの名前の一つです。Bellows は、翻訳メモで「The Changing」と訳しています。 このプロジェクトでは、姿を変えることのイメージとしてその名前を使っており、不可視性を保証するものではありません。
エミュレートされた ID の考え方もこれに基づいています。セッション中は、マシン、ブラウザー、ネットワークフィンガープリント、入力動作の一貫性を保ち、拒否されたセッションは破棄します。 一方、ネイティブフォールバックでは、実際のブラウザー/デバイスの特性を使用します。どちらのポリシーも、サイトがアクセスを受け入れることや、過去のアクセスと関連付けられないことを保証するものではありません。
ライセンス
AGPL-3.0-onlyが適用されます。配布に関する条件およびリモートネットワークとのやり取りに関する第13条を含む、LICENSEの規定に従ってください。以下のコンポーネントのライセンスとリンク例外も適用されます。この段落は、これらの規定に代わるものではありません。
抽出エンジンであるcrates/svipall-extractは、どのようなライセンスのプロジェクトからも依存できるよう、意図的にMIT OR Apache-2.0としています。crates/svipall-cdpは上流のライセンス条件(chromiumoxide、MIT OR Apache-2.0)を維持し、crates/svipall-quicは独自のライセンス条件(quiche、BSD-2-Clause)を維持します。デフォルトのビルドでは、AGPL第7条の明示的なリンク例外に基づき、BoringSSLをリンクします。これらの内容はNOTICEおよびTHIRD-PARTY-NOTICES.mdに記載されています。
コントリビューションはCLA.mdに基づいて受け付けます。コントリビューターは自身の成果物の著作権を保持し、メンテナーに、別の条件でも公開できる十分に広範なライセンスを付与します。公開リリースには引き続きAGPL-3.0-onlyが適用されます。AGPL以外のライセンスをご希望の場合は、[email protected]までご連絡ください。
商標
Svipallの名称とSvipallのロゴは、作者の商標です。これらはAGPLのライセンス対象ではなく、このリポジトリのいかなる内容も、それらの使用許諾を与えるものではありません。
ライセンスで使用できるのはコードです。名称は使用できません。AGPLに基づき、自由に実行、調査、変更、フォーク、再配布できます。改変版を配布する場合は、別の名称を使用し、ロゴを使わないでください。ダウンロードした人が、誰が作成したのか、何が含まれているのかについて誤解しないようにしてください。
このプロジェクトでは、プロジェクトがSvipallを使用している、Svipallと連携する、またはSvipallのフォークである、といった説明目的の参照を、推奨を示唆しない範囲で認めています。
免責事項
Svipallは現状有姿で提供され、保証も責任もありません。また、Svipallを使用してアクセスするシステムについて、いかなる許可も付与しません。法律、データ保護規則、およびサイトの利用規約を遵守する責任は、作者ではなく運用者にあります。自分の所有物ではない対象に対して実行する前に、DISCLAIMER.mdをお読みください。
キーワード:ウェブスクレイピング · ウェブクローラー · MCP サーバー · Model Context Protocol · Claude Code · Claude Desktop · Cursor · AI エージェントツール · LLM のウェブ閲覧 · LLM 対応 Markdown · HTML から Markdown への変換 · RAG データパイプライン · ボット対策の回避 · Cloudflare の回避 · Turnstile · Akamai · PerimeterX · DataDome · Kasada · CAPTCHA ソルバー · ローカル CAPTCHA 解決 · ヘッドレスブラウザー · ステルスブラウザー · ブラウザーフィンガープリント · TLS フィンガープリント JA4 · Chrome の偽装 · HTTP/3 QUIC · プロキシローテーション · Rust · Playwright の代替 · Firecrawl の代替 · Crawl4AI の代替 · Scrapling の代替 · ローカルファースト · セルフホスト可能 · プライバシー · API キー不要
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。