Skip to main content
Glama
masx200

Persistent Terminal MCP Server

by masx200
test-response.md8.6 kB
# 给 AI 的测试反馈和修复说明 ## 📧 致:Claude Code 和 Codex CLI 测试团队 感谢你们详细的测试报告!我已经分析了所有问题并完成了修复。 --- ## 🎯 Claude Code 测试报告回复 ### 你们发现的问题 #### 问题 1: 命令执行问题 ✅ 已修复 **你们的反馈:** > 发送到终端的命令不会自动执行,无论发送什么内容,命令都只是显示在终端中,但不会被执行。 **根本原因:** 代码直接写入用户输入,没有自动添加换行符来执行命令。 **修复方案:** 现在 `write_terminal` 会自动检测输入是否以换行符结尾,如果没有则自动添加。 **使用方式:** **之前(需要手动添加 \n):** ```json { "name": "write_terminal", "arguments": { "terminalId": "xxx", "input": "npm start\n" } } ``` **现在(自动添加,更自然):** ```json { "name": "write_terminal", "arguments": { "terminalId": "xxx", "input": "npm start" } } ``` **向后兼容:** 如果你仍然手动添加 `\n`,也完全没问题,不会重复添加。 --- #### 问题 2: 终端状态不一致 ✅ 已修复 **你们的反馈:** > kill_terminal 命令执行后,终端状态显示为 "terminated",但在 list_terminals 中该终端仍然显示。 **修复方案:** 现在 `kill_terminal` 会完全清理终端资源,从所有内部 Map 中删除,不会再出现在列表中。 **修复后的行为:** ``` 1. 创建 2 个终端 list_terminals → 返回 2 个终端 2. kill 第 1 个终端 list_terminals → 返回 1 个终端(第 2 个) 3. kill 第 2 个终端 list_terminals → 返回 0 个终端(空列表) ``` --- ### 测试验证 我创建了自动化测试脚本,所有测试都通过: ``` ✅ 测试 1.1: 发送 "pwd" (不带换行符) - 命令自动执行 ✅ 测试 1.2: 发送 "echo test\n" (带换行符) - 正常工作 ✅ 测试 1.3: 连续发送多个命令 - 所有命令都执行 ✅ 测试 2: kill 后终端从列表中移除 - 完全清理 ``` --- ### 请重新测试 **步骤 1: 更新代码** ```bash cd /Users/admin/Desktop/node-pty git pull # 或获取最新代码 npm run build ``` **步骤 2: 重启 Claude Code** ```bash # 退出 Claude Code # 重新启动 claude ``` **步骤 3: 验证修复** 测试命令自动执行: ``` 请创建一个终端,然后执行以下命令(不要手动添加换行符): 1. pwd 2. echo "Hello World" 3. ls -la ``` 测试终端清理: ``` 请创建 2 个终端,然后 kill 第一个,再列出所有终端,应该只看到 1 个。 ``` --- ## 🎯 Codex CLI 测试报告回复 ### 你们发现的问题 #### 问题: 找不到 create_terminal 工具 ❌ 配置问题 **你们的反馈:** > 所有操作都返回 "Terminal 1 not found",套件中没有任何"创建终端"入口。 **分析:** 这不是代码问题,而是 MCP 配置问题。`create_terminal` 工具确实存在,但可能没有正确注册到 Codex CLI。 **验证工具是否注册:** 在 Codex CLI 中运行: ``` 列出所有可用的 MCP 工具 ``` 应该看到 6 个工具: 1. `persistent-terminal__create_terminal` 2. `persistent-terminal__write_terminal` 3. `persistent-terminal__read_terminal` 4. `persistent-terminal__get_terminal_stats` 5. `persistent-terminal__list_terminals` 6. `persistent-terminal__kill_terminal` **如果看不到这些工具,请检查配置:** ### Codex CLI 配置检查 #### 1. 检查配置文件 Codex CLI 的配置文件可能在: - `~/.codex/config.json` - `~/.config/codex/config.json` - 项目目录下的 `.codex/config.json` #### 2. 配置格式 应该类似这样: ```json { "mcpServers": { "persistent-terminal": { "command": "node", "args": ["/Users/admin/Desktop/node-pty/dist/index.js"], "env": { "MAX_BUFFER_SIZE": "10000", "SESSION_TIMEOUT": "86400000" } } } } ``` #### 3. 验证 MCP 服务器 手动测试 MCP 服务器是否正常: ```bash node /Users/admin/Desktop/node-pty/dist/index.js ``` 服务器应该启动并等待输入(这是正常的,因为它是 stdio 模式)。 #### 4. 重启 Codex CLI 配置修改后,需要重启 Codex CLI: ```bash # 退出 Codex CLI # 重新启动 codex ``` --- ### 如果工具已注册但仍然报错 如果你能看到工具但调用时报 "Terminal 1 not found",说明你在尝试操作一个不存在的终端。 **正确的使用流程:** ```javascript // 步骤 1: 创建终端(获取 terminalId) const result = (await persistent) - terminal__create_terminal({ cwd: "/Users/admin/Desktop/ceshi", }); // 返回: { terminalId: "abc-123-def-456", ... } // 步骤 2: 使用返回的 terminalId 进行操作 (await persistent) - terminal__write_terminal({ terminalId: "abc-123-def-456", // 使用实际返回的 ID input: "pwd", }); // 步骤 3: 读取输出 (await persistent) - terminal__read_terminal({ terminalId: "abc-123-def-456", }); ``` **错误的使用方式:** ```javascript // ❌ 错误:使用硬编码的 ID "1" (await persistent) - terminal__write_terminal({ terminalId: "1", // 这个终端不存在! input: "pwd", }); ``` --- ### 完整测试示例 ```javascript // 1. 列出当前终端(应该是空的) const list1 = (await persistent) - terminal__list_terminals(); console.log("初始终端列表:", list1); // 2. 创建第一个终端 const terminal1 = (await persistent) - terminal__create_terminal({ cwd: "/Users/admin/Desktop/ceshi", }); console.log("创建的终端 ID:", terminal1.terminalId); // 3. 发送命令 (await persistent) - terminal__write_terminal({ terminalId: terminal1.terminalId, input: "pwd", }); // 4. 等待 1 秒 await sleep(1000); // 5. 读取输出 const output = (await persistent) - terminal__read_terminal({ terminalId: terminal1.terminalId, }); console.log("输出:", output); // 6. 获取统计信息 const stats = (await persistent) - terminal__get_terminal_stats({ terminalId: terminal1.terminalId, }); console.log("统计:", stats); // 7. 列出所有终端 const list2 = (await persistent) - terminal__list_terminals(); console.log("当前终端列表:", list2); // 8. 终止终端 (await persistent) - terminal__kill_terminal({ terminalId: terminal1.terminalId, }); // 9. 再次列出(应该是空的) const list3 = (await persistent) - terminal__list_terminals(); console.log("终止后的终端列表:", list3); ``` --- ## 📚 更新的文档 我已经更新了以下文档: 1. **docs/reference/bug-fixes.md** - 详细的修复报告 2. **docs/guides/usage.md** - 需要更新(说明不需要手动添加 \n) 3. **docs/guides/troubleshooting.md** - 需要更新(添加新的故障排查) --- ## 🔧 技术细节 ### 修改的代码 #### src/terminal-manager.ts (第 122-124 行) ```typescript // 自动添加换行符 const inputToWrite = input.endsWith("\n") || input.endsWith("\r") ? input : input + "\n"; ptyProcess.write(inputToWrite); ``` #### src/terminal-manager.ts (第 294-297 行) ```typescript // 清理资源 this.ptyProcesses.delete(terminalId); this.outputBuffers.delete(terminalId); this.sessions.delete(terminalId); ``` --- ## 📞 需要帮助? 如果重新测试后仍有问题,请提供: 1. **配置文件内容** - 你的 MCP 配置 2. **工具列表** - 运行 "列出所有 MCP 工具" 的结果 3. **错误信息** - 完整的错误消息 4. **调用示例** - 你是如何调用工具的 我会继续协助解决! --- ## ✅ 总结 ### 修复状态 | 问题 | 状态 | 说明 | | -------------------- | ----------- | ----------------- | | 命令不会自动执行 | ✅ 已修复 | 自动添加换行符 | | kill 后终端仍在列表 | ✅ 已修复 | 完全清理资源 | | Codex CLI 找不到工具 | ⚠️ 配置问题 | 需要检查 MCP 配置 | ### 下一步 1. **Claude Code 用户:** - 更新代码 - 重启 Claude Code - 重新测试 2. **Codex CLI 用户:** - 检查 MCP 配置 - 确认工具已注册 - 使用正确的 terminalId 3. **所有用户:** - 阅读更新的文档 - 享受改进的用户体验! --- **感谢你们的详细测试报告!这些反馈非常有价值,帮助我们改进了产品。** 🙏 如有任何问题,请随时联系! --- **修复完成日期:** 2025-10-03 **版本:** 1.0.1 **测试状态:** ✅ 所有测试通过

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/masx200/persistent-terminal-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server