Robin: AI-Powered Dark Web OSINT について
Robin は、ダークウェブ向けの AI 支援型 OSINT ツールです。Tor 経由でオニオン検索エンジンを検索してページを取得し、選択したモデルで結果を絞り込んで調査サマリーを作成します。合法的な調査とセキュリティ研究を目的とし、Web UI または MCP サーバーとして利用できます。
主な機能
- 01Tor 経由でダークウェブ検索エンジンを検索しページを取得
- 02複数の LLM プロバイダーと OpenAI 互換 API に対応
- 03インタラクティブな調査のための Streamlit Web UI
- 04保存済み調査データに基づくフォローアップ質問
- 05Docker によるデプロイ構成
活用シーン
- 01ダークウェブ関連テーマの合法的な OSINT 調査
- 02MCP 対応エージェントの自身のモデルを使った調査の実行
- 03後で確認するための調査レポートの保存
MCP 対応
Robin は MCP サーバーとして動作し、MCP クライアントは自身のモデルでそのツールを呼び出せます。検索とページ取得は Tor 経由で行われ、レポートは investigations フォルダーに保存されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Robin:AI を活用したダークウェブ OSINT ツール
Robin は、ダークウェブの OSINT 調査を行うための AI を活用したツールです。LLM を利用して検索クエリを改善し、ダークウェブ検索エンジンの検索結果を絞り込み、調査の概要を提供します。
インストール • MCP としての Robin • トラブルシューティング • コントリビューション • 謝辞
アーキテクチャ

特徴
- 🤖 マルチモデル対応 – OpenAI、Claude、Gemini、Mistral、OpenRouter、Ollama、または OpenAI 互換 API(LM Studio、llama.cpp、Groq など)を利用できます。
- 🌐 Web UI – インタラクティブな調査を行える Streamlit ベースのインターフェースです。
- 🔌 MCP 対応 – MCP に対応する任意のエージェントから、そのエージェント独自のモデルを使って Robin を実行できます。MCP としての Robin をご覧ください。
- 💬 会話形式の追加質問 – 検索を再実行せずに、調査で得られたデータに基づいて調査に関する追加質問を行えます。
- 🔀 ワンクリックで調査を展開 – 調査結果から提案される追加の検索クエリをクリックすると、新しい調査を開始できます。
- 🐳 Docker 対応 – クリーンで分離された環境で使用できる、推奨の Docker デプロイ方法です。
⚠️ 免責事項
このツールは、教育および合法的な調査目的に限って使用することを想定しています。特定のダークウェブコンテンツへのアクセスやその利用は、管轄区域によっては違法となる場合があります。本ツールの誤用、または本ツールを使用して収集したデータについて、作者は一切責任を負いません。
責任を持って、自己責任でご利用ください。OSINT 調査を行う前に、関連するすべての法律および組織のポリシーを遵守していることを確認してください。
また、Robin はサードパーティ API(LLM を含む)を利用します。機密情報を含む可能性のあるクエリを送信する際は注意し、利用する API やモデルのプロバイダーの利用規約を確認してください。
インストール
メモ
検索を実行するには、ツールに Tor が必要です。Linux/Windows(WSL) では
apt install tor、Mac ではbrew install torで Tor をインストールできます。インストール後、Tor がバックグラウンドで実行されていることを確認してください。
ヒント
API キーは
.envファイル(.env.exampleをコピー)または環境変数で指定してください。キーは 1 つで十分です。Robin は、検出したプロバイダーのモデルを一覧表示します。対応しているキーはOPENAI_API_KEY、ANTHROPIC_API_KEY、GOOGLE_API_KEY、MISTRAL_API_KEY、OPENROUTER_API_KEYです。Ollama の場合、
.envに設定する項目はありません。Robin はデフォルトでhttp://host.docker.internal:11434を使用します。これは推奨される Docker インストールに必要な設定です。次の 2 点はご自身で設定してください。
--add-host=host.docker.internal:host-gatewayを指定してコンテナーを実行します(README のコマンドにはすでに指定されています)。- Ollama がすべてのインターフェースでリッスンするようにします。デフォルトでは
127.0.0.1にバインドされるため、コンテナーからアクセスできません。手動で起動する場合は、OLLAMA_HOST=0.0.0.0 ollama serve &を実行します。systemd で実行している場合は、sudo systemctl edit ollama.serviceを実行し、[Service]とEnvironment="OLLAMA_HOST=0.0.0.0"を追加してから、sudo systemctl daemon-reload && sudo systemctl restart ollamaを実行します。それでも表示されない場合は、TROUBLESHOOTING.md を参照してください。
それ以外の OpenAI 互換プロバイダー(LM Studio、llama.cpp、Groq など)では、サイドバーの 🔌 Custom API Provider エクスパンダーを使用してください。
.envの変更は不要です。ベース URL、任意の API キー、そしてプロバイダーが自動検出用の/v1/modelsを公開していない場合は任意のモデル名を入力します。
Docker[推奨]
- 最新の Robin Docker イメージをプルします
docker pull apurvsg/robin:latest
- 実行するフォルダーに、API キーを記載した
.envファイルを作成します(.env.exampleを参照)。初回実行前に作成してください。ファイルがない場合、Docker はその場所に空のフォルダーをマウントし、Robin はキーなしで起動します。
touch .env # then add your API key to it
- 次のように Docker イメージを実行します。
docker run --rm \
-v "$(pwd)/.env:/app/.env" \
--add-host=host.docker.internal:host-gateway \
-p 8501:8501 \
apurvsg/robin:latest
ヒント
Docker の再起動後も保存した調査を保持するには、名前付きボリュームまたはローカルディレクトリーを
/app/investigationsにマウントします。名前付きボリュームはすべての OS で同じように動作し、ホストのパスも不要です。また、Robin as MCP のエージェントコマンドがマウントするボリュームでもあるため、UI にはエージェントが保存したレポートと同じものが表示されます。
docker run --rm \ -v "$(pwd)/.env:/app/.env" \ -v robin-investigations:/app/investigations \ --add-host=host.docker.internal:host-gateway \ -p 8501:8501 \ apurvsg/robin:latestJSON ファイルを自分のディスクに保存したい場合は、ローカルディレクトリーをマウントします。
docker run --rm \ -v "$(pwd)/.env:/app/.env" \ -v "$(pwd)/investigations:/app/investigations" \ --add-host=host.docker.internal:host-gateway \ -p 8501:8501 \ apurvsg/robin:latest調査は作業ディレクトリー内の
investigations/フォルダーに保存され、サイドバーの Past Investigations パネルから読み込めます。Docker がフォルダーを root として作成しないように、あらかじめフォルダーを作成してください(
mkdir -p investigations)。コンテナーは UID 1000 で実行されます。Linux では、それ以外のユーザーが所有するフォルダーはコンテナーから読み取り専用となるため、Robin は警告を 1 回表示し、保存に失敗しますが、調査自体は実行されます。この問題が発生した場合、またはご自身の UID が 1000 でない場合は、上記の名前付きボリュームを使用するか、Linux で保存した調査が permission denied で失敗する場合を参照してください。
- ブラウザーを開き、
http://localhost:8501にアクセスします
自分でビルドする
公開済みのイメージではなく自分でビルドしたものを実行するには、リポジトリーをクローンして ビルドします。
docker build -t robin .
その後、同じ実行コマンドで apurvsg/robin:latest を robin に置き換えて使用します。
docker run --rm \
-v "$(pwd)/.env:/app/.env" \
--add-host=host.docker.internal:host-gateway \
-p 8501:8501 \
robin
docker run --rm \
-v "$(pwd)/.env:/app/.env" \
-v "$(pwd)/investigations:/app/investigations" \
--add-host=host.docker.internal:host-gateway \
-p 8501:8501 \
robin
- ブラウザーを開き、
http://localhost:8501にアクセスします
MCP としての Robin
MCP に対応した LLM サービスであれば、独自のモデルを使って Robin を実行できます。以下のセクションでは、一般的なホストでの設定例を紹介します。一覧にないホストでも、「MCP サーバーを追加する」に相当する項目を使えば、同じように設定できます。
Claude Code
claude mcp add robin -- docker run -i --rm -v robin-investigations:/app/investigations apurvsg/robin mcp
または、プロジェクトの .mcp.json に追加してください。Tor を使った調査には数分かかるため、サーバーごとのタイムアウトを延長します。
{
"mcpServers": {
"robin": {
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "robin-investigations:/app/investigations", "apurvsg/robin", "mcp"],
"timeout": 600000
}
}
}
Codex
codex mcp add robin -- docker run -i --rm -v robin-investigations:/app/investigations apurvsg/robin mcp
ChatGPT デスクトップアプリもこのホストを共有しています。Settings → MCP servers で Robin を追加すると、同じ設定が書き込まれ、ツールは通常の ChatGPT チャットではなく Codex セッションに表示されます。
Tor 検索には通常数分かかるため、Codex のデフォルトの MCP ツールタイムアウトを超える場合があります。~/.codex/config.toml で上限を引き上げてください。
[mcp_servers.robin]
command = "docker"
args = ["run", "-i", "--rm", "-v", "robin-investigations:/app/investigations", "apurvsg/robin", "mcp"]
tool_timeout_sec = 600
startup_timeout_sec = 60
# Only for non-interactive runs (`codex exec`): Codex declines MCP tool calls
# that would need approval, so pre-approve Robin's read-only tools.
default_tools_approval_mode = "approve"
最初の起動時にダウンロードも行われないよう、先にイメージを取得してください(docker pull apurvsg/robin:latest)。
Claude Desktop
claude_desktop_config.json に追加して、アプリを再起動してください。
{
"mcpServers": {
"robin": {
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "robin-investigations:/app/investigations", "apurvsg/robin", "mcp"]
}
}
}
Hermes
~/.hermes/config.yaml に追加してください。
mcp_servers:
robin:
command: docker
args: [run, -i, --rm, -v, "robin-investigations:/app/investigations", apurvsg/robin, mcp]
timeout: 600
OpenClaw
openclaw mcp add robin --command docker --arg run --arg -i --arg --rm --arg -v --arg robin-investigations:/app/investigations --arg apurvsg/robin --arg mcp
または、設定の mcp.servers の下に追加してください。
{
"mcp": {
"servers": {
"robin": {
"transport": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "robin-investigations:/app/investigations", "apurvsg/robin", "mcp"],
"requestTimeoutMs": 600000
}
}
}
}
ChatGPT
デスクトップアプリの Settings → MCP servers では、アプリ、Codex CLI、IDE 拡張機能が共有する Codex ホストを設定します。そこで Robin を追加すると、Codex セッションに表示されます。詳しくはCodexを参照してください。通常の ChatGPT チャットでは Robin を実行できません。チャットは、MCP サーバーにアクセスする際、ユーザーのマシン上ではなく OpenAI のインフラストラクチャ上で動作するコネクターを経由するためです。
セキュリティ
- シェルに何かを送信、実行、起動することはありません。書き込まれるのは保存済みレポートのみで、Robin が選んだファイル名で
investigations/に保存されます。エージェントがパスを指定することはありません。 - 検索、ページのスクレイピング、検索エンジンの健全性チェックは Tor 経由で行われるため、使用中のアプリがダークウェブのページを直接取得することはありません。モデルプロバイダーへの呼び出しとモデルリストの更新は、Tor を経由せずに直接行われます。
- スクレイピングしたテキストは、信頼できないデータを示す区切りの中に入れて返されます。その前に、制御文字、ゼロ幅文字、双方向テキスト制御文字を除去するため、モデルはその内容を指示ではなく証拠として読み取ります。
謝辞
- アイデアは、Thomas Roccia と、そのデモ Perplexity of the Dark Web から着想を得ました。
- ツールは、私のリポジトリ OSINT Tools for the Dark Web から着想を得ました。
- LLM プロンプトは、リポジトリ OSINT-Assistant から着想を得ました。
- ロゴは友人の Tanishq Rupaal がデザインしました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。