内容
# lifeline
一个适用于Claude Code的微小守护MCP服务器,适用于Windows。
当Claude Code通过崩溃或挂起工作时,其工具停止响应,并且没有工具可以调用来修复它,因此会话陷入僵局,直到有人介入。 lifeline是一个第二MCP服务器,消除了这一僵局。它单独运行在系统Python上,零依赖,因此当另一个服务器宕机时,它仍然运行。Claude可以调用其`reboot`工具来杀死卡住的服务器,并驱动Claude Code的`/mcp`重新连接,然后自行重新开始任务,同时使用备用shell和文件读取器。
它故意设计得小且自成体系:一个仅限标准库的文件,通过stdio进行原始JSON-RPC,没有MCP SDK。其中几乎没有什么可以破坏。
## 要求
- **Windows.** 它使用Win32(通过ctypes)枚举进程并向Claude Code终端注入按键。目前无法在macOS或Linux上运行。
- **Claude Code.** 重启流程驱动Claude Code的`/mcp`菜单。
- **Python 3.8+** 在PATH中。无需pip软件包。
## 工具
- `reboot` - 杀死目标MCP服务器并触发Claude Code `/mcp` 重新连接,重新启动它。在目标工具失败时使用。
- `status` - 报告目标服务器和Claude Code是否正在运行,带有PID和lifeline正在使用的进程祖先。
- `shell` - 运行shell命令。当目标关闭时,备用终端。
- `read_file` - 读取文件。当目标的文件工具关闭时,备用工具。
## reboot工作原理
1. 通过遍历lifeline自己的进程树,找到Claude Code进程。
2. 通过将`TARGET_MATCH`与进程命令行匹配,找到目标服务器进程,仅限于当前Claude Code会话的进程树,以免影响其他会话的服务器。
3. 杀死它(除非传递`kill_first=false`)。
4. 向Claude Code终端注入按键:`/mcp` 然后 Enter 打开服务器菜单,Enter 选择服务器,Down 到重新连接操作,Enter 执行。Claude Code重新连接,重新启动服务器。
步骤4是脆弱的部分。参见下面的适配。
## 安装
lifeline是一个文件。将Claude Code指向它,并使用系统Python运行,而不是目标服务器的虚拟环境。这就是它的全部意义:即使目标环境是导致故障的原因,它也应该能够存活。`example_config.json` 显示了配置的格式:
```json
{
"mcpServers": {
"lifeline": {
"command": "python",
"args": ["C:/path/to/lifeline/server.py"],
"env": {
"LIFELINE_TARGET_MATCH": "my-mcp/server.py",
"LIFELINE_TARGET_LABEL": "my-mcp"
}
}
}
}
```
## 适配您的设置
您需要更改的所有内容都在`server.py`顶部的CONFIG块或匹配的`LIFELINE_*`环境变量中:
- `TARGET_MATCH` - 一个子字符串,唯一标识您的服务器启动命令。`server.py`如果它是您唯一的Python MCP服务器,则有效;如果您运行多个服务器,请缩小范围(例如`my-mcp/server.py`或独特的目录名称)。匹配已经局限于您的Claude Code会话的进程树。
- `TARGET_LABEL` - 状态和日志消息中使用的描述性名称。
- `SHELL_CWD` - `shell`工具的工作目录。
**`/mcp`菜单编排是最可能需要调整的部分。** `run_injection()`中的注入假设目标是Claude Code `/mcp`菜单中列出的第一个服务器,并且重新连接是从顶部向下(Enter,Down,Enter)。如果您有多个MCP服务器,不同的菜单顺序或Claude Code版本不同,菜单不同,请调整该阶段的序列和`DELAY_*`时间常量,如果注入与UI竞争,则lifeline会写入`inject.log`,记录每个阶段,这使得调整快速完成。
## 安全
这是一个恢复工具,因此它故意强大且无沙盒保护:`shell`运行任意命令,`read_file`读取任意路径,`reboot`杀死进程并输入到您的终端。请仅在本地运行它,作为您自己的MCP服务器。不要通过网络公开它。
## 许可证
MIT。参见LICENSE。