mcpField
V
voyager-browser

voyager-browser

ローカル
github.com/dir-aiブラウザ自動化014 週間前に更新

voyager-browser について

voyager-browserは、ライブURLを限定的に調べる読み取り専用のウェブページ観察ツールです。静的HTMLを解析し、ページの構造・セキュリティ・アクセシビリティを報告し、JavaScriptは実行しません。

主な機能

  1. 01静的HTMLページの検査
  2. 02セキュリティとCookieの確認
  3. 03フォームとリンクのリスク検出
  4. 04アクセシビリティの手掛かり確認
  5. 05信頼できない内容の明示
  6. 06SSRF対策付き読み取り専用取得

活用シーン

  1. 01ページのセキュリティヘッダー確認
  2. 02フォームやリンク設定のリスク検出
  3. 03基本的なアクセシビリティ確認
  4. 04スクリプトを実行せずURLを調査

MCP 対応

MCPクライアント向けに`observe_page`ツールを公開し、単一URLを観察してページの検出結果を返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"dir-ai-voyager-browser": {
"command": "npx",
"args": [
"-y",
"@dir-ai/voyager-browser"
]
}
}
}
起動コマンドnpx -y @dir-ai/voyager-browser

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@dir-ai/voyager-browser0.7.0

ツール

1

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
urlstringはい観察する単一の http(s) URL。
maxBytesintegerいいえ
timeoutMsintegerいいえ
authorizedbooleanいいえ自身のプライベート/ループバック/イントラネット対象(ステージング環境、内部アプリ)を観察する場合は true に設定します。プライベートアドレス範囲を許可しますが、クラウドメタデータとリンクローカルは引き続き拒否します。デフォルトの false はパブリック URL のみです。
discoverPathsbooleanいいえ上限付きの同一オリジン読み取り専用 GET によって、既知の機密パスを受動的に検出します(確認済みの特徴のみフラグ付け)。デフォルトは true。スキップするには false に設定します。

詳細

@dir-ai/voyager-browser

Voyager のウェブページ感覚。 稼働中の URL 1 件を安全に読み取り専用で観察し、構造、フォーム、リンク、スクリプトの配信元、セキュリティ態勢(HTTPS/HSTS/CSP/混在コンテンツ/Cookie)、アクセシビリティの指標(lang、画像の alt の網羅率、見出しの順序)を確認します。それぞれに修正案を説明しますが、適用はしません。

静的 HTML を解析します。JavaScript は実行せず、ヘッドレスブラウザーも使用しません。そのため、確認できることとできないことを正直に示します(クライアント側 SPA の実行時の状態はレンダリングしません)。ページ内のテキストはすべて、信頼できないものとして明示して返されます。SSRF 対策として、http(s) 以外の URL と、プライベート、ループバック、クラウドメタデータのアドレスに解決される URL は拒否します。

Voyager ファミリーの感覚の 1 つです。すべての感覚と同じく読み取り専用であり、フォームの送信やクリック、変更は一切行いません。

インストール

npm i -g @dir-ai/voyager-browser

使い方

voyager-browser observe https://example.com
voyager-browser observe https://example.com --json
https://example.com/
https://example.com — 200; 3 finding(s), worst: medium. 0 form(s), 1 link(s).

  title: Example Domain
  security: https  ·  a11y lang:yes alt:n/a

  med   HTTPS without HSTS
        ↳ add Strict-Transport-Security: max-age=63072000; includeSubDomains
  med   no Content-Security-Policy
        ↳ add a Content-Security-Policy to constrain scripts/resources
  low   no X-Content-Type-Options: nosniff
        ↳ add X-Content-Type-Options: nosniff

MCP サーバーとして

ツールは observe_page の 1 つです。

{ "command": "voyager-browser", "args": ["mcp"] }

ライブラリとして

import { observe } from '@dir-ai/voyager-browser'

const brief = await observe('https://example.com')
console.log(brief.summary)
console.log(brief.security)   // { https, hsts, csp, mixedContent, thirdPartyScripts, … }
console.log(brief.forms)      // insecure / cross-origin / sensitive flags
console.log(brief.findings)   // severity + described fix

確認項目

  • セキュリティ態勢(有無だけでなく品質も確認) — 平文 HTTP、HSTS の未設定/脆弱な設定、CSP の未設定、または脆弱と評価される CSP(unsafe-inline/unsafe-eval/ワイルドカード/object-src なし/base-uri なし)、クリックジャッキング対策の未設定(X-Frame-Options/frame-ancestors)、nosniff、Referrer-Policy、Permissions-Policy の未設定、バージョンが漏れる Server/X-Powered-By、HTTPS ページ上の混在コンテンツ(プレフィックスではなくオリジンを比較)、Cookie ごとの Secure/HttpOnly、サブリソース整合性のないサードパーティスクリプト。
  • フォーム — HTTPS ページ上のフォームが平文 HTTP に送信される(critical)、機密性の高いフォーム(パスワード/支払い)がクロスオリジンまたは HTTP 経由で送信される、機密性の高い POST に CSRF 対策トークンがない、機密データが GET で送信される。
  • リンク — 外部リンクの target="_blank" に rel="noopener" がない(リバースタブナビング)。
  • 本文コンテンツの漏えい — ディレクトリ一覧(Apache/nginx の autoindex)、言語固有のスタックトレース(Python/Java/PHP/Node/Oracle/SQLSTATE/MySQL)、レスポンス本文で開示される詳細なフレームワークデバッグページ(Werkzeug/Flask、Rails、Symfony/Whoops、ASP.NET YSOD)。それぞれ、一致したシグネチャ(信頼できないものとして明示)を示します。
  • 露出した JWT — HTML、レスポンスヘッダー、Set-Cookie、同一オリジンのバンドルで見つかった JWT 形式のトークンをデコードし(ヘッダー+ペイロード、base64url、署名検証なし、秘密情報のクラッキングなし)、alg:none(critical)、期限切れ(exp が過去)、または exp の欠落を検出します。クレーム値は信頼できないものとして明示します。
  • 一般的な機密パスの受動的な検出 — 短い固定リスト(/.git/config、/.env、/.svn/entries、/.DS_Store、/config.json、/wp-config.php~、/backup/、/uploads/)に対し、同一オリジンで範囲を限定した読み取り専用の GET を行い、本文のシグネチャが確認された場合のみ検出します。単なる 200 では検出しません。検証済み IP に固定し、--authorized に従います。--no-discovery で無効にできます。
  • アクセシビリティ — <html lang> の未設定、alt のない画像、見出しレベルの飛ばし、ラベルのないフォームフィールド。
  • レンダリングの正確な説明 — render: static | hybrid | client-heavy フィールドを含みます。ページのコンテンツが JavaScript でレンダリングされる場合は、その旨を概要で示し、シェルを問題なしと報告するのではなく PARTIAL とマークします。
  • 構成のヒント — @dir-ai/voyager/@dir-ai/voyager-net で検証すべきサードパーティスクリプトの配信元。

安全性

  • 読み取り専用です。 1 回の GET でページを取得し、送信、クリック、変更は行いません。
  • コードは実行しません。 静的な HTML の解析のみを行い、ページの JavaScript は実行しません。
  • SSRF を防止し、IP を固定します。 http(s) のみを受け付け、URL は 1 つだけです(リストや認証情報は不可)。ホストを解決し、すべてのアドレスを正規の方法で分類します(IPv4 マップド IPv6、未指定、CGNAT、NAT64、リンクローカル、プライベート、ループバック、メタデータはすべて拒否されます)。また、接続先を検証済みの IP に固定するため、チェックから取得までの間に DNS リバインディングで内部アドレスに差し替えられることはありません。リダイレクトの各段階で再検証し、IP を再固定します。
  • 設計上、信頼できないデータとして扱います。 要約に含まれる、所有者が管理するすべての文字列(タイトル、見出し、メタデータ、リンク、フォームのアクション、フィールド名)は、インジェクションを除去して枠で囲みます。エージェントはこれらを指示ではなくデータとして扱う必要があります。
  • 取得量に上限があります。 ヘッダーと本文に共通の期限を適用し、本文のバイト数にも上限を設けます。読み取りが途中で切れた場合は信頼度を下げ、「問題なし」と報告することはありません。
  • 限界を正直に示します。 サーバーが送信した内容を読み取ります。クライアント側でレンダリングされた状態は確認できません。そのため、render フィールドで確認できた範囲を正確に示します。

ロードマップ

  • v0.3 — 同一オリジンの JS バンドルの静的スキャン(公開されたシークレット/エンドポイント/ソースマップ)、サードパーティ/トラッカー/Cookie の一覧表示と技術スタックのフィンガープリント、WCAG に対応したアクセシビリティの詳細な分析、およびページの観察結果を @dir-ai/voyager-agent のミッション(ページ → ホスト → 依存関係チェーン)に取り込む CognitiveClaim アダプター。
  • v1.0 — 真の SPA/レンダリング済み DOM の網羅性を実現する、オプトインかつ同意に基づく --render サンドボックス化ヘッドレス処理(ネットワーク分離、リソース上限付き)。出力には常にレンダーモードであることを明記します。また、安定した検出結果の kind 分類体系と、完全なセキュリティ態勢スコアも導入します。

方針は変わりません。voyager-browser は、すでに提供されているものをさらに読み取ることで機能を拡張し、サーバーに対してさらに操作を行うことはありません。送信、ファジング、プロービングなどの能動的な操作は、別の同意に基づく機能に任せます。

Voyager ファミリー

パッケージ感覚
@dir-ai/voyagerWeb — 検証済みのインターネット検索
@dir-ai/voyager-browserWeb ページ — 稼働中の URL を 1 つ観察
@dir-ai/voyager-repoコード — リポジトリ内の状況を把握
@dir-ai/voyager-netホスト — 許可されたホストを監査
@dir-ai/voyager-contract感覚が共有する認知契約
@dir-ai/voyager-agent感覚を組み合わせる唯一のエージェント

ライセンス

MIT © dir-ai

コメント

MCP は初めてですか?

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

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