配置 — MCP、技能和插件
扩展接口:mcp.*、skills.*、plugins.* 和 canvas.*。
完整的键索引以及其他顶级配置域,请参阅配置参考。
MCP¶
OpenClaw 管理的 MCP 服务器定义位于 mcp.servers 下,供嵌入式 OpenClaw 和其他运行时适配器使用。openclaw mcp list、show、set 和 unset 可管理此配置块,而无需连接到服务器。Fetch 示例需要 uv/uvx。
{
mcp: {
servers: {
docs: {
command: "uvx",
args: ["mcp-server-fetch"],
},
remote: {
url: "https://example.com/mcp",
transport: "streamable-http", // streamable-http | sse
requestTimeoutMs: 20000,
connectionTimeoutMs: 5000,
supportsParallelToolCalls: true,
headers: {
Authorization: "Bearer ${MCP_REMOTE_TOKEN}",
},
auth: "oauth",
oauth: {
identity: "per-requester", // shared | per-requester; default: shared
scope: "docs.read",
},
sslVerify: true,
clientCert: "/path/to/client.crt",
clientKey: "/path/to/client.key",
toolFilter: {
include: ["search_*"],
exclude: ["admin_*"],
},
// Optional Codex app-server projection controls.
codex: {
agents: ["main"],
defaultToolsApprovalMode: "approve", // auto | prompt | approve
},
},
},
},
}
mcp.servers:面向会暴露已配置 MCP 工具的运行时,提供命名的 stdio 或远程 MCP 服务器定义。 远程条目使用transport: "streamable-http"或transport: "sse";type: "http"是 CLI 原生别名,openclaw mcp set和openclaw doctor --fix会将其规范化为规范的transport字段。mcp.servers.<name>.enabled:设置为false可保留已保存的服务器定义,同时将其排除在嵌入式 OpenClaw MCP 发现和工具投影之外。mcp.servers.<name>.requestTimeoutMs:每个服务器的 MCP 请求超时时间,单位为毫秒(默认 60 秒)。未设置时,会话开始时的工具列表使用 10 秒。mcp.servers.<name>.connectionTimeoutMs:每个服务器的连接超时时间,单位为毫秒。mcp.servers.<name>.supportsParallelToolCalls:可选的并发提示,供可以选择是否发出并行 MCP 工具调用的适配器使用。mcp.servers.<name>.auth:对于需要 OAuth 的 HTTP MCP 服务器,设置为"oauth"。运行openclaw mcp login <name>可将令牌存储在 OpenClaw 状态中。mcp.servers.<name>.oauth:可选的 OAuth 作用域、重定向 URL 和客户端元数据 URL 覆盖。mcp.servers.<name>.oauth.identity:凭据所有权。省略它或设置为"shared"表示由操作员管理的凭据;设置为"per-requester"可为每个经过身份验证的发送方隔离凭据。按请求方的 OAuth 需要 HTTP 服务器 URL,不能使用oauth.authProfileId,并且其回调需要gateway.publicOrigin。mcp.servers.<name>.sslVerify、clientCert、clientKey:用于私有端点和双向 TLS 的 HTTP TLS 控制。mcp.servers.<name>.toolFilter:可选的按服务器工具选择。include将发现的 MCP 工具限制为匹配的名称;exclude隐藏匹配的名称。条目可以是精确的 MCP 工具名称或简单的*通配符。具有资源或提示的服务器还会生成实用工具名称(resources_list、resources_read、prompts_list、prompts_get),这些名称使用相同的过滤器。mcp.servers.<name>.codex:可选的 Codex app-server 投影控制。 此配置块仅作为 Codex app-server 线程的 OpenClaw 元数据;它不会影响 ACP 会话、通用 Codex harness 配置或其他运行时适配器。 非空的codex.agents会将服务器限制为列出的 OpenClaw agent ID。 空的、空白的或无效的限定 agent 列表会被配置验证拒绝,并由运行时投影路径省略,而不是变为全局。codex.defaultToolsApprovalMode会为对应服务器输出 Codex 原生的default_tools_approval_mode。OpenClaw 在向 Codex 传递原生mcp_servers配置之前会移除codex配置块。省略该配置块可让服务器继续投影给每个 Codex app-server agent,并保持 Codex 默认的 MCP 审批行为。- 会话范围的 MCP 运行时会在轮次之间保持存活,包括静默期以及工具返回后的后台服务器工作。会话重置/删除或压缩 ID 轮换、显式 Stop 以及 Gateway 关闭会使它们退役,并终止其拥有的 stdio 子进程。在存活的会话中完成一个轮次不会使其运行时退役。没有存活运行时会话的分离一次性运行拥有其 MCP 生命周期,并在运行结束时使其运行时退役;仅保留的转录记录不会让它们保持存活。
mcp.sessionIdleTtlMs:可选的空闲驱逐时间,单位为毫秒。未设置或0会保持上述会话生命周期。正的有限值会启用驱逐;小数部分向下取整。例如,mcp: { sessionIdleTtlMs: 3600000 }会在未使用一小时后驱逐。启用期间,扫描每分钟运行一次,并保留活动租约和待处理的获取。此覆盖不会将运行拥有的运行时延长到运行结束之后,也不会阻止显式清理。Doctor 会保留此键。如果之前的doctor --fix移除了它,请从配置备份中恢复预期值;被删除的值无法推断。- 每个 Gateway 最多允许 256 个具有服务器连接的 OpenClaw 管理的 MCP 运行时,跨会话和请求方分区,包括正在创建和清理中的运行时。达到上限时,现有运行时保持存活,新的准入会失败,并记录一条日志消息,提示你停止或重置未使用的会话。一个运行时可以拥有多个已配置的服务器连接。没有可用 MCP 服务器且仅有登录目录的会话不会消耗此限制。原生客户端运行时管理自己的边界。
- MCP 配置更改只会使已更改或已移除的服务器连接退役。未更改的服务器保留其传输和工具目录;活动运行可以继续调用它们的工具和资源。下一轮次的发现会根据新配置创建已更改的服务器。插件重新加载也会使被替换插件或其解析器拥有的连接退役。请求方登录工具会在运行时替换后的下一条消息上刷新。
- 运行时发现还会通过丢弃受影响服务器的缓存目录来遵循 MCP 工具列表变更通知。提供资源或提示的服务器会获得用于列出/读取资源以及列出/获取提示的实用工具。重复的工具调用失败会短暂暂停受影响的服务器,然后再尝试下一次调用。
技能¶
{
skills: {
allowBundled: ["gemini", "peekaboo"],
load: {
extraDirs: ["~/path/to/agent-scripts/skills"],
allowSymlinkTargets: ["~/path/to/skills"],
},
install: {
preferBrew: true,
nodeManager: "npm", // npm | pnpm | yarn | bun
allowUploadedArchives: false,
},
entries: {
"image-lab": {
apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string
env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
},
peekaboo: { enabled: true },
sag: { enabled: false },
},
},
}
allowBundled:仅针对捆绑技能的可选允许列表(不影响受管/工作区技能)。load.extraDirs:额外的共享技能根目录(优先级最低)。load.allowSymlinkTargets:当符号链接位于其配置的源根目录之外时,技能符号链接可以解析到的受信任真实目标根目录。install.preferBrew:为true时,在brew可用时优先使用 Homebrew 安装器,然后再回退到其他安装器类型。install.nodeManager:metadata.openclaw.install规范中的 Node 安装器偏好(npm|pnpm|yarn|bun)。install.allowUploadedArchives:允许受信任的operator.adminGateway 客户端安装通过skills.upload.*暂存的私有 zip 归档(默认:false)。这仅启用已上传归档路径;常规 ClawHub 安装不需要它。entries.<skillKey>.enabled: false会禁用某个技能,即使它是捆绑的或已安装的。entries.<skillKey>.apiKey:为声明主要环境变量(明文字符串或 SecretRef 对象)的技能提供便捷配置。limits.maxCandidatesPerRoot、limits.maxSkillsLoadedPerSource、limits.maxSkillsInPrompt、limits.maxSkillsPromptChars、limits.maxSkillFileBytes:限制技能发现以及面向模型的技能提示。- Skill Workshop 自主/审批设置(
workshop.autonomous.mode、workshop.approvalPolicy、workshop.maxPending、workshop.maxSkillBytes)记录在 技能配置 中。
插件¶
{
plugins: {
enabled: true,
allow: ["voice-call"],
deny: [],
load: {
paths: ["~/path/to/oss/voice-call-plugin"],
},
entries: {
"voice-call": {
enabled: true,
hooks: {
allowPromptInjection: false,
},
config: { provider: "twilio" },
},
},
},
}
- 从
~/.openclaw/extensions和<workspace>/.openclaw/extensions下的包或捆绑目录加载,外加plugins.load.paths中列出的文件或目录。 - 将独立插件文件放在
plugins.load.paths中;自动发现的扩展根目录会忽略顶层.js、.mjs和.ts文件,因此这些根目录中的辅助脚本不会阻止启动。 - 发现机制接受原生 OpenClaw 插件,以及兼容的 Codex 捆绑包和 Claude 捆绑包,包括无清单的 Claude 默认布局捆绑包。
- 在默认的混合重载模式下,常规插件策略、条目和发现路径更改会热重载插件运行时。条目配置更改会替换受影响的实例。在编辑源代码或清单后,请使用
openclaw plugins reload <id>;活动插件仍可以声明会触发重启的配置前缀。请参阅 应用更改并检查。 allow:可选允许列表(仅加载列出的插件)。deny优先。plugins.entries.<id>.apiKey:插件级 API 密钥便捷字段(如果插件支持)。plugins.entries.<id>.env:插件作用域的环境变量映射。plugins.entries.<id>.hooks.allowPromptInjection:为false时,核心会阻止修改提示的钩子,例如before_prompt_build。适用于原生插件钩子以及受支持的捆绑包提供的钩子目录。plugins.entries.<id>.hooks.allowConversationAccess:为true时,受信任的非捆绑插件可以从类型化钩子(例如before_model_resolve、agent_turn_prepare、before_prompt_build、before_agent_reply、llm_input、llm_output、before_agent_run、before_agent_finalize和agent_end)读取原始会话内容。它还会授予有界、调用作用域的session_end已结束转录读取器;仅元数据的session_end处理器无需该授权即可继续注册。plugins.entries.<id>.subagent.allowModelOverride:明确信任此插件为后台子代理运行请求每次运行的provider和model覆盖。plugins.entries.<id>.subagent.allowedModels:受信任子代理覆盖的规范provider/model目标可选允许列表。仅当你有意允许任意模型时,才使用"*"。plugins.entries.<id>.llm.allowModelOverride:明确信任此插件为api.runtime.llm.complete请求模型覆盖。plugins.entries.<id>.llm.allowedModels:受信任模型覆盖的规范provider/model目标可选允许列表。仅当你有意允许任意模型覆盖时,才使用"*"。plugins.entries.<id>.llm.allowedCompletionModels:应用于每个插件 LLM 补全的可选允许列表,包括主机解析的默认值和覆盖值。仅当你有意允许任意模型时,才使用"*"。plugins.entries.<id>.llm.allowAuthProfileOverride:明确信任此插件为隔离的api.runtime.llm.complete执行选择非默认身份验证配置文件。直接的model@profile调用仍受模型覆盖策略约束。plugins.entries.<id>.llm.allowAgentIdOverride:明确信任此插件针对非默认代理 ID 运行api.runtime.llm.complete。plugins.entries.<id>.config:插件定义的配置对象(在可用时由原生 OpenClaw 插件模式验证)。- 通道插件的账户/运行时设置位于
channels.<id>下,并应由所属插件清单中的channelConfigs元数据描述,而不是由中央 OpenClaw 选项注册表描述。
Codex harness 插件配置¶
捆绑的 codex 插件管理位于
plugins.entries.codex.config 下的原生 Codex app-server harness 设置。有关完整配置
范围,请参阅
Codex harness 参考;有关运行时模型,请参阅
Codex harness。
codexPlugins 仅适用于选择原生 Codex harness 的会话。
它不会为 OpenClaw 提供商运行、ACP
会话绑定或任何非 Codex harness 启用 Codex 插件。
{
plugins: {
entries: {
codex: {
enabled: true,
config: {
codexPlugins: {
enabled: true,
allow_all_plugins: true,
allow_destructive_actions: "auto",
plugins: {
"google-calendar": {
enabled: true,
marketplaceName: "openai-curated",
pluginName: "google-calendar",
allow_destructive_actions: false,
},
},
},
},
},
},
},
}
plugins.entries.codex.config.codexPlugins.enabled:为 Codex harness 启用原生 Codex 插件/应用支持。默认值:false。plugins.entries.codex.config.codexPlugins.allow_all_plugins:在每个新的原生 Codex 线程中,公开当前可访问的、已连接到经过身份验证的 Codex 账户的所有应用。默认值:false。plugins.entries.codex.config.codexPlugins.allow_destructive_actions: 为已配置的插件应用 elicitation(征询)设置默认破坏性操作策略。 使用true可在不提示的情况下接受安全的 Codex 审批模式,使用false可拒绝它们,使用"auto"可将 Codex 必需的审批路由到 OpenClaw 插件审批,或使用"ask"对每个插件写入/破坏性操作进行提示,而不使用持久审批。"ask"模式会在 Codex 线程启动前,清除受影响应用的持久 Codex 按工具审批覆盖,并为该应用选择人工审批审核员。 默认值:true。plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled:当全局codexPlugins.enabled也为 true 时,启用已配置的插件条目。 显式条目的默认值为true。plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: 稳定的市场标识,对于每个已解析条目,必须与pluginName一起提供。 支持 Codex 已可发现的任何有效市场, 包括"openai-curated"、"openai-bundled"、"openai-primary-runtime"、"workspace-directory"以及仓库本地 市场标识。缺少任一标识字段的条目将被忽略。plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName:稳定的 Codex 插件标识,必须与marketplaceName一起提供。对于插件标识符带有 市场限定符的市场,请使用 Codex 报告的精确标识。/codex plugins available会列出可发现的 标识,所有者或operator.admin可以使用/codex plugins install <plugin>@<marketplace>安装其中一个。plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: 按插件的破坏性操作覆盖。省略时,使用全局allow_destructive_actions值。按插件值接受相同的true、false、"auto"或"ask"策略。
每个使用 "ask" 的已准入插件应用都会将该应用的审批请求
路由到人工审核员。其他应用和非应用线程审批会保留其
已配置的审核员,因此混合插件策略不会继承 "ask" 行为。
codexPlugins.enabled 是全局启用指令。迁移写入的显式插件
条目会保留持久的精选安装和修复资格。所有者或 operator.admin 可以使用
/codex plugins install <plugin>@<marketplace> 添加其他已发现的插件;Codex 仍然控制上游
安装和连接器身份验证。缺少精确标识、
安装或可访问应用所有权的插件会失败关闭。plugins["*"] 不受
支持,本地 marketplacePath 值有意不作为配置字段,因为它们是主机特定的。有关 app-server 版本和
就绪要求,请参阅
原生 Codex 插件。
app/installed 就绪检查(带有来自批量
app/read 的授权元数据)会缓存一小时,并在
过期时异步刷新。Codex 线程应用配置在 Codex harness
会话建立时计算,而不是在每一轮计算;更改原生插件配置后,请使用 /new、/reset 或重启网关。
codexPlugins.allow_all_plugins 会将当前每个可访问的账户
应用快照到每个新的原生 Codex 线程。它不会安装插件或应用,且
不可访问的应用仍会被排除。账户应用使用全局
codexPlugins.allow_destructive_actions 策略。当同一应用同时存在于两条路径中时,显式插件条目优先。如果 app/installed
无法读取,则整个账户的公开范围会失败关闭。
plugins.entries.firecrawl.config.webFetch:Firecrawl 网页抓取提供商设置。apiKey:可选的 Firecrawl API 密钥,用于更高限制(接受 SecretRef)。回退到plugins.entries.firecrawl.config.webSearch.apiKey或FIRECRAWL_API_KEY环境变量。baseUrl:Firecrawl API 基础 URL(默认:https://api.firecrawl.dev;自托管覆盖必须指向私有/内部端点)。onlyMainContent:仅从页面提取主要内容(默认:true)。maxAgeMs:最大缓存时长(毫秒)(默认:172800000/ 2 天)。timeoutSeconds:抓取请求超时时间(秒)(默认:60)。plugins.entries.xai.config.xSearch:xAI X Search(Grok 网页搜索)设置。enabled:启用 X Search 提供商。model:用于搜索的 Grok 模型(例如"grok-4.3")。plugins.entries.memory-core.config.dreaming:记忆 dreaming 设置。有关阶段和阈值,请参阅 Dreaming。enabled:dreaming 主开关(默认false)。frequency:每次完整 dreaming 扫描的 cron 周期(默认为"0 3 * * *")。model:可选的 Dream Diary 子代理模型覆盖。需要plugins.entries.memory-core.subagent.allowModelOverride: true;与allowedModels搭配使用以限制目标。模型不可用错误会使用会话默认模型重试一次;信任或允许列表失败不会静默回退。- 阶段策略和阈值是实现细节(不是面向用户的配置键)。
- 完整的记忆配置位于 记忆配置参考:
memory.search.*agents.entries.*.memory.search.*用于按代理覆盖memory.citationsplugins.entries.memory-core.config.dreaming- 已启用的 Claude 捆绑插件也可以从
settings.json提供嵌入的 OpenClaw 默认值;OpenClaw 会将其作为已净化的代理设置应用,而不是作为原始 OpenClaw 配置补丁。 plugins.slots.memory:选择活动的记忆插件 id,或使用"none"禁用记忆插件。plugins.slots.contextEngine:选择活动的上下文引擎插件 id;除非你安装并选择另一个引擎,否则默认为"legacy"。
参见 插件。
Canvas 小部件展示器¶
{
plugins: {
entries: {
canvas: {
config: {
host: {
enabled: true, // set false, or use OPENCLAW_SKIP_CANVAS_HOST=1
},
},
},
},
},
}
host.enabled是唯一的 Canvas 主机开关,默认启用。它控制/__openclaw__/canvas/下的托管小部件文档以及/__openclaw__/a2ui/下的 A2UI 渲染器资源。- 仅本地:保持
gateway.bind: "loopback"(默认)。 - 非 loopback 绑定:这些路由需要 Gateway 身份验证(token/password/trusted-proxy),与其他 Gateway HTTP 表面相同。
- Node WebView 通常不会发送身份验证头;在 macOS 节点完成配对并连接后,Gateway 会通告一个节点范围的
pluginSurfaceUrls.canvas能力 URL。 - 能力 URL 绑定到当前活动的节点 WS 会话,并会很快过期。不会使用基于 IP 的回退。
host.enabled在默认混合重载模式下通过 Canvas 插件热生效。OPENCLAW_SKIP_CANVAS_HOST环境变量覆盖仍需要重启 Gateway。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw