Oculo

io.github.xidik12由 GitHub 账号 xidik12 发布v0.4.1更新于 Oct 24, 2026

AI-powered native browser with 12 MCP tools. ~30 tokens per page.

概览

AI 生成的概览

Oculo 是一款桌面 Chromium 浏览器,通过 MCP 桥接让助手以精简文本响应读取、点击、填写并提取真实网页内容。

可以做什么
  • 查看与操作页面:描述当前页面、导航、点击、悬停、滚动、输入、按键,管理标签页与 Cookie,预取网址
  • 按标签或占位符匹配填写并提交表单,包括通过凭据保险库登录
  • 提取搜索结果、表格、列表、文章等结构化数据,并翻译页面内容
  • 运行带条件分支和缓存重放的多步流程,并进行多标签页深度网络调研
  • 生成图片或视频、对页面做视觉分析,以及执行非交互式 shell 命令
  • 通过 WebMCP 协议发现并调用页面声明的工具
适用场景
适合需要助手在用户机器上操作真实网站的场景,例如登录、填写表单、抓取结构化内容或重复执行浏览流程,而不只是获取原始 HTML。也适用于多步调研和脚本化浏览器自动化。
运行要求
需在本机安装 Oculo 桌面浏览器(发布版或使用 Node.js 20+ 与 npm 从源码构建),支持 macOS、Windows、Linux;npm 包 oculo-mcp 只是连接运行中应用的 stdio 桥接。执行工具时应用必须处于运行状态,应用会在用户主目录写入端口与认证令牌文件供桥接读取。另有可选的无头/Docker 模式与 Python SDK。
安装前请注意
助手可驱动已登录的真实浏览器:点击、提交表单、下载、OAuth、修改代理和执行 shell 命令都受权限级别控制,而无头模式的自动批准可能跳过确认。凭据保险库把网站登录信息存入操作系统钥匙串并在不暴露密码的情况下填入,但模型可以触发登录。响应会脱敏密钥与个人信息,页面内容按不可信处理,但网页中的提示注入风险仍存在。执行 shell 命令与浏览器指纹伪装补丁也各有风险。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Oculo,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[Oculo — an open-source AI browser that gives Claude Code, Cursor, Windsurf, and any MCP client eyes on the live web. A sample agent flow turns the request 'Log into GitHub and star the oculo repo' into four act tool calls that log in via the credential vault and click Star, using under 100 tokens.]

[GitHub stars] [Latest release] [Electron 34] [TypeScript 5.7] [React 19] [12 MCP tools] [MIT License]

Website · Download · Quick Start · MCP Tools · Architecture · Contributing


Oculo is a full-Chromium desktop browser that speaks the Model Context Protocol. Point Claude Code, Cursor, Windsurf, or any MCP client at it and your agent can see and drive real web pages — read the DOM, click, fill forms, extract data, run multi-step pipelines — through 12 compact tools that answer in under 300 tokens per flow.

Cursor : VSCode :: Oculo : Chrome

See it in action

Your agent describes intent; Oculo resolves it into a few tiny tool calls and hands back terse, redacted results — not megabytes of screenshots.

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
[Section: Why Oculo — a native engine, not a wrapper]

Oculo runs a real Chromium engine on your machine and adds an agent-first control layer on top. That combination is the point:

Capability
Native browserFull Chromium engine — not a wrapper, extension, or headless scraper
12 MCP toolspage, act, fill, read, run, media, shell, tabs, research, preview, translate, lens
< 300 tokens / flowCompact text responses by default — cheaper than screenshot-based approaches
Self-healing automationSelector caching + DOM diffing — 44%+ faster on repeated workflows
Multi-provider AIBuilt-in chat with Claude, OpenAI, Gemini, Grok, OpenClaw, Ollama
4-level securityauto / notify / confirm / blocked permission gate on every action
OS keychain vaultCredentials encrypted via electron.safeStorage (macOS Keychain / Windows DPAPI)
PII redactionCredit cards, SSNs, JWTs, API keys, Bearer tokens stripped from every MCP response
Anti-injectionContent boundary markers + regex-based prompt-injection detection
19 stealth patchesNavigator, WebGL, canvas, WebRTC, audio, font, battery, and screen fingerprint defenses
Headless modeRun without a window — Docker support included
Cross-platformmacOS, Windows, Linux
Python SDKpip install oculo — sync and async clients
[Section: The Toolbelt — one verb per call]

Each tool does one thing and returns the smallest useful answer. Token cost is the response size the agent pays for.

ToolWhat it doesToken cost
pageDescribe the current page — headings, forms, buttons, links. Compact, a11y (ref-tagged), and markdown modes~30–80
actNavigate, click, hover, scroll, type, press keys, login via vault, manage tabs, cookies, proxy, recording~1 line
fillFill form fields by label/placeholder matching, optional submit. Text, select, checkbox, contenteditable~1 line
readExtract structured data — search results, tables, lists, articlescompact
runMulti-step pipeline with conditionals (page/act/fill/read/wait/if). Cached for replayheader + last
mediaGenerate images (Nano Banana 2 / DALL·E 3) or video (Veo 3.1); image-to-image editingfile path
shellExecute shell commands non-interactively (ls, npm, git, python, …)stdout + stderr
tabsList all open browser tabs with URLs and titlescompact
researchDeep web research — opens multiple tabs, reads pages, synthesizes findingssynthesized
previewPre-fetch a URL without navigating away from the current pagepage description
translateTranslate page content or specific text to any languagetranslated text
lensVisual analysis of the current page via screenshot + AI visiondescription

Bonus: webmcp_list and webmcp_call discover and invoke page-declared tools via the WebMCP protocol.

[Section: How It Works — stdio to HTTP to webview]

[Architecture pipeline: an MCP client (Claude Code, Cursor, Windsurf) speaks stdio to the oculo-mcp bridge, which forwards over authenticated HTTP on port 19516 to the Electron main process, which sends IPC to the React renderer, which runs executeJavaScript inside the webview holding the live web page. Tools stay discoverable when idle; Oculo must be running to execute; port and token are published to ~/.oculo-port.]

Why HTTP instead of stdio? Electron's <webview> is only reachable from the renderer process. The main process — where stdio lives — can't touch page content. The HTTP bridge crosses that boundary via main-to-renderer IPC.

Port discovery. On startup Oculo writes port:authtoken to ~/.oculo-port. The bin/oculo-mcp.mjs bridge reads it automatically, so tool definitions stay discoverable even when the app is closed — only execution requires Oculo to be running.

[Section: Quick Start — clone, run, register]

1. Install

Grab the latest build from Releases, or run from source:

bash
git clone https://github.com/xidik12/oculo.gitcd oculonpm installnpm run dev

2. Register with your MCP client

Claude Code

bash
claude mcp add oculo -- node ~/oculo/bin/oculo-mcp.mjs

Cursor / Windsurf — add to your MCP config (.cursor/mcp.json or equivalent):

json
{  "mcpServers": {    "oculo": {      "command": "node",      "args": ["/path/to/oculo/bin/oculo-mcp.mjs"]    }  }}

3. (Optional) Headless & Docker

Run without a visible window for CI/CD, scraping, or server-side automation:

bash
node bin/oculo-headless.mjs                          # convenience launchernpx electron . --headless                            # or raw flagsnpx electron . --headless --headless-auto-approve    # auto-approve CONFIRM actionsOCULO_HEADLESS=1 npm run dev                          # or via env var
docker compose up                                    # containerized headless (Xvfb)

4. (Optional) Python SDK

bash
pip install oculo
python
from oculo import OculoClient
client = OculoClient()                 # auto-discovers port from ~/.oculo-portprint(client.page())                   # describe the pageclient.act("navigate", url="https://example.com")client.fill({"Email": "[email protected]", "Message": "Hello!"}, submit=True)results = client.read("search results", format="json")

An async AsyncOculoClient with the same surface is also available.

[Section: Security Model — gate, vault, redact]

Every action passes through a permission gate, and every response is redacted before it reaches the model.

Permission levels

LevelActionsBehavior
Autonavigate, page, read, scroll, screenshot, back, forward, reload, hover, listTabs, switchTab, preview, translate, lensExecutes silently
Notifyclick, type, fill, select, press, submit, newTab, closeTabExecutes + OS notification
Confirmpayment, delete_account, change_password, send_email, download, oauth, shell, evaluate, setProxy, startRecordingNative dialog approval required
Blockedread_vault, export_cookies, export_tokens, disable_securityAlways rejected

Credential vault

  • Encrypted with electron.safeStorage → OS Keychain (macOS) / DPAPI (Windows).
  • Passwords are never returned via IPC or MCP — only domain + username are exposed.
  • act({action: "login", site: "github.com"}) retrieves and fills credentials without the model ever seeing them.

Redaction & anti-injection

  • Every MCP response passes through a redactor that strips credit-card numbers, SSNs, JWTs, API keys, private keys, and Bearer tokens.
  • Page content handed to the model is wrapped in boundary markers, and regex-based detection blocks prompt-injection attempts embedded in that content.

Stealth (19 patches)

Navigator (webdriver, languages, plugins, mimeTypes, connection, hardwareConcurrency, deviceMemory), window (chrome API, dimensions), WebGL (vendor/renderer spoofing), canvas (per-call fingerprint randomization), WebRTC (IP-leak prevention), AudioContext, font enumeration blocking, Battery API, and screen-resolution randomization.

Self-healing automation

After a successful act/fill, selectors are cached with stability scores — id and data-testid = 10, aria-label = 9, role+name = 8, text = 7, css = 5. On the next run, DOM diffing picks the strategy:

  • > 80% similarity — replay from cache, no LLM call.
  • 50–80% — fall back to alternative selectors.
  • < 50% — re-engage the AI for a fresh resolution.

That's where the 44%+ speed-up on repeated workflows comes from.

Built-in AI chat

Oculo also ships a side-panel chat that talks to multiple providers directly:

ProviderAuthModels
ClaudeAPI key or CLI subscriptionOpus, Sonnet, Haiku
OpenAIAPI key or Codex CLIGPT-4o, GPT-4o mini, o1, o3
GeminiAPI key2.0 Flash, 1.5 Pro, 1.5 Flash
GrokAPI keyGrok 2, Grok 2 Mini
OllamaLocal (no key)Any pulled model
OpenClawAPI keyOpenClaw models

Building from source

bash
npm run build          # production buildnpm run dist:mac       # macOS DMG + ZIPnpm run dist:win       # Windows NSIS + portablenpm run dist:linux     # Linux AppImage + deb
npm run typecheck      # TypeScriptnpm run lint           # ESLintnpm run test           # Vitest

Prerequisites: Node.js 20+, npm (not pnpm/yarn — native modules require npm), macOS / Windows / Linux.

Project structure
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 definitionsbin/  oculo-mcp.mjs            stdio-to-HTTP MCP bridge (for Claude Code / Cursor)  oculo-headless.mjs       Headless mode launchersdk/python/                Python SDK (pip install oculo)Dockerfile                 Container deploymentdocker-compose.yml         Docker Compose for headless mode

Contributing

See CONTRIBUTING.md for development setup, architecture details, and how to add a new MCP tool.

Donate

If Oculo saves you time, you can support development — BTC: 12yRGpUfFznzZoz4yVfZKRxLSkAwbanw2B

License

MIT © 2026 Salakhitdinov Khidayotullo


Built by Salakhitdinov Khidayotullo · getoculo.com

来源:README.md,提交 97c7239

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.4.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分