Skip to content

Commit df9df69

Browse files
committed
feat: support codex mcp extended config fields
1 parent c460c31 commit df9df69

16 files changed

Lines changed: 249 additions & 96 deletions

File tree

app_mappers.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,7 @@ func mapCodexMcpServer(server wailsapp.CodexMcpServer) CodexMcpServer {
666666
BearerTokenEnvVar: server.BearerTokenEnvVar,
667667
HTTPHeaders: mapCodexMcpEnvRows(server.HTTPHeaders),
668668
EnvHTTPHeaders: mapCodexMcpEnvRows(server.EnvHTTPHeaders),
669+
EnvironmentID: server.EnvironmentID,
669670
ExperimentalEnvironment: server.ExperimentalEnvironment,
670671
Required: server.Required,
671672
SupportsParallelToolCalls: server.SupportsParallelToolCalls,
@@ -675,6 +676,7 @@ func mapCodexMcpServer(server wailsapp.CodexMcpServer) CodexMcpServer {
675676
EnabledTools: append([]string(nil), server.EnabledTools...),
676677
DisabledTools: append([]string(nil), server.DisabledTools...),
677678
Scopes: append([]string(nil), server.Scopes...),
679+
OAuthClientID: server.OAuthClientID,
678680
OAuthResource: server.OAuthResource,
679681
Tools: mapCodexMcpToolRows(server.Tools),
680682
RawConfig: server.RawConfig,
@@ -699,6 +701,7 @@ func mapWailsCodexMcpServer(server CodexMcpServer) wailsapp.CodexMcpServer {
699701
BearerTokenEnvVar: server.BearerTokenEnvVar,
700702
HTTPHeaders: mapWailsCodexMcpEnvRows(server.HTTPHeaders),
701703
EnvHTTPHeaders: mapWailsCodexMcpEnvRows(server.EnvHTTPHeaders),
704+
EnvironmentID: server.EnvironmentID,
702705
ExperimentalEnvironment: server.ExperimentalEnvironment,
703706
Required: server.Required,
704707
SupportsParallelToolCalls: server.SupportsParallelToolCalls,
@@ -708,6 +711,7 @@ func mapWailsCodexMcpServer(server CodexMcpServer) wailsapp.CodexMcpServer {
708711
EnabledTools: append([]string(nil), server.EnabledTools...),
709712
DisabledTools: append([]string(nil), server.DisabledTools...),
710713
Scopes: append([]string(nil), server.Scopes...),
714+
OAuthClientID: server.OAuthClientID,
711715
OAuthResource: server.OAuthResource,
712716
Tools: mapWailsCodexMcpToolRows(server.Tools),
713717
RawConfig: server.RawConfig,

app_types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,7 @@ type CodexMcpServer struct {
809809
BearerTokenEnvVar string `json:"bearerTokenEnvVar,omitempty"`
810810
HTTPHeaders []CodexMcpEnvRow `json:"httpHeaders,omitempty"`
811811
EnvHTTPHeaders []CodexMcpEnvRow `json:"envHttpHeaders,omitempty"`
812+
EnvironmentID string `json:"environmentId,omitempty"`
812813
ExperimentalEnvironment string `json:"experimentalEnvironment,omitempty"`
813814
Required bool `json:"required,omitempty"`
814815
SupportsParallelToolCalls bool `json:"supportsParallelToolCalls,omitempty"`
@@ -818,6 +819,7 @@ type CodexMcpServer struct {
818819
EnabledTools []string `json:"enabledTools,omitempty"`
819820
DisabledTools []string `json:"disabledTools,omitempty"`
820821
Scopes []string `json:"scopes,omitempty"`
822+
OAuthClientID string `json:"oauthClientId,omitempty"`
821823
OAuthResource string `json:"oauthResource,omitempty"`
822824
Tools []CodexMcpToolRow `json:"tools,omitempty"`
823825
RawConfig string `json:"rawConfig,omitempty"`

docs-linhay/dev/codex-skills-mcp-architecture-2026-05-12.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@
4545
5. `startup_timeout_ms` 读取时折算为秒展示;写回统一使用 `startup_timeout_sec`,避免新旧字段同时存在。
4646
6. modal 布局保持单层 overlay:最外层 overlay 负责滚动,表单 `main` 不独立滚动;桌面宽度下右侧当前值栏与编辑区并排,移动端自然下排。
4747

48+
## 2026-05-24 MCP 配置字段补齐
49+
50+
再次按 `docs-linhay/references/codex/codex-rs/config/src/mcp_types.rs``mcp_edit.rs` 校准后,Codex 当前有效 MCP 配置还包括:
51+
52+
1. shared:`environment_id`。省略时 Codex 等价为 `local`;当 stdio server 使用非 `local` environment 时,Codex 要求 `cwd` 为绝对路径。
53+
2. HTTP OAuth:`[mcp_servers.<id>.oauth] client_id = "..."`,也可由 TOML inline table 表达为 `oauth = { client_id = "..." }`
54+
55+
本轮实现策略:
56+
57+
1. 后端 DTO / parser / patch 支持 `environment_id``oauth.client_id``startup_timeout_sec``startup_timeout_ms` 仍只作为读取兼容字段,写回统一为秒。
58+
2. `[mcp_servers.<id>.oauth]``[mcp_servers.<id>.tools.<tool>]` 一样归属于父 server,不作为独立 server 行展示。
59+
3. 保存单个 server 时只替换目标主 section 与目标 oauth nested section,继续保留其它 server、nested tools、未知字段和非 MCP 配置。
60+
4. 编辑 modal 中 transport 字段、runtime 字段、tool scope 字段改为可直接新增,不再只显示已有值;用户可以直接填写 `startup_timeout_sec = 20` 这类空白配置。
61+
4862
## 后端模块建议
4963

5064
### `internal/codexskills`
@@ -191,8 +205,9 @@ Codex 字段:
191205

192206
1. stdio:`command``args``env``env_vars``cwd`
193207
2. streamable_http:`url``bearer_token_env_var``http_headers``env_http_headers`
194-
3. shared:`enabled``required``supports_parallel_tool_calls``startup_timeout_sec``startup_timeout_ms``tool_timeout_sec``default_tools_approval_mode``enabled_tools``disabled_tools``scopes``oauth_resource``tools`
195-
4. nested tool policy:`[mcp_servers.<id>.tools.<tool>] approval_mode = "approve|prompt|auto"` 属于 `<id>` server 的嵌套配置,不是独立 MCP server。
208+
3. shared:`enabled``environment_id``required``supports_parallel_tool_calls``startup_timeout_sec``startup_timeout_ms``tool_timeout_sec``default_tools_approval_mode``enabled_tools``disabled_tools``scopes``oauth_resource``tools`
209+
4. nested OAuth:`[mcp_servers.<id>.oauth] client_id = "..."` 属于 `<id>` server。
210+
5. nested tool policy:`[mcp_servers.<id>.tools.<tool>] approval_mode = "approve|prompt|auto"` 属于 `<id>` server 的嵌套配置,不是独立 MCP server。
196211

197212
校验:
198213

docs-linhay/memory/2026-05-24.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
- CLIProxyAPI 验证:子仓库 `go test ./internal/registry``go test ./internal/runtime/executor``go test ./...``git diff --check` 均通过;已执行 `./scripts/ensure-sidecar.sh darwin arm64` 重建本地 sidecar,meta 为 `commit=1c5db246``dirty=clean`
1010
- 账号池分组与排序模式规划:`#frame=accounts` 后续需要从固定 provider 分组升级为可切换分组模式,并新增排序模式。默认按套餐分组、按业务优先级排序;P0 分组维度为套餐、来源、状态,P0 排序维度为业务优先级、名称、状态、剩余额度;P1 再规划供应商/资源状态分组与重置时间/最近使用排序。分组和排序只改变列表组织方式,不改变筛选、选择、路由、轮动、禁用或导出语义;详细规划写入 `docs-linhay/spaces/account-pool/plans/20260524-account-grouping-mode-plan-v01.md`,入口 README 已同步。
1111
- 账号池分组与排序实现:`#frame=accounts` 主列表已新增分组/排序工具栏入口,默认 `group=plan``sort=priority`;支持套餐/来源/状态/供应商/资源分组,以及业务优先级/名称/状态/剩余额度/重置时间排序。顶层 hash canonicalizer 已保留 `group` / `sort`,避免切换后被还原成 `#frame=accounts`。验证:`npm --prefix frontend run typecheck``npm --prefix frontend run test:unit` 通过;浏览器验证 `#frame=accounts&group=source&sort=quota` 可恢复“分组 · 来源 / 排序 · 剩余额度”,截图归档到 `docs-linhay/spaces/account-pool/screenshots/20260524/accounts/20260524-accounts-group-sort-toolbar-after-v01.png`
12+
- Codex MCP 配置字段补齐:按 `docs-linhay/references/codex/codex-rs/config/src/mcp_types.rs``mcp_edit.rs` 校准后,`MCP Servers` 编辑器补齐 `environment_id``oauth.client_id` 与可直接新增的 `startup_timeout_sec` / `tool_timeout_sec` 等字段;后端解析和保存 `[mcp_servers.<id>.oauth] client_id`,并保持 nested tools、未知字段和非目标配置不被重写。验证:`go test .``go test ./internal/wailsapp -run 'Codex|Mcp|Skill'``go test ./internal/wailsapp -run 'TestGetCodexMcpServersParsesSectionServers|TestSaveCodexMcpServerPatchesTargetSectionOnly'``npm run test:unit -- src/features/codex-extensions/model.test.mjs``npm run typecheck` 通过;Chrome 本地页面确认 `startup_timeout_sec = 20` 可产生变更预览,截图归档到 `docs-linhay/spaces/20260511-cc-switch-codex-skills-mcp/screenshots/20260524/codex-extensions/20260524-codex-extensions-mcp-config-fields-after-v01.png`

docs-linhay/spaces/20260511-cc-switch-codex-skills-mcp/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ And 浏览器预览环境使用内置 preview 文本,不访问本机文件系
253253
## 当前状态
254254

255255
- 状态:implementation-cleanup-completed
256-
- 最近更新:2026-05-14
256+
- 最近更新:2026-05-24
257257
- 已完成首个 Web 切片:
258258
- Codex 侧边栏新增 `Skills` / `MCP Servers` 两个独立入口。
259259
- 前端新增 `features/codex-extensions/`,在浏览器无 Wails runtime 时使用稳定预览数据。
@@ -271,9 +271,11 @@ And 浏览器预览环境使用内置 preview 文本,不访问本机文件系
271271
- MCP server 编辑 modal 左侧表单只展示当前 server 已配置的有效字段:transport 必需字段保留,空的 `cwd/env/env_vars`、HTTP header、runtime、tool filters 等可选字段不默认渲染。
272272
- MCP server 编辑 modal 的滚动由整个 overlay / dialog 承担,不在表单 `main` 内做独立滚动;桌面视口下收窄 max-height,避免底部贴边。
273273
- MCP server 编辑 modal 按 Codex transport 互斥语义分区:stdio 展示 `command/args/env/env_vars/cwd`,streamable_http 展示 `url/bearer_token_env_var/http_headers/env_http_headers/oauth_resource`,共享区展示 `required/supports_parallel_tool_calls/timeouts/tool filters/scopes`
274+
- MCP server 编辑 modal 已补齐 Codex 当前源码字段并允许直接新增空白可选项:runtime 区支持 `environment_id``startup_timeout_sec``tool_timeout_sec``default_tools_approval_mode`,HTTP 区支持 `oauth.client_id``oauth_resource`;STDIO 验收确认填写 `startup_timeout_sec = 20` 后出现字段级变更预览。
274275
- MCP server 编辑 modal 左侧表单改为单层分区布局:左列展示分区标题与 transport/meta,右列统一字段网格;布尔项使用 `ToggleField` 展示字段名、当前 true/false 和通用 `ToggleSwitch`,避免只显示开关导致层级不齐。
275276
- MCP server 编辑 modal 在常规桌面宽度使用右侧当前值栏,结构对齐会话页 detail 布局,不把当前值区压到页面底部。
276277
- MCP Servers 列表区经 debate 收敛后移除独立 metrics 卡片;总数、启用数、待保存数、config path 与 visible count 合入列表 section header,页面保持“只要列表”的单 section 结构。
278+
- 截图归档:`screenshots/20260524/codex-extensions/20260524-codex-extensions-mcp-config-fields-after-v01.png`
277279
- 已完成首个真实后端切片:
278280
- `internal/wailsapp` 新增 Codex Skills / MCP 基础 service。
279281
- Skills 支持按 Codex 全局 roots 扫描 `SKILL.md`、解析 YAML front matter、返回去 front matter 预览正文;依据 Codex `core-skills/src/loader.rs`,全局 roots 保留 User/System layer,排除 Repo scope 与 plugin/Git 追加 roots。

0 commit comments

Comments
 (0)