智能体配置 · OpenCode

LaunchRepo 搭配 OpenCode:浏览器 MCP 配置实测

在 opencode.json 中加一个配置块,OpenCode 就能操作真实的 Chrome。我们用它跑完了整个发布交接流程:填写表单,在验证处停下,由人完成验证,恢复同一个会话,只提交一次。

简要回答

  • 把 chrome-devtools 条目放在 opencode.json 的 "mcp" 键下,写上 "type": "local",并把完整命令写成一个数组。配置块见下文。
  • OpenCode 1.18.34 能从全局文件、项目 opencode.json(在子文件夹中启动时也可以)、.opencode/opencode.json 以及两个环境变量中加载它。
  • 随后它提供了 30 个名为 chrome-devtools_… 的浏览器工具,并把完整的 44,167 字符页面快照原样传给模型,没有截断。
  • 遇到 CAPTCHA 或 2FA 步骤后,用 opencode run --session <session-id> 恢复同一段对话。每次无头运行都成功了:同一个标签页、同样的字段、只提交一次。
  • OpenCode 默认允许大多数操作,如果你想亲自批准浏览器操作,加一行权限设置即可。

LaunchRepo 适用于任何能读写工作区文件并能控制浏览器的编程智能体。OpenCode 两者都能做到。本页记录的是一套经过实测的配置,并非认证或合作关系。

把浏览器加入 opencode.json

OpenCode 会合并配置文件,而不是相互替换。因此配置很安全:你只需添加一个键,已有的所有设置都保持不变。

  1. 打开 LaunchRepo 工作区根目录下的 opencode.json,没有就新建一个。如果想一次用于所有项目,请改用 ~/.config/opencode/opencode.json。
  2. 把下面的 "mcp" 配置块添加到已有键的旁边。如果文件里已经有 "mcp" 键,只需在其中添加 chrome-devtools 条目。
  3. 在你启动的 Chrome 中打开 chrome://inspect/#remote-debugging 并开启远程调试(Chrome 144 及以上)。--autoConnect 连接的就是它。
  4. 运行 opencode mcp list。配置正确时会显示下面这一行;然后让 OpenCode 打开 https://example.com 并读取页面标题。

添加到 opencode.json

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "chrome-devtools": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "chrome-devtools-mcp@1.10.1",
        "--autoConnect",
        "--no-usage-statistics",
        "--no-performance-crux"
      ]
    }
  }
}

opencode mcp list 中应出现的行 opencode mcp list

✓ chrome-devtools connected

--autoConnect 使用你已经在运行的 Chrome。如果想为发布单独用一个 Chrome,请改用 --browser-url=http://127.0.0.1:9222;我们的测试就是这样连接临时 Chrome 的。

保留你自己的设置

  • 不要把配置块粘贴覆盖整个现有文件。只添加这个键;OpenCode 会合并文件,所以你的提供商、模型和其他服务器都会保留。
  • 项目 opencode.json 只会覆盖全局文件中它自己设置的键。在我们的测试中,只包含 "mcp" 的项目文件仍让全局的模型和提供商保持生效。
  • 如果想只在某个项目中关闭浏览器而不改动全局文件,就在该项目中为 chrome-devtools 设置 "enabled": false。所有运行中都有效。

OpenCode 会加载哪些配置文件

同一个服务器条目,放在不同位置、写成不同形式。“已加载”指 chrome-devtools_… 工具出现在了 OpenCode 发给模型的请求中。

变体文件或变量结果
全局配置文件~/.config/opencode/opencode.json 已加载,30 个工具(3/3)
带注释和尾随逗号的全局 JSONC 文件~/.config/opencode/opencode.jsonc 已加载,30 个工具(3/3)
工作区根目录中的项目文件opencode.json 已加载,30 个工具(3/3)
项目文件,OpenCode 在子文件夹中启动opencode.json 已加载,30 个工具(3/3)
位于 .opencode 文件夹中.opencode/opencode.json 已加载,30 个工具(3/3)
通过环境变量指定的自定义文件OPENCODE_CONFIG=<file> 已加载,30 个工具(3/3)
通过环境变量传入的内联 JSONOPENCODE_CONFIG_CONTENT 已加载,30 个工具(3/3)
从 Claude Code 或 Cursor 复制来的 "mcpServers" 配置块opencode.json 未加载,无报错(3/3)
"command": "npx" 加 "args"(大多数其他智能体使用的写法)opencode.json 配置被拒绝,OpenCode 以退出码 1 停止(3/3)
带 "enabled": false 的条目opencode.json 未加载,无报错(3/3)
全局条目,项目文件只设置 "enabled": falseopencode.json 未加载,无报错(3/3)

最容易踩坑的是这两行:粘贴过来的 "mcpServers" 配置块会被悄无声息地忽略(opencode mcp list 显示“No MCP servers configured”),而字符串形式的命令会让 OpenCode 在启动前就停止(“Expected array, got "npx"”)。两者都可以用上面的数组写法解决。

交接运行的每一步

OpenCode 1.18.34,Chrome DevTools MCP 1.10.1,Google Chrome 154.0.8037.92,macOS,Node 22,测试日期 2026年10月1日。每次运行都使用全新的主目录和全新的 Chrome 配置文件,因此没有读取或更改任何个人设置。

全程没有使用 AI 模型。一个小型本地替身用固定的工具调用回应 OpenCode 的模型请求,并且只从 OpenCode 实际发送的内容中读取元素 ID。这样每次运行都完全一致且免费,测试的是 OpenCode 自己控制的部分:配置、工具、模型能看到的内容、权限和会话。它不测试模型的规划能力。

在我们 CAPTCHA 指南的演示表单上进行交接运行:5 次。配置变体:各 3 次。

OpenCode 打开演示表单并填写,在替身验证处停下并结束运行。一个脚本扮演人,在同一个标签页中完成验证。随后第二次带 --session 的 opencode run 继续同一段对话并完成提交。 智能体工作流中的 CAPTCHA 与 2FA:可控的人工交接 →

检查项通过的运行
opencode mcp list 显示服务器已连接 5/5
Chrome DevTools 工具提供给了模型 5/5
默认设置下完整页面快照送达模型 5/5
在已连接的 Chrome 中打开演示表单 5/5
填写三个字段并读回确认 5/5
在验证处停下,状态为 prepared_needs_human 5/5
运行结束后标签页和已填字段仍在 5/5
会话 ID 出现在 opencode session list 中 5/5
人在同一个标签页中完成验证 5/5
opencode run --session 继续同一个会话 5/5
继续的会话仍保留之前的步骤 5/5
继续的运行找到并选中同一个标签页 5/5
暂停后字段保持不变 5/5
恰好提交一次 5/5
使用 "ask" 的无头运行:浏览器调用被拒绝,没有提示 5/5
同一规则加 --auto:浏览器调用执行 5/5
"deny":浏览器工具从模型的列表中移除 5/5
无头运行:不向模型提供提问工具 5/5
stdin 保持打开的无头运行:一直等待,直到 20 秒后被停止 3/3
OpenCode 在暂停时通过 Chrome DevTools MCP 截取的屏幕截图:字段已填好,状态为等待人工操作。
OpenCode 在暂停时通过 Chrome DevTools MCP 截取的屏幕截图:字段已填好,状态为等待人工操作。

人完成后恢复

每次 opencode run 都会在 --format json 输出中打印会话 ID,opencode session list --format json 也会列出它。

用同一个 ID 继续。在我们的运行中,继续的会话保留了之前的每一步,通过 Chrome DevTools MCP 找到同一个标签页,确认字段没有变化,并只提交了一次。

更喜欢终端界面?用 opencode --session <session-id> 在那里打开同一段对话。

找到会话
opencode session list --format json
以无头方式继续
opencode run --session <session-id> "The check is done. Re-read the form and submit once."
在终端界面中继续
opencode --session <session-id>

审批:ask、allow、deny

没有权限配置块时,OpenCode 会直接运行浏览器工具而不询问。一行设置就能改变这一点。我们以脚本调用 OpenCode 的方式,无头运行了每条规则:

规则在无头 opencode run 中
"chrome-devtools_*": "ask"立即被拒绝,提示“The user rejected permission to use this specific tool call.”。运行仍以退出码 0 结束。
同一规则加 --auto浏览器调用会执行。根据文档,显式的 deny 规则仍然生效。
"chrome-devtools_*": "deny"浏览器工具从模型的工具列表中消失。

亲自批准每个浏览器操作

{
  "permission": {
    "chrome-devtools_*": "ask"
  }
}

在终端界面中使用 "ask",OpenCode 会询问本次允许、始终允许或拒绝。对于无头运行,要么接受 "ask" 会阻止浏览器,要么在专用于发布的 Chrome 配置文件上清楚地使用 --auto。

从 Claude Code 迁移过来

服务器相同,配置不同。以下四点差异决定你的条目能否生效:

项目OpenCodeClaude Code
条目所在位置opencode.json 中的 "mcp" 键.mcp.json 中的 "mcpServers"
命令写法"command" 是一个数组,另加 "type": "local""command" 字符串加 "args" 数组
规则中的工具名chrome-devtools_take_snapshotmcp__chrome-devtools__take_snapshot
默认审批大多数操作允许每个工具首次使用时询问

三个耗时的坑

粘贴的 "mcpServers" 配置块毫无反应
OpenCode 会完全忽略这个键:没有报错,退出码 0,也没有浏览器工具。把条目移到 "mcp" 下,并把命令改成一个数组。
无头运行会等待打开的 stdin
当脚本启动 opencode run 时把 stdin 作为管道保持打开,OpenCode 会等待永远不会到来的输入。在全部 3 次运行中它都卡住直到被停止;把 stdin 指向 /dev/null 后它立即响应。
在脚本中 "ask" 就等于拒绝
无头运行中没有人来回答,所以每个 "ask" 都会变成拒绝。请按每次运行决定是否允许浏览器自行操作。
主题原文我们的观察
OpenCode:本地服务器Add local MCP servers using type to "local" within the MCP object."type": "local" 加数组的写法在每次运行中都能加载。
OpenCode:多个文件Configuration files are merged together, not replaced.已确认:只含 "mcp" 的项目文件保留了全局的模型和提供商。
OpenCode:哪个文件优先Project config has the highest precedence among standard config files - it overrides both global and remote configs.已确认:项目中的 "enabled": false 关闭了全局条目。
OpenCode:工具名MCP server tools are registered with server name as prefix工具以 chrome-devtools_take_snapshot 等名称出现。
OpenCode:默认权限If you don’t specify anything, OpenCode starts from permissive defaults:在我们添加规则之前,浏览器工具都是不经提示直接运行的。
OpenCode:--autoExplicit "deny" rules are still enforced.我们测试了 --auto 搭配 "ask";使用 "deny" 时工具根本不会被提供。
OpenCode:上下文大小MCP servers add to your context, so you want to be careful with which ones you enable.Chrome DevTools MCP 会增加 30 个工具。发布期间请关闭其他服务器。
OpenCode:--session 参数Session ID to continue每次运行都能以无头方式生效,不像有些智能体只能在终端界面中恢复。
Claude Code:项目文件Project-scoped servers enable team collaboration by storing configurations in a .mcp.json file at your project’s root directory.文件和键都与 OpenCode 不同;同一个条目不能直接沿用。
Claude Code:规则中的工具名mcp__puppeteer__* matches every tool from the puppeteer serverOpenCode 则是在服务器名后加一个下划线。
Claude Code:默认模式Prompts for permission on first use of each tool.OpenCode 的默认值正好相反:除非你设置规则,否则允许。
Chrome DevTools MCP:OpenCode 部分Add the following configuration to your `opencode.json` file.与我们的配置块写法相同;我们固定了版本并加上 --autoConnect。

在 OpenCode 中启动 LaunchRepo

在你的 LaunchRepo 私有工作区中打开 OpenCode,粘贴启动提示词。之后工具包会引导完成上手流程,在 Example Domain 上测试你的 Chrome 连接,并构建运行计划。

  • 启动提示词推荐使用 Claude Code 或 Codex CLI 以获得最佳效果。OpenCode 也能使用同一套工具包,因为它具备工具包所需的两样东西:工作区文件访问和通过 MCP 控制的浏览器。
  • OpenCode 会读取工作区中的 AGENTS.md,因此能自行接收工具包的规则。
  • CAPTCHA 和 2FA 步骤会作为交接回到你手中;按上文所示用 --session 恢复会话。

LaunchRepo 启动提示词

Recommend Claude Code CLI or Codex CLI in a terminal instead of the desktop apps for best results. If session metadata confirms desktop hosting, explicitly advise me to switch to the CLI and resume this same private workspace. Do not infer the host from a CLI engine version alone.

Read AGENTS.md, then follow "Start the dashboard for the owner". Create my private
workspace if I do not have one yet, start the dashboard, and give me the link.
Then lead ONBOARDING.md one phase at a time. Reuse recorded permissions instead of
asking again unless their scope is missing or conflicting. Actually test my visible
existing Chrome profile and intended identity as BROWSER-SETUP.md requires; use the
OS fallback if needed. Use one platform/browser worker by default. Build the normal
run only from suitable free-ready routes, keep research separate, and preserve any
draft that needs one exact human CAPTCHA/2FA action. Never claim browser control
bypasses or reduces those challenges.

本次测试未涵盖的内容

  • 终端界面的审批提示和提问工具。上面的无头行为是实测的;界面中的行为以文档为准。
  • 真实的 AI 模型。替身把模型质量从结果中剔除了;真实模型仍可能选错元素。
  • 用 --autoConnect 连接日常使用的 Chrome 配置文件。我们通过 --browser-url 使用的是临时 Chrome。
  • Windows 和 Linux、远程 MCP 服务器、OpenCode 账户及付费模型套餐。

来源

上面的每条引文都逐字摘自以下页面,阅读日期为 2026年10月1日。实测行为来自本页所述的我们自己的运行。

来源页面日期核对日期
OpenCode Docs: MCP servers
OpenCode Docs: Config
OpenCode Docs: Permissions
OpenCode Docs: CLI
OpenCode Docs: Providers
Claude Code Docs: Connect Claude Code to tools via MCP未标日期
Claude Code Docs: Configure permissions未标日期
Chrome DevTools MCP: MCP client configuration未标日期

常见问题

在 OpenCode 中 MCP 服务器配置在哪里?
放在 opencode.json 的 "mcp" 键下,文件可以在项目根目录,也可以是 ~/.config/opencode/opencode.json。在我们的测试中,OpenCode 1.18.34 还会从 .opencode/opencode.json、OPENCODE_CONFIG 和 OPENCODE_CONFIG_CONTENT 加载。
Chrome DevTools MCP 的 OpenCode 配置怎么写?
一个名为 chrome-devtools 的条目,包含 "type": "local" 和 "command": ["npx", "-y", "chrome-devtools-mcp@1.10.1", "--autoConnect", "--no-usage-statistics", "--no-performance-crux"]。运行 opencode mcp list 可以看到它已连接。
为什么 OpenCode 不显示我的 MCP 服务器?
最常见的原因是条目从其他智能体复制而来:"mcpServers" 配置块会被忽略且不报错,而 "command": "npx" 加单独的 "args" 会让 OpenCode 拒绝整个配置。请使用 "mcp" 和一个命令数组。
可以改用 Playwright MCP 吗?
可以,同样的 "mcp" 条目写法适用于任何本地 MCP 服务器。本页测试 Chrome DevTools MCP,是因为它能连接你已经在用的 Chrome;我们的对比页面说明了什么时候 Playwright MCP 更合适。
遇到 CAPTCHA 后如何恢复 OpenCode 会话?
在同一个 Chrome 标签页中完成验证,然后带上一句简短指令运行 opencode run --session <session-id>,或用 opencode --session <session-id> 在终端界面中打开。在我们的运行中,会话、标签页和字段都还在。
LaunchRepo 官方支持 OpenCode 吗?
LaunchRepo 支持具备文件和浏览器访问能力的编程智能体;OpenCode 两者都有,本页记录的是一套经过实测的配置。这并非认证或合作关系,启动提示词仍推荐使用 Claude Code 或 Codex CLI 以获得最佳效果。

给 OpenCode 一份发布计划

LaunchRepo 为你的智能体提供平台清单、操作手册,以及由它持续更新的进度追踪表。OpenCode 在你的浏览器中完成工作,最终决定权始终在你手中。

查看价格