oculo について
oculoはMCPに対応するChromiumデスクトップブラウザーで、エージェントに実際のWebページを調査・操作させたい利用者向けです。12種類の簡潔なツールを備え、操作権限と応答内容を制御します。
主な機能
- 0112種類のブラウザー操作ツール
- 02ページ閲覧と構造化データ抽出
- 03複数ステップの自動化と再実行
- 04段階的な操作権限
- 05認証情報の暗号化保存と応答の秘匿化
- 06複数プロバイダー対応のAIチャット
活用シーン
- 01Webフォームの自動入力と送信
- 02ページ閲覧と検索結果の抽出
- 03ログインが必要なブラウザーワークフローの反復
- 04ヘッドレスモードでのブラウザー自動化
MCP 対応
oculoはHTTP MCPサーバー経由で12種類のブラウザーツールを公開し、Claude Code、Cursor、WindsurfなどのMCPクライアントが接続できます。ページが宣言するWebMCPツールの検出と呼び出しにも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
16掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| scope | string | いいえ | ページの特定セクションに説明範囲を限定する CSS セレクター |
| tabId | string | いいえ | ID で対象タブを指定します(並列実行用)。省略するとアクティブなタブが対象になります。 |
| detail | enum | いいえ | compact(デフォルト、約 30~80 トークン)、a11y(ref タグ付きアクセシビリティツリー、約 200~500 トークン)、または markdown(Readability による記事抽出)compact | a11y | markdown |
| include | array | いいえ | 含める内容:「forms」、「buttons」、「links」、「headings」、「text」、「images」 |
| screenshot | boolean | いいえ | スクリーンショットを添付(デフォルト:false) |
詳細
ウェブサイト · ダウンロード · クイックスタート · MCP ツール · アーキテクチャ · コントリビューション
Oculo は、Model Context Protocol に対応したフル Chromium デスクトップブラウザーです。Claude Code、Cursor、Windsurf、またはあらゆる MCP クライアントを接続すれば、エージェントが実際のウェブページを見て、操作できます。12 個のコンパクトなツールを通じて、DOM の読み取り、クリック、フォーム入力、データ抽出、複数ステップのパイプライン実行を行い、1 つのフローにつき 300 トークン未満で応答します。
Cursor : VSCode :: Oculo : Chrome
動作を見る
エージェントが意図を伝えると、Oculo はそれを少数の小さなツール呼び出しに変換し、簡潔で機密情報を除去した結果を返します。数メガバイトのスクリーンショットを返すことはありません。
You: "Log into GitHub and star the oculo repo"
Claude Code calls:
1. act({action: "navigate", url: "https://github.com/login"})
2. act({action: "login", site: "github.com"}) # vault lookup, password never leaves the OS keychain
3. act({action: "navigate", url: "https://github.com/xidik12/oculo"})
4. act({action: "click", text: "Star"})
→ 4 tool calls, <100 tokens of response
You: "Fill out the contact form on example.com"
Claude Code calls:
1. act({action: "navigate", url: "https://example.com/contact"})
2. page() # see the form structure
3. fill({fields: {"Name": "...", "Email": "..."}, submit: true})
→ 3 tool calls
Oculo は実際の Chromium エンジンをローカルマシンで実行し、その上にエージェントを優先した制御レイヤーを追加します。この組み合わせが Oculo の特長です。
| 機能 | |
|---|---|
| ネイティブブラウザー | フル Chromium エンジン。ラッパー、拡張機能、ヘッドレススクレイパーではありません |
| MCP ツール 12 個 | page、act、fill、read、run、media、shell、tabs、research、preview、translate、lens |
| フローあたり 300 トークン未満 | デフォルトで簡潔なテキスト応答を返し、スクリーンショットベースの手法より低コストです |
| 自己修復型自動化 | セレクターのキャッシュと DOM の差分検出により、繰り返しのワークフローを 44%以上高速化します |
| 複数プロバイダー対応 AI | Claude、OpenAI、Gemini、Grok、OpenClaw、Ollama を利用できる組み込みチャット |
| 4 段階のセキュリティ | すべての操作に auto/notify/confirm/blocked の権限ゲートを適用します |
| OS キーチェーンの保管庫 | electron.safeStorage を使って認証情報を暗号化します(macOS Keychain/Windows DPAPI) |
| PII の秘匿化 | すべての MCP 応答から、クレジットカード番号、SSN、JWT、API キー、Bearer トークンを除去します |
| インジェクション対策 | コンテンツ境界マーカーと正規表現ベースのプロンプトインジェクション検出 |
| 19 種類のステルスパッチ | Navigator、WebGL、canvas、WebRTC、audio、font、battery、screen のフィンガープリント対策 |
| ヘッドレスモード | ウィンドウなしで実行でき、Docker にも対応しています |
| クロスプラットフォーム | macOS、Windows、Linux |
| Python SDK | pip install oculo — 同期・非同期クライアント |
各ツールは 1 つの処理を行い、必要最小限の結果を返します。エージェントが支払うトークンコストは、応答のサイズです。
| ツール | 機能 | トークンコスト |
|---|---|---|
page | 現在のページを説明します。見出し、フォーム、ボタン、リンクを確認できます。コンパクト、a11y(ref タグ付き)、Markdown の各モードがあります | 約30~80 |
act | ページ遷移、クリック、ホバー、スクロール、入力、キーの押下、Vault 経由のログイン、タブ・Cookie・プロキシ・録画の管理を行います | 約1行 |
fill | ラベルやプレースホルダーとの一致に基づいてフォームフィールドに入力します。送信は任意です。テキスト、セレクト、チェックボックス、contenteditable に対応します | 約1行 |
read | 検索結果、表、リスト、記事などの構造化データを抽出します | コンパクト |
run | 条件分岐(page/act/fill/read/wait/if)を含む複数ステップのパイプラインを実行します。再生用にキャッシュされます | ヘッダー + 最後 |
media | 画像(Nano Banana 2 / DALL·E 3)または動画(Veo 3.1)を生成します。画像から画像への編集にも対応します | ファイルパス |
shell | シェルコマンド(ls、npm、git、python、…)を非対話形式で実行します | stdout + stderr |
tabs | 開いているすべてのブラウザータブの URL とタイトルを一覧表示します | コンパクト |
research | 詳細なウェブ調査を行います。複数のタブを開いてページを読み、調査結果を統合します | 統合済み |
preview | 現在のページから移動せずに URL を事前取得します | ページの説明 |
translate | ページのコンテンツや指定したテキストを任意の言語に翻訳します | 翻訳済みテキスト |
lens | スクリーンショットと AI ビジョンを使って現在のページを視覚的に分析します | 説明 |
ボーナス: webmcp_list と webmcp_call を使うと、WebMCP プロトコル経由でページが宣言したツールを検出して呼び出せます。
stdio ではなく HTTP を使う理由 Electron の <webview> にアクセスできるのはレンダラープロセスだけです。stdio が動作するメインプロセスからは、ページのコンテンツにアクセスできません。HTTP ブリッジは、メインプロセスからレンダラーへの IPC を介してこの境界を越えます。
ポートの検出。 起動時に Oculo は port:authtoken を ~/.oculo-port に書き込みます。bin/oculo-mcp.mjs ブリッジがこれを自動的に読み込むため、アプリを閉じていてもツール定義を検出できます。ただし、実行には Oculo の起動が必要です。
1. インストール
リリースから最新ビルドをダウンロードするか、ソースから実行します。
git clone https://github.com/xidik12/oculo.git
cd oculo
npm install
npm run dev
2. MCP クライアントに登録する
Claude Code
claude mcp add oculo -- node ~/oculo/bin/oculo-mcp.mjs
Cursor / Windsurf — MCP 設定(.cursor/mcp.json または同等のファイル)に追加します。
{
"mcpServers": {
"oculo": {
"command": "node",
"args": ["/path/to/oculo/bin/oculo-mcp.mjs"]
}
}
}
3. (任意)ヘッドレスと Docker
CI/CD、スクレイピング、サーバーサイドの自動化向けに、ウィンドウを表示せずに実行します。
node bin/oculo-headless.mjs # convenience launcher
npx electron . --headless # or raw flags
npx electron . --headless --headless-auto-approve # auto-approve CONFIRM actions
OCULO_HEADLESS=1 npm run dev # or via env var
docker compose up # containerized headless (Xvfb)
4. (任意)Python SDK
pip install oculo
from oculo import OculoClient
client = OculoClient() # auto-discovers port from ~/.oculo-port
print(client.page()) # describe the page
client.act("navigate", url="https://example.com")
client.fill({"Email": "[email protected]", "Message": "Hello!"}, submit=True)
results = client.read("search results", format="json")
同じインターフェースを持つ非同期版の AsyncOculoClient も利用できます。
すべてのアクションは権限ゲートを通過し、すべての応答はモデルに届く前に秘匿化されます。
権限レベル
| レベル | 操作 | 動作 |
|---|---|---|
| Auto | navigate, page, read, scroll, screenshot, back, forward, reload, hover, listTabs, switchTab, preview, translate, lens | 通知なしで実行します |
| Notify | click, type, fill, select, press, submit, newTab, closeTab | 実行し、OS 通知を表示します |
| Confirm | payment, delete_account, change_password, send_email, download, oauth, shell, evaluate, setProxy, startRecording | ネイティブダイアログでの承認が必要です |
| Blocked | read_vault, export_cookies, export_tokens, disable_security | 常に拒否されます |
認証情報の保管庫
electron.safeStorageで暗号化し、OS Keychain(macOS)/DPAPI(Windows)に保存します。- パスワードが IPC や MCP を通じて返されることは決してありません。公開されるのはドメインとユーザー名のみです。
act({action: "login", site: "github.com"})は、モデルに認証情報を見せることなく取得して入力します。
マスキングとインジェクション対策
- すべての MCP レスポンスは、クレジットカード番号、SSN、JWT、API キー、秘密鍵、Bearer トークンを除去するマスキング処理を通過します。
- モデルに渡されるページコンテンツは境界マーカーで囲まれ、そのコンテンツに埋め込まれたプロンプトインジェクションの試みは、正規表現ベースの検出によってブロックされます。
ステルス(19 個のパッチ)
Navigator(webdriver、languages、plugins、mimeTypes、connection、hardwareConcurrency、deviceMemory)、window(chrome API、dimensions)、WebGL(vendor/renderer の偽装)、canvas(呼び出しごとのフィンガープリントのランダム化)、WebRTC(IP 漏えいの防止)、AudioContext、フォント列挙のブロック、Battery API、画面解像度のランダム化。
自己修復型自動化
act/fill の成功後、セレクターは安定性スコアとともにキャッシュされます。id と data-testid = 10、aria-label = 9、role+name = 8、text = 7、css = 5 です。次回の実行時は、DOM の差分を調べて次の戦略を選びます。
- 類似度 > 80% — キャッシュから再実行し、LLM は呼び出しません。
- 50~80% — 代替セレクターにフォールバックします。
- < 50% — 新たな解決のため、AI に再度処理させます。
繰り返し実行するワークフローが 44% 以上高速化するのは、この仕組みによるものです。
組み込み AI チャット
Oculo には、複数のプロバイダーに直接接続するサイドパネルチャットも付属しています。
| プロバイダー | 認証 | モデル |
|---|---|---|
| Claude | API キーまたは CLI サブスクリプション | Opus、Sonnet、Haiku |
| OpenAI | API キーまたは Codex CLI | GPT-4o、GPT-4o mini、o1、o3 |
| Gemini | API キー | 2.0 Flash、1.5 Pro、1.5 Flash |
| Grok | API キー | Grok 2、Grok 2 Mini |
| Ollama | ローカル(キー不要) | プル済みの任意のモデル |
| OpenClaw | API キー | OpenClaw モデル |
ソースからビルドする
npm run build # production build
npm run dist:mac # macOS DMG + ZIP
npm run dist:win # Windows NSIS + portable
npm run dist:linux # Linux AppImage + deb
npm run typecheck # TypeScript
npm run lint # ESLint
npm run test # Vitest
前提条件: Node.js 20 以降、npm(ネイティブモジュールに npm が必要なため、pnpm/yarn は不可)、macOS/Windows/Linux。
プロジェクト構成
src/
main/ Electron main process
ai/agent.ts Multi-provider AI controller
captcha/ CAPTCHA detection + solvers
data/ Bookmarks, downloads, history, session recording
engine/ Page describer, extractor, form-detector, pipeline, resolver,
selector-cache, dom-differ, tab-manager
mcp/server.ts HTTP MCP server (ports 19516–19520, auth token)
mcp/tools/ act, fill, page, read, run tool handlers
network/proxy.ts HTTP/SOCKS proxy manager
security/ Vault, permissions, redactor, audit, anti-injection
preload/index.ts contextBridge API
renderer/
App.tsx Root browser UI component
components/ TabBar, AddressBar, ChatPanel, WebViewContainer,
bookmarks, downloads, find, history, layout, common
shared/ Types, constants, IPC channels, AI provider definitions
bin/
oculo-mcp.mjs stdio-to-HTTP MCP bridge (for Claude Code / Cursor)
oculo-headless.mjs Headless mode launcher
sdk/python/ Python SDK (pip install oculo)
Dockerfile Container deployment
docker-compose.yml Docker Compose for headless mode
貢献
開発環境のセットアップ、アーキテクチャの詳細、新しい MCP ツールの追加方法については、CONTRIBUTING.md をご覧ください。
寄付
Oculo によって時間を節約できた場合は、開発をご支援いただけます — BTC: 12yRGpUfFznzZoz4yVfZKRxLSkAwbanw2B
ライセンス
MIT © 2026 Salakhitdinov Khidayotullo
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。