openclaw mcp 有两个职责:
- 使用
openclaw mcp serve将 OpenClaw 作为一个 MCP 服务器运行 - 使用
list、show、status、doctor、probe、add、set、configure、tools、login、logout、reload和unset管理 OpenClaw 拥有的出站 MCP 服务器定义
serve是 OpenClaw 作为 MCP 服务器运行- 其他子命令则是 OpenClaw 作为 MCP 客户端侧注册表,用于管理其运行时后续可能消费的 MCP 服务器
openclaw acp。
选择合适的 MCP 路径
OpenClaw 有多个 MCP 入口。请选择与代理运行时归属方和工具归属方相匹配的路径。| 目标 | 使用 | 原因 |
|---|---|---|
| 让外部 MCP 客户端读取/发送 OpenClaw 频道对话 | openclaw mcp serve | OpenClaw 作为 MCP 服务器,通过 stdio 暴露由 Gateway 支持的对话。 |
| 为 OpenClaw 托管的代理运行保存第三方 MCP 服务器 | openclaw mcp add, set, configure, tools, login | OpenClaw 作为 MCP 客户端侧注册表,之后会将这些服务器投影到符合条件的运行时中。 |
| 在不运行代理回合的情况下检查已保存的服务器 | openclaw mcp status, doctor, probe | status 和 doctor 检查配置;probe 打开真实的 MCP 连接并列出能力。 |
| 在浏览器中编辑 MCP 配置 | 控制界面 /mcp | 该页面显示清单、启用状态、OAuth/过滤摘要、命令提示以及一个有作用域的 mcp 编辑器。 |
| 为 Codex app-server 提供一个有作用域的原生 MCP 服务器 | mcp.servers.<name>.codex | codex 块只影响 Codex app-server 线程投影,并且在传递给原生配置之前会被剥离。 |
| 运行 ACP 托管的 harness 会话 | openclaw acp 和 ACP Agents | ACP 桥接模式不接受按会话注入 MCP 服务器;请改为配置 gateway/plugin 桥接。 |
OpenClaw 作为 MCP 服务器
这就是openclaw mcp serve 路径。
何时使用 serve
在以下情况下使用 openclaw mcp serve:
- Codex、Claude Code 或其他 MCP 客户端应直接与由 OpenClaw 支持的频道对话
- 你已经有一个带有路由会话的本地或远程 OpenClaw Gateway
- 你希望使用一个适用于 OpenClaw 各频道后端的 MCP 服务器,而不是为每个频道分别运行桥接
openclaw acp。
工作原理
openclaw mcp serve 会启动一个 stdio MCP 服务器。MCP 客户端拥有该进程。在客户端保持 stdio 会话打开期间,桥接通过 WebSocket 连接到本地或远程 OpenClaw Gateway,并通过 MCP 暴露已路由的频道对话。
重要行为
重要行为
- 实时队列状态从桥接连接时开始
- 较早的转写历史通过
messages_read读取 - Claude 推送通知只在 MCP 会话存活期间存在
- 当客户端断开连接时,桥接退出,实时队列也会消失
openclaw agent和openclaw infer model run等一次性代理入口在回复完成时会退役其打开的任何捆绑 MCP 运行时,因此重复的脚本运行不会累积 stdio MCP 子进程- OpenClaw 启动的 stdio MCP 服务器(捆绑的或用户配置的)会在关闭时作为进程树被拆除,因此由服务器启动的子进程不会在父级 stdio 客户端退出后继续存活
- 删除或重置会话会通过共享运行时清理路径释放该会话的 MCP 客户端,因此不会残留与已移除会话关联的 stdio 连接
选择客户端模式
同一个桥接可以用两种不同方式使用:- 通用 MCP 客户端
- Claude Code
仅使用标准 MCP 工具。使用
conversations_list、messages_read、events_poll、events_wait、messages_send 和审批工具。目前,
auto 的行为与 on 相同。尚未进行客户端能力检测。serve 暴露什么
该桥接使用现有的 Gateway 会话路由元数据来暴露由频道支持的对话。当 OpenClaw 已经拥有具有已知路由的会话状态时,会显示一个对话,例如:
channel- 接收方或目标元数据
- 可选的
accountId - 可选的
threadId
- 列出最近的路由对话
- 读取最近的转写历史
- 等待新的入站事件
- 通过同一路由发送回复
- 查看桥接连接期间到达的审批请求
用法
- 本地 Gateway
- 远程 Gateway(token)
- 远程 Gateway(password)
- 详细日志 / 关闭 Claude
桥接工具
当前桥接暴露以下 MCP 工具:conversations_list
conversations_list
列出最近的、已绑定会话的对话,这些对话在 Gateway 会话状态中已经有路由元数据。有用的过滤条件:
limitsearchchannelincludeDerivedTitlesincludeLastMessage
conversation_get
conversation_get
通过
session_key 使用直接的 Gateway 会话查找返回一个对话。messages_read
messages_read
读取一个已绑定会话对话的最近转写消息。
attachments_fetch
attachments_fetch
从一条转写消息中提取非文本消息内容块。这是对转写内容的元数据视图,而不是独立的持久化附件 blob 存储。
events_poll
events_poll
从一个数值游标开始读取已排队的实时事件。
events_wait
events_wait
长轮询直到下一个匹配的已排队事件到达或超时结束。当通用 MCP 客户端需要接近实时的投递,但不使用 Claude 特定推送协议时,请使用这个工具。
messages_send
messages_send
通过会话上已记录的同一路由发送文本回复。当前行为:
- 需要一个现有的对话路由
- 使用会话的 channel、recipient、account id 和 thread id
- 仅发送文本
permissions_list_open
permissions_list_open
列出桥接自连接到 Gateway 以来观察到的待处理 exec/plugin 审批请求。
permissions_respond
permissions_respond
使用以下之一解决一个待处理的 exec/plugin 审批请求:
allow-onceallow-alwaysdeny
事件模型
桥接在连接期间会维护一个内存中的事件队列。 当前事件类型:messageexec_approval_requestedexec_approval_resolvedplugin_approval_requestedplugin_approval_resolvedclaude_permission_request
Claude 频道通知
该桥接还可以暴露 Claude 特定的频道通知。这是 OpenClaw 对 Claude Code 频道适配器的对应实现:标准 MCP 工具仍然可用,但实时入站消息也可以作为 Claude 特定的 MCP 通知到达。- off
- on
- auto(默认)
--claude-channel-mode off:仅使用标准 MCP 工具。notifications/claude/channelnotifications/claude/channel/permission
- 入站
user转写消息会作为notifications/claude/channel转发 - 通过 MCP 接收的 Claude 权限请求会在内存中跟踪
- 如果链接的对话后来发送了
yes abcde或no abcde,桥接会将其转换为notifications/claude/channel/permission - 这些通知仅在实时会话中有效;如果 MCP 客户端断开连接,就没有推送目标了
MCP 客户端配置
stdio 客户端配置示例:选项
openclaw mcp serve 支持:
Gateway WebSocket URL。
Gateway token。
从文件读取 token。
Gateway 密码。
从文件读取密码。
Claude 通知模式。
在 stderr 上输出详细日志。
安全性与信任边界
桥接不会凭空创造路由。它只暴露 Gateway 已经知道如何路由的对话。 这意味着:- 发送方允许列表、配对以及频道级信任仍然属于底层 OpenClaw 频道配置
messages_send只能通过现有已存储的路由进行回复- 审批状态仅对当前桥接会话是实时的、内存中的
- 桥接认证应使用与任何其他远程 Gateway 客户端相同的 Gateway token 或 password 控制
conversations_list 中缺少某个对话,通常原因不是 MCP 配置有问题,而是底层 Gateway 会话中缺少或不完整的路由元数据。
测试
OpenClaw 为此桥接提供了确定性的 Docker 冒烟测试:- 启动一个带种子的 Gateway 容器
- 启动第二个容器来运行
openclaw mcp serve - 验证对话发现、转写读取、附件元数据读取、实时事件队列行为,以及出站发送路由
- 通过真实的 stdio MCP 桥接验证 Claude 风格的频道和权限通知
故障排查
未返回任何对话
未返回任何对话
通常表示 Gateway 会话尚不可路由。请确认底层会话已存储 channel/provider、recipient,以及可选的 account/thread 路由元数据。
events_poll 或 events_wait 漏掉了较早的消息
events_poll 或 events_wait 漏掉了较早的消息
这是预期行为。实时队列从桥接连接时开始。请使用
messages_read 读取更早的转写历史。Claude 通知没有出现
Claude 通知没有出现
请检查以下所有项:
- 客户端保持了 stdio MCP 会话打开
--claude-channel-mode为on或auto- 客户端确实理解 Claude 特定的通知方法
- 入站消息发生在桥接连接之后
缺少审批
缺少审批
permissions_list_open 只显示桥接连接期间观察到的审批请求。它不是一个持久的审批历史 API。openclaw mcp list、show、status、doctor、probe、add、set、
configure、tools、login、logout、reload 和 unset 路径。
这些命令不会通过 MCP 暴露 OpenClaw。它们管理 OpenClaw 配置中 mcp.servers 下由 OpenClaw 拥有的 MCP 服务器定义。
这些已保存的定义适用于 OpenClaw 之后会启动或配置的运行时,例如嵌入式 OpenClaw 和其他运行时适配器。OpenClaw 将这些定义集中存储,因此这些运行时无需维护各自重复的 MCP 服务器列表。
重要行为
重要行为
- 这些命令只会读取或写入 OpenClaw 配置
status、list、show、不带--probe的doctor、set、configure、tools、logout、reload和unset不会连接到目标 MCP 服务器login会对已配置的 HTTP 服务器执行 MCP OAuth 网络流程,并保存生成的本地凭据status --verbose在不连接的情况下打印已解析的传输、认证、超时、过滤器和并行工具调用提示doctor会检查已保存的定义是否存在本地设置问题,例如缺少 stdio 命令、无效的工作目录、缺失的 TLS 文件、已禁用的服务器、字面量敏感头/环境变量值以及未完成的 OAuth 授权doctor --probe在静态检查通过后增加与probe相同的实时连接验证probe会连接到所选服务器或所有已配置服务器,列出工具,并报告能力/诊断信息add会根据标志构建定义,并在保存前进行探测,除非设置了--no-probe或需要先完成 OAuth 授权- 运行时适配器会在执行时决定它们实际支持哪些传输形态
enabled: false会保留已保存的服务器,但会将其排除在嵌入式运行时发现之外timeout和connectTimeout以秒为单位设置每个服务器的请求和连接超时supportsParallelToolCalls: true用于标记适配器可以并发调用的服务器- HTTP 服务器可以使用静态头、OAuth 登录、TLS 验证控制以及 mTLS 证书/密钥路径
- 嵌入式 OpenClaw 会在正常的
coding和messaging工具配置中暴露已配置的 MCP 工具;minimal仍会隐藏它们,而tools.deny: ["bundle-mcp"]会显式禁用它们 - 每个服务器的
toolFilter.include和toolFilter.exclude会在 MCP 工具成为 OpenClaw 工具之前对发现到的工具进行过滤 - 声明了 resources 或 prompts 的服务器还会暴露用于列出/读取资源以及列出/获取 prompts 的实用工具;这些生成的实用工具名称(
resources_list、resources_read、prompts_list、prompts_get)使用相同的 include/exclude 过滤器 - 动态 MCP 工具列表变更会使该会话的缓存目录失效;下一次发现/使用会从服务器刷新
- 重复的 MCP 工具请求/协议失败会暂时暂停该服务器,以免单个损坏的服务器占用整个轮次
- 作用域为会话的打包 MCP 运行时会在
mcp.sessionIdleTtlMs毫秒的空闲时间后被回收(默认 10 分钟;设为0可禁用),一次性嵌入式运行会在运行结束时清理它们
transport 值,而 Claude Code 和 Gemini 则接收 CLI 原生的 type 值,例如 http、sse 或 stdio。
Codex app-server 也支持每个服务器上的可选 codex 块。这是仅针对 Codex app-server 线程的 OpenClaw 投影元数据;它不会更改 ACP 会话、通用 Codex harness 配置或其他运行时适配器。使用非空的 codex.agents 可以将服务器仅投影到特定的 OpenClaw agent id。空的、空白的或无效的 agent 列表会被配置验证拒绝,并且会在运行时投影路径中被省略,而不是变成全局配置。使用 codex.defaultToolsApprovalMode(auto、prompt 或 approve)为受信任的服务器发出 Codex 原生的 default_tools_approval_mode。在将原生 mcp_servers 配置交给 Codex 之前,OpenClaw 会剥离 codex 元数据。
已保存的 MCP 服务器定义
OpenClaw 还会在配置中存储一个轻量级的 MCP 服务器注册表,用于希望使用 OpenClaw 管理的 MCP 定义的界面。 命令:openclaw mcp listopenclaw mcp show [name]openclaw mcp status [--verbose]openclaw mcp doctor [name] [--probe]openclaw mcp probe [name]openclaw mcp add <name> [flags]openclaw mcp set <name> <json>openclaw mcp configure <name> [flags]openclaw mcp tools <name> [--include csv] [--exclude csv] [--clear]openclaw mcp login <name> [--code code]openclaw mcp logout <name>openclaw mcp reloadopenclaw mcp unset <name>
list会对服务器名称排序。- 不带名称的
show会打印完整配置的 MCP 服务器对象。 status会在不连接的情况下对已配置的传输进行分类。--verbose会包含已解析的启动、超时、OAuth、过滤器和并行调用细节。doctor会在不连接的情况下执行静态检查。当命令还应验证已启用服务器是否能连接时,添加--probe。probe会连接并报告工具数量、resources/prompts 支持、列表变更支持以及诊断信息。add接受 stdio 标志,例如--command、--arg、--env和--cwd,或者 HTTP 标志,例如--url、--transport、--header、--auth oauth、TLS、超时和工具选择标志。set期望在命令行上提供一个 JSON 对象值。configure会更新启用状态、工具过滤器、超时、OAuth、TLS 和并行工具调用提示,而不会替换整个服务器定义。tools会更新每个服务器的工具过滤器。include/exclude 条目是 MCP 工具名称和简单的*通配符。login会为配置了auth: "oauth"的 HTTP 服务器运行 OAuth 流程。首次运行会打印授权 URL;在批准后带上--code重新运行。logout会清除指定服务器已存储的 OAuth 凭据,但不会移除已保存的服务器定义。reload会释放缓存的进程内 MCP 运行时。另一个进程中的网关或代理进程仍然需要它们各自的 reload 或重启路径。- 对于 Streamable HTTP MCP 服务器,请使用
transport: "streamable-http"。openclaw mcp set也会为兼容性将 CLI 原生的type: "http"规范化为相同的规范配置形状。 - 如果指定服务器不存在,
unset会失败。
常见服务器配方
这些示例只会保存服务器定义。之后运行openclaw mcp doctor --probe 以证明服务器已启动并暴露工具。
- 文件系统
- 内存
- 本地脚本
- 远程 HTTP
- 桌面/CUA
JSON 输出形状
脚本和仪表盘请使用--json。字段集可能会随着时间增长,因此消费者应忽略未知键。
status --json
status --json
doctor --json
doctor --json
doctor --json 会以非零状态退出。警告会被报告,但不会单独导致命令失败。probe --json
probe --json
probe 会打开一个实时 MCP 客户端会话。请将其用于可达性和能力证明,而不是用于静态配置审计。Stdio 传输
启动一个本地子进程,并通过 stdin/stdout 通信。| 字段 | 说明 |
|---|---|
command | 要启动的可执行文件(必需) |
args | 命令行参数数组 |
env | 额外的环境变量 |
cwd / workingDirectory | 进程的工作目录 |
SSE / HTTP 传输
通过 HTTP Server-Sent Events 连接到远程 MCP 服务器。| 字段 | 说明 |
|---|---|
url | 远程服务器的 HTTP 或 HTTPS URL(必需) |
headers | 可选的 HTTP 头键值映射(例如认证令牌) |
connectionTimeoutMs | 每个服务器的连接超时,单位为 ms(可选) |
connectTimeout | 每个服务器的连接超时,单位为秒(可选) |
timeout / requestTimeoutMs | 每个服务器的 MCP 请求超时,单位为秒或 ms |
auth: "oauth" | 使用 MCP OAuth 令牌存储和 openclaw mcp login |
sslVerify | 仅对显式信任的私有 HTTPS 端点设置为 false |
clientCert / clientKey | mTLS 客户端证书和密钥路径 |
supportsParallelToolCalls | 提示此服务器可安全进行并发调用 |
url 中的敏感值(userinfo)和 headers 会在日志和状态输出中被脱敏。openclaw mcp doctor 会在 headers 或 env 条目包含字面量值时发出警告,以便操作员将这些值移出已提交的配置。
OAuth 工作流
OAuth 适用于声明了 MCP OAuth 流程的 HTTP MCP 服务器。在启用auth: "oauth" 时,服务器上的静态 Authorization 头会被忽略。
如果提供方轮换了令牌,或者授权状态卡住了,请运行
openclaw mcp logout <name>,然后重复 login。即使 auth: "oauth" 已从配置中移除,只要服务器名称和 URL 仍然能标识该凭据存储条目,logout 也可以清除已保存 HTTP 服务器的凭据。
Streamable HTTP 传输
streamable-http 是与 sse 和 stdio 并列的另一种传输选项。它使用 HTTP 流式传输与远程 MCP 服务器进行双向通信。
| 字段 | 说明 |
|---|---|
url | 远程服务器的 HTTP 或 HTTPS URL(必需) |
transport | 设为 "streamable-http" 以选择此传输;省略时,OpenClaw 使用 sse |
headers | 可选的 HTTP 头键值映射(例如认证令牌) |
connectionTimeoutMs | 每个服务器的连接超时,单位为 ms(可选) |
connectTimeout | 每个服务器的连接超时,单位为秒(可选) |
timeout / requestTimeoutMs | 每个服务器的 MCP 请求超时,单位为秒或 ms |
auth: "oauth" | 使用 MCP OAuth 令牌存储和 openclaw mcp login |
sslVerify | 仅对显式信任的私有 HTTPS 端点设置为 false |
clientCert / clientKey | mTLS 客户端证书和密钥路径 |
supportsParallelToolCalls | 提示此服务器可安全进行并发调用 |
transport: "streamable-http" 作为规范写法。通过 openclaw mcp set 保存时会接受 CLI 原生的 type: "http" 值,并由 openclaw doctor --fix 在现有配置中修复,但 transport 才是嵌入式 OpenClaw 直接消费的内容。
示例:
注册表命令不会启动通道桥接。只有
probe 和 doctor --probe 会打开实时 MCP 客户端会话,以证明目标服务器可达。控制 UI
浏览器 Control UI 包含一个专用的 MCP 设置页面,位于/mcp。它展示已配置的服务器数量、已启用/OAuth/过滤摘要、每个服务器的传输行、启用/禁用控件、常见 CLI 命令,以及 mcp 配置段的作用域编辑器。
将此页面用于运维修改和快速盘点。需要实时服务器证明时,请使用 openclaw mcp doctor --probe 或 openclaw mcp probe。
运维工作流:
- 打开 Control UI 并选择 MCP。
- 查看摘要卡片中的总数、已启用、OAuth 和已过滤服务器。
- 使用每个服务器行查看传输、认证、过滤、超时和命令提示。
- 当你想保留定义但将其排除在运行时发现之外时,切换启用状态。
- 编辑作用域内的
mcp配置段,以进行结构性更改,例如新增服务器、头部、TLS、OAuth 元数据或工具过滤器。 - 选择 Save 仅持久化配置,或选择 Save & Publish 通过 Gateway 配置路径应用。
- 当你需要该已编辑服务器已启动并列出工具的实时证明时,运行
openclaw mcp doctor --probe。
- 命令片段会给服务器名称加引号,因此即使是不常见的名称,在 shell 中也能方便复制
- 当显示的类 URL 值包含嵌入式凭据时,会在渲染前进行脱敏
- 该页面不会自行启动 MCP 传输
- 活动运行时可能需要
openclaw mcp reload、Gateway 配置发布或进程重启,具体取决于哪个进程持有 MCP 客户端
当前限制
此页面记录的是当前随版本发布的桥接功能。 当前限制:- 会话发现依赖于现有的 Gateway 会话路由元数据
- 除了 Claude 特定适配器之外,没有通用的推送协议
- 目前还没有消息编辑或反应工具
- HTTP/SSE/streamable-http 传输连接到单个远程服务器;尚未支持多路复用上游
permissions_list_open只包含桥接连接期间观察到的审批