跳转到内容
EN

安装 MCP server:按 agent 转换格式

Claude Code 把 MCP server 存储在 ~/.claude.json 的 mcpServers 下,格式为 JSON。Codex 存储在 ~/.codex/config.toml 中,格式为 TOML,每个 server 一个 [mcp_servers.<name>] 段。Hermes 使用 YAML,OpenCode 使用自己的一套 JSON 结构。同一个 server,在每个 agent 中都需要采用不同的写法。

  • Claude Code~/.claude.json, JSON

    "mcpServers": {
      "git": {
        "command": "uvx",
        "args": ["mcp-server-git"]
      }
    }
  • Codex~/.codex/config.toml, TOML

    [mcp_servers.git]
    command = "uvx"
    args = ["mcp-server-git"]
  • Gemini CLI~/.gemini/settings.json, JSON

    "mcpServers": {
      "git": {
        "command": "uvx",
        "args": ["mcp-server-git"]
      }
    }
  • OpenCode~/.config/opencode/opencode.json, JSONC

    "mcp": {
      "git": {
        "type": "local",
        "command": ["uvx", "mcp-server-git"]
      }
    }
  • Hermes~/.hermes/config.yaml, YAML

    mcp_servers:
      git:
        command: uvx
        args: [mcp-server-git]
同一个本地 server,写在 5 个 agent 的配置文件里,共 4 种格式。高亮的是各家不同的地方。
  1. 读取。HarnessKit 在来源 agent 对应范围的配置文件中找到该 server。对本地 server 读取命令、参数和环境变量,对远程 server 读取 URL 和 header。
  2. 检查。若目标无法加载该 server 的传输类型,流程到此终止。见本地和远程 server。
  3. 转换。按目标 agent 的格式生成这一条配置。
  4. 写入。把这一条添加到目标的配置文件中。在该范围中已有同名 server 的 agent 会被跳过。勾选覆盖已有副本时,大多数 agent 上会直接替换;Grok Build 和 OpenClaw 会保留旧条目的其他键,DeepSeek Harness 则拒绝安装。

扩展页面上的安装到智能体可以一次把多个 server 安装到多个 agent,每一对都执行上述步骤,详见安装 skill。

下面是 Claude Code 中一个本地的 GitHub server:

~/.claude.json
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_…" }
}
}
}

安装到 Codex 后,Codex 的配置文件中会新增这张表:

~/.codex/config.toml
[mcp_servers.github]
args = [
"-y",
"@modelcontextprotocol/server-github",
]
command = "npx"
[mcp_servers.github.env]
GITHUB_PERSONAL_ACCESS_TOKEN = "ghp_…"

Codex 和 DeepSeek Harness 的 server 名称只允许字母、数字、_ 和 -,HarnessKit 为 Grok Build 写入名称时也按此处理。其他字符都替换为 -,因此 microsoft/markitdown 会变为 microsoft-markitdown。DeepSeek Harness 的名称还会截断为 32 个字符。这三个 agent 的条目都用 _hk_name 键保存原名,因此 HarnessKit 仍能把它与其他 agent 中的副本归为一组。

Antigravity 和 Devin Desktop 是桌面应用,可能无法获取你 shell 中的 PATH。为它们安装时,HarnessKit 会把命令替换为完整路径,例如 /opt/homebrew/bin/npx,并添加一个包含该命令所在目录的 PATH 变量。若条目中已设置 PATH,则不再添加。

远程 server 指 agent 按 URL 连接的 server,传输方式为 Streamable HTTP 或较早的 SSE。各个 agent 编写远程条目的方式不同:Claude Code 用 type 和 url,Gemini CLI 用 httpUrl 或 url,Devin Desktop 用 serverUrl,Codex 用 url,header 放在 http_headers 下。

有些 agent 并不能加载所有远程 server:

  • Codex、DeepSeek Harness 和 Pi 只接受 Streamable HTTP,因此 HarnessKit 拒绝为它们安装 SSE server。
  • OpenClaw 暂不接受 HarnessKit 安装的远程 server。

在这些 agent 上,安装到智能体下对应的 agent 按钮显示为灰色,悬停提示会说明它缺少哪种传输类型。写入之前,HarnessKit 还会再检查一次。

Hermes、Kiro、Oh My Pi、DeepSeek Harness、Grok Build、OpenClaw 和 Pi 自带开关,可以单独禁用每个 server。HarnessKit 使用的就是这个开关,条目原样保留在配置中。

其他 agent 没有可供 HarnessKit 使用的开关。在这些 agent 上,禁用会把条目从配置中删除,同时在 HarnessKit 的数据库中保存一份快照,即这条配置的原样副本。启用时,HarnessKit 会把副本写回配置,再将其从数据库中删除。

环境变量和 header 会原样复制,token 也不例外。在详情面板中,每个值都显示为 ****。已禁用 server 的快照中保留着它的密钥;删除快照时,数据库会将这些字节清零。HarnessKit 在 schema 升级前创建的备份,仍保留着备份时写入的密钥。

HarnessKit 1.10.0 及更早的版本在快照中用 <redacted> 代替每个密钥。重新启用这类 server 时,HarnessKit 会提醒你,并列出需要重新填写的键。

  • crates/hk-core/src/adapter/mod.rs 定义各种配置格式和默认值,同一文件夹中每个 agent 自己的文件会覆盖这些默认值。
  • crates/hk-core/src/deployer.rs 每种格式一个写入器,并拒绝目标无法加载的传输类型。
  • crates/hk-core/src/service.rs 查找来源条目,为桌面应用类的 agent 补全命令路径,并在详情面板中遮盖密钥。
  • crates/hk-core/src/manager.rs 负责启用和禁用:使用 agent 自带的开关,或删除条目并保存一份快照。
  • crates/hk-core/src/kits/install_plan.rs 是只有工具集才会运行的冲突检查。