﻿---
title: "安装 Cockpit Codex 插件"
summary: "先用 Dart 安装 Cockpit，再从 cockpit-dev/cockpit 安装 cockpit@cockpit。插件会登记本地 cockpit_mcp 服务。"
category: skills
level: starter
surfaces: [cli, app, ide]
tags: ["MCP", "Cockpit", "插件", "Flutter", "stdio"]
canonical: /tips/cockpit-codex-plugin/
---

# 安装 Cockpit Codex 插件

先用 Dart 安装 Cockpit，再从 cockpit-dev/cockpit 安装 cockpit@cockpit。插件会登记本地 cockpit_mcp 服务。

Cockpit 插件先 dart pub global activate cockpit any，再 plugin add cockpit@cockpit。官方 INSTALL.md 和 agent-integrations.md 都提供 Codex 安装说明。Cockpit 是宿主机上的 Dart 可执行文件，不是 Flutter 应用依赖；插件只捆技能和 MCP 适配器，**不会**把 `cockpit_mcp` 二进制拷进缓存。

先装运行时，并让 Dart 全局 bin 在 PATH 里（常见是 `~/.pub-cache/bin`）。不要 `flutter pub global activate cockpit`，也不要从某个 app 的依赖图里装宿主：

```bash
dart pub global activate cockpit any
cockpit help
which cockpit_mcp
codex plugin marketplace add cockpit-dev/cockpit
codex plugin add cockpit@cockpit
```

清单 `.agents/plugins/marketplace.json` 的 name 是 `cockpit`，插件 name 也是 `cockpit`，source.path 是 `./plugins/codex/cockpit`，所以是 `cockpit@cockpit`。现行插件版本是 4.9.0。`codex plugin list` 应看到 installed, enabled。0.154 起可先检查当前会话；未显示插件时再新开会话。清单 `authentication` 是 `ON_INSTALL`：装插件时 Codex 会要你确认，**不是** `mcp login`，也没有 API key。

已装过就先刷新快照再装一次缓存：

```bash
codex plugin marketplace upgrade cockpit
codex plugin add cockpit@cockpit
```

`upgrade` 用清单名 `cockpit`，不是仓库路径 `cockpit-dev/cockpit`。装完或升级后新开会话。插件 `.mcp.json` 是：

```json
{
  "mcpServers": {
    "cockpit": {
      "type": "stdio",
      "command": "cockpit_mcp",
      "args": []
    }
  }
}
```

command 走 PATH 上的 `cockpit_mcp`，无参。**不要**在 MCP handshake 之外裸跑 `cockpit_mcp`。只要 MCP、不装插件时：

```bash
codex mcp add cockpit -- cockpit_mcp
```

```toml
[mcp_servers.cockpit]
command = "cockpit_mcp"
args = []
enabled = true
```

用户配置中的服务名是 `cockpit`。这是本机 stdio，**不要** `codex mcp login cockpit`。已经用插件登记过就**不要**再 `mcp add` 同一张 `cockpit` 表。CLI + Skill 是默认控制面；MCP 是可选 typed 传输。两者打到同一套 Supervisor，同一任务不要两套一起跑，会重复 mutation。文档：装插件不等于授权去 inspect / control / start / stop 应用；用户明确说用 Cockpit 才激活。

升级运行时先 `cockpit update --check`，有 `next` 再 `cockpit update`，然后 `cockpit skill` 刷新技能提示。报错提到无关 Flutter 插件（例如 `ffmpeg_kit_extended_flutter`）或 Dart `native-assets` 时，不要加编译实验旗标；核对 `dart --version`、`which dart`、`which cockpit`、`cockpit --version`，换到中性目录重跑 `dart pub global activate cockpit any`。

宿主自检：`cockpit help`、`cockpit --version`、`cockpit daemon status`、`cockpit session list`。对 Flutter 项目才 `cockpit target discover`，读清 id / name / platform / emulator / sdk，再 `cockpit dev start --device YOUR_DEVICE_ID`。多行兼容时问用户选哪一个，不要隐式选主机、Flutter 默认设备或在模拟器与真机之间切换。`deviceAmbiguous` 就指定一个已列出的 id；`deviceNotFound` 修那个设备再 discover。装宿主运行时或技能本身不必 discover。这不是 Arenukvern 的 Flutter MCP toolkit，也不是 dart-lang 官方 Dart MCP。

点按、热重载、起停应用保留操作审批。

网页 Cloud 不读取 `~/.codex/config.toml`，也碰不到你这台本机 `cockpit_mcp`。配置后重新打开会话。用 `codex mcp get cockpit` 看传输是 stdio、命令是 `cockpit_mcp`。

## 来源

- [Cockpit · INSTALL.md](https://github.com/cockpit-dev/cockpit/blob/main/skills/cockpit/INSTALL.md)
- [Cockpit · Agent Integrations](https://github.com/cockpit-dev/cockpit/blob/main/docs/agent-integrations.md)
- [cockpit-dev/cockpit](https://github.com/cockpit-dev/cockpit)
