# CLI / MCP 能力對照清單（薄殼防漂移）

> **來源**：thin-shell-alignment SDD（issue #11）R4 防複發機制層 1。
> **用途**：每新增一個薄殼能力（CLI 命令 / MCP 工具）**必填一行**，PR review 對照。
> **治什麼**：① 打不存在的 server 端點（死端點假綠）② CLI/MCP 同能力不同源（漂移）。
> **配套**：`scripts/thin-shell-smoke.sh`（層 2，對真端點打、斷言非 404）。
> **建立**：2026-06-27
>
> **填寫規則**：
> 1. 「server 端點」必須在 cypher-executor route 清單裡**存在**（用 `grep -rE "Router\.(post|get)\('/xxx'" cypher-executor/src/routes/` 驗）。
> 2. 「同源?」= CLI 與 MCP 是否打**同一個** server 端點。不同源 = 漂移（除非刻意單邊，記明原因）。
> 3. 標 ⚠️ 的是已知債/待收斂項，連到 SDD 對應段。

---

## 對照表

| 能力 | CLI | MCP | server 端點 | route 存在? | 同源? | 備註 |
|------|-----|-----|------------|:---:|:---:|------|
| 部署 workflow | `acr push` | `u6u_deploy_workflow` | `POST /webhooks/named` | ✅ | ⚠️ | MCP 現打死端點 `/workflows/deploy`（404）→ 待 #8 ①-a + #10 編排下沉。CLI 走 4 步介面層編排（#10 待下沉）|
| 執行 workflow（已部署）| `acr run <name>` | `u6u_execute_workflow` | `POST /webhooks/named/:name/trigger` | ✅ | ✅ | **#11 P0 已修**：CLI 原打死端點 `/webhooks/<name>` → 改打 trigger 真端點 |
| 執行 workflow（本機 YAML）| `acr run <file>` | — | `POST /cypher/execute` | ✅ | — | CLI 本機 YAML 直跑；MCP `u6u_execute_workflow` 同打 /cypher/execute |
| list workflow | `acr list` | `u6u_list_workflows` | `GET /webhooks/named` | ✅ | ✅ | **#11 P1 已修**：兩邊原不同源（CLI 直連 KV `workflow:` 前綴對不上 / MCP 讀 KBDB record）→ 收斂到 `GET /webhooks/named`（KV 源）|
| get workflow | — | `u6u_get_workflow` | （KBDB record / KV）| — | — | MCP only；CLI 無對應（次要，可不補）|
| search workflow | （次階段 `acr workflow search`）| `u6u_search_workflows` | `GET /workflows/search` | ✅ | — | **#8 新增**；CLI 對稱補列次階段（R3.3）|
| 驗證 YAML | `acr validate`（本機）| `arcrun_validate_yaml`（server /validate）| `POST /validate` | ✅ | ⚠️ | **真漂移，依賴 #10**：CLI 本機驗 YAML、MCP 傳 graph 打 /validate，輸入不同層。乾淨收斂依賴 #10 編排下沉（SDD §4 表 + tasks 3.1）|
| 搜尋零件 | `acr parts` | `u6u_search_components` | `GET /components/search`（registry）| ✅ | ✅ | 同打 registry search（註：目前是 KV substring 非真語意，registry Phase 2 另案）|
| recipe（6 能力）| `acr recipe *` | `arcrun_recipe_*` | `/recipes/*` `/public-recipes/*` | ✅ | ✅ | 已對齊 |
| credential 上傳 | `acr creds push` | — | `POST /credentials` | ✅ | — | **刻意單邊**（非疏漏）：含 client 端加密 + 本機檔路徑，AI 不代傳 credential（mindset §6/§7）|
| KBDB 資料層（template/record/query/search）| `acr kbdb *` | `kbdb_*`（6 工具）| `/kbdb/*` | ✅ | ✅ | 已對齊（#8 前批）|
| tag（create/list/delete/tag/untag）| — | `u6u_*_tag` / `u6u_tag_resource` | （KBDB resource_tag）| — | — | MCP only。⚠️ tag resource_id 語意債（UUID vs name），待方向①收斂（SDD §4.1）|
| whoami | `acr whoami` | `arcrun_whoami` | `GET /me` | ✅ | ✅ | 已對齊 |

---

## 已知債（連 SDD）

- ⚠️ **MCP deploy 死端點**：`/workflows/deploy` 不存在 → #8 ①-a（先擋）+ #10（編排下沉）。
- ⚠️ **validate 漂移**：依賴 #10 編排下沉後才能統一吃 YAML。
- ⚠️ **tag resource_id 語意**：UUID vs name 不明確，待方向①收斂統一為 name。

## 防複發檢查點（新增能力時）

1. 新 CLI 命令 / MCP 工具 → **本表加一行**。
2. 填「server 端點」前，`grep` 確認該 route 在 cypher-executor 裡**存在**（否則就是死端點）。
3. 同能力兩介面 → 確認「同源」打同一端點；刻意單邊 → 備註記明原因。
4. 宣稱「對齊/完成」前 → 跑 `scripts/thin-shell-smoke.sh`（對真端點斷言非 404）。
