Skip to content

plugin-update: warn user when binary-based plugin bumps but stale MCP PIDs are still running #58

Description

@kiki830621

Problem

/plugin-tools:plugin-update <plugin> bump 一個 binary-based plugin 的 shell version(例如 che-apple-mail-mcp 從 2.16.x → 2.17.x),current Claude Code session 內 running 的 MCP server 不會偵測到這次 bump,因為 MCP wrapper 只在 spawn 時跑一次 version check(exec 之後 wrapper 已退場,binary 自身沒 polling)。

→ 結果:user 跑完 plugin-update 後,當下 session 的 MCP 仍跑舊 in-memory binary,任何依賴新 fix 的 flow(e.g. /archive-mail 依賴 #72 fix in v2.7.1)會繼續踩舊 bug,直到 user 主動重啟 Claude Code。

完整 root-cause 分析見 PsychQuant/che-apple-mail-mcp#76(那邊 fix 的是 wrapper / hook 端;這個 issue 是 sender-side 的修護:plugin-update 自己應該負責通知 user)。

Reproduction

  1. T0:Claude Code 啟 session,che-apple-mail-mcp MCP spawn(載入 binary v2.7.0 進 memory)
  2. T1:/mcp-tools:mcp-deploy che-apple-mail-mcp cut v2.7.1 release
  3. T2:/plugin-tools:plugin-update che-apple-mail-mcp bump plugin.json + sync marketplace
  4. T3:plugin-update 結束,終端沒有任何提示告訴 user「running MCP 仍是舊版,請重啟 Claude Code」
  5. T4:user 在同 session 跑 /archive-mail → 仍踩 v2.7.0 的 bug → 困惑「明明 fix 了為什麼還壞」

實測就是 2026-05-09 #72 incident。

Expected

plugin-tools:plugin-update 完成 bump 後,在 Phase 1.5 binary dependency 偵測到該 plugin 是 binary-based 時,結尾主動:

(a) 印 stderr 警告 ⚠ MCP binary <name> updated. Restart Claude Code to load new version.
(b) 列出 stale PIDs(ps aux | grep <BinaryName>)讓 user 看到要 kill 哪些 process
(c)(可選,高侵入)直接 pkill -f <BinaryName> 自動清掉 — 但會中斷其他 session 的 in-flight 操作,不適合 default behavior

最小可接受版本:(a) + (b),non-destructive,把 staleness 的存在 surface 給 user。

Actual

Plugin-update 跑完只 echo "✓ marketplace synced",沒有任何關於 running MCP 的提示。User 必須自己記得「binary plugin 更新後要重啟」。

Type

enhancement(low-friction usability fix;non-destructive)

Impact

範圍 嚴重度
影響的 binary-based plugins che-apple-mail-mcp / che-telegram-mcp / che-word-mcp / 等 ~10 個 plugin
影響的 user flow 任何 plugin-update 後立即要使用該 plugin 的 session
嚴重度 中 — 不會 silent data corruption,但會引發「以為 fix 了但實際沒生效」的 false 結論,浪費 round-trip

Strategy

建議在 /plugin-tools:plugin-update 的 Phase 1.5(detect dependencies)加一個 post-step:從 plugin.json 或 .mcp.json 讀 binary name → pgrep -f "$BINARY_NAME" → 若有 stale PIDs 印警告 + 列 PID/started_at + 提示「restart Claude Code or kill 」。

Related

  • Upstream root cause:PsychQuant/che-apple-mail-mcp#76 — wrapper 端不偵測 plugin.json bump
  • Sister design issue:che-apple-mail-mcp#77 — sidecar tracks shell version 不是 binary version

Source

Surfaced during /idd-diagnose PsychQuant/che-apple-mail-mcp#76(Step 3.6 sister concern surfacing)。Diagnosis Recommendation 列了「plugin-tools repo(separate issue):plugin-update 結尾加 stderr 警告」,本 issue 履行該 follow-up。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions