Skip to content

Codex 启动报错:MCP 配置的 command 数组被错误地序列化为字符串 #192

Description

@mmer1435

Title:

环境

  • HermesPet 版本:1.4.1 (Apple Silicon)
  • macOS 版本:macOS 15.x
  • Codex CLI 版本:最新

问题描述

opencode.json 中配置了 MCP server(如 notion),HermesPet 启动 Codex 时会将 MCP 配置注入到 ~/.codex/config.toml。但注入过程中,command 字段的 数组类型被错误地序列化为字符串,导致 Codex 解析 config.toml 失败。

复现步骤

  1. opencode.json 中配置一个 MCP server,例如:
{
  "mcp": {
    "notion": {
      "command": ["npx", "-y", "@notionhq/notion-mcp-server"],
      "enabled": true,
      "type": "local"
    }
  }
}
  1. 启动 HermesPet(它会自动将 MCP 配置写入 Codex 的 config.toml)
  2. Codex 启动时报错

实际结果

Codex 报错:

❌ Codex: Error loading config.toml: invalid type: string "[\"-y\",\"@notionhq\\/notion-mcp-server\"]", expected a sequence
in `mcp_servers.notion.args`

config.toml 中被写入了字符串而非数组:

# 错误:args 是字符串
[mcp_servers.notion]
args = "[\"-y\",\"@notionhq/notion-mcp-server\"]"

期望结果

config.toml 中应写入合法的 TOML 数组:

# 正确:args 是数组
[mcp_servers.notion]
args = ["-y", "@notionhq/notion-mcp-server"]

补充说明

  • opencode.json 中的 command 数组第一个元素("npx")似乎被用作 command 字段,剩余元素作为 args,但 args 被整体 JSON.stringify 成了字符串
  • 此 bug 在 MCP server 的 command 数组有 3 个及以上元素 时更容易触发(apple MCP 只有 3 个元素但可能碰巧格式不同)
  • 临时 workaround:在 opencode.json 中将对应 MCP server 的 enabled 设为 false

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions