Cheezmil终端交互式MCP服务器
为什么使用此项目
- 如果你正在开发需要终端交互的脚本或命令,使用这个工具可以让人工智能帮助你测试它们,大大提高效率。
- 目前,各种主流人工智能编程工具在执行某些命令时都会卡住,比如
npm run dev,导致终端堵塞。在这种情况下,人工智能不会得到及时的反馈。一些AI编程工具有一个硬编码的2分钟超时,即使在超时后,它们也看不到任何终端信息。有些人可以在超时后看到消息,而另一些人则完全卡住了。这个项目节省了因卡住而浪费的时间。 - 如果你同时使用不同的AI编程工具,这个项目允许不同的AI查看正在运行的终端。
- 您可能希望一个codex来控制其他claude代码实例。
- 您可能会想,“为什么不将所有终端内容输出到一个文件中供AI读取?”然而,这会消耗额外的API请求。此外,AI不知道哪些命令需要输出到文件,也不知道文件应该放在哪里。你需要手动编写清晰的提示来告诉AI,否则它仍然会卡住,这很麻烦。
- 在某些情况下,您可能需要重新启动codex-cli或claude代码来应用一些设置,但您不想丢失正在运行的终端任务。
- 有时,即使有提示指示AI如何运行命令,AI也可能会忘记并执行您不想要的命令。您可以将这些命令添加到黑名单中,并附加一个提示,以加强对人工智能正确操作的指导。
- Claude Code已经有后台任务了,为什么你还需要这个项目?首先,后台任务需要调用明确的提示,否则需要手动触发;后台任务需要具有固定超时的额外提示,无法灵活识别;后台任务对小任务反应不快,通常需要几分钟才能做出反应,影响效率。此外,还有冗余的后台任务仍在接收终端销毁信息。如果你的脚本有终止旧实例的操作,Claude Code就会开始疯狂,随机检查和重启脚本,浪费时间。(2025年12月22日)
- 使用wsl.exe或sshroot@127.0.0.1作为shell直接输入本机Linux命令,降低了wsl“输入一些文件修改命令”或ssh经常遇到的错误概率root@127.0.0.1“输入一些文件修改命令”。
用法
运行后端
⚠️ 由于 node-pty,Windows用户目前需要使用Node.js版本20或更低版本才能正常工作。为了方便起见,我已将所有安装、编译和运行脚本设置为使用20.19.5。请确保安装fnm(https://github.com/Schniz/fnm)否则,它将无法工作。如果您的系统是Windows,并且您习惯使用PowerShell,强烈建议安装PowerShell 7而不是系统默认的PowerShell,以避免一些编码问题。 (https://github.com/powershell/powershell/releases)
首先分叉这个项目以便于公关贡献,然后:
git clone https://github.com//cheezmil-terminal-interactive.git# Install frontend and backend dependencies
node start_install.mjs# Build backend
start_build_be_cheezmil-terminal-interactive.mjs# Run backend
node start_be_cheezmil-terminal-interactive.mjs⚙️ MCP客户端配置
在配置MCP客户端之前,最好在AI编程工具中添加一条规则:
Except for commands that locate and read code files, all other commands must be executed using the CTI MCP terminal tool!当然,你也可以问你的人工智能编程工具,系统内置的命令执行工具函数叫什么,然后为它定制一个提示,将CTI与“系统的内置命令执行工具功能”结合起来。如果CTI没有运行,AI将智能地自动使用AI编程工具附带的原始工具功能来执行命令。如果你从不告诉它CTI工具,人工智能可能永远不会使用CTI。
可以使用支持Streamable HTTP的所有MCP客户端。不同MCP客户端的配置将略有不同。请参阅相应客户的官方文件。以下是一些简单的例子:
不同的编程软件具有不同的MCP最大超时设置。请参阅相应的文件。请为CTI设置一个非常大的超时,否则一些编程软件的默认超时非常短。例如,Codex只有一个默认的60秒超时,它不会得到任何信息输出,因此无法正常使用。
- Cline/Roocode/Kilocode:
"CTI": {
"type": "streamable-http",
"url": "http://localhost:1106/mcp"
}- 法典:
[mcp_servers.CTI]
url = "http://localhost:1106/mcp"
tool_timeout_sec = 666666- 光标:
"CTI": {
"type": "streamable-http",
"url": "http://localhost:1106/mcp"
}- 克劳德代码:
"CTI": {
"type": "http",
"url": "http://localhost:1106/mcp"
}命令行添加方法: 除了配置文件方法,Claude Code还支持使用命令行快速添加MCP服务器:
# Add cheezmil-terminal-interactive server
claude mcp add CTI --scope user --type streamable-http --url http://localhost:1106/mcp
# List configured MCP servers
claude mcp list
命令行参数说明:
--scope user:将配置范围设置为用户级别--type streamable-http:将传输类型指定为可流式传输的http--url http://localhost:1106/mcp:指定服务器地址
对于复杂的配置,建议直接编辑配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
- 双子座命令行界面:
"CTI": {
"type": "http",
"url": "http://localhost:1106/mcp"
}- 帆板运动:
"CTI": {
"type": "streamable-http",
"url": "http://localhost:1106/mcp"
}- Qwen代码:
"CTI": {
"type": "streamable-http",
"url": "http://localhost:1106/mcp"
}- iFlow命令行界面:
"CTI": {
"type": "streamable-http",
"url": "http://localhost:1106/mcp"
}- 打开代码:
"CTI": {
"type": "streamable-http",
"url": "http://localhost:1106/mcp"
}- 曲速:
"CTI": {
"type": "streamable-http",
"url": "http://localhost:1106/mcp"
}- 增强:
"CTI": {
"type": "streamable-http",
"url": "http://localhost:1106/mcp"
}🌐 Web管理界面使用
# Build frontend
start_build_fe_cheezmil-terminal-interactive.mjsnode start_fe_cheezmil-terminal-interactive.mjs免责声明
- 由于不同AI模型在判断危险命令和不同提示引导时的智能水平不同,AI有时无法确定某些命令是否危险,例如一些递归文件删除命令。请手动执行一些更危险的命令,或明确指定我要处理的危险命令。无论通过此项目执行什么命令,您都要对任何不利后果负责。
- 不允许直接访问部署在您计算机上的此项目的互联网,否则您将对任何不利后果负责。
2025-11-03主流AI编程工具中终端交互功能的比较(如有错误,请告诉我进行更正🥲):
| 功能 | Cheezmil终端交互 | 克劳德代码 | Codex | 反重力 | 光标 | Cline | Roocode | Kilocode | Gemini CLI | Qwen Code | iFlow CLI | 开放代码 | 风帆 | 扭曲 | 增强 | 鹅 | 挤压 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 输入ctrl+c | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| 输入输入 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| 没有经常出现的问题 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| 使用一个API请求创建多个终端 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 同时查看多个终端输出 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 关闭旧终端 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 从终端搜索字符串 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 输入y或n | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| 在WSL | 中直接输入Linux命令✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 与另一个命令行AI交互 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| SSH终端 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| 新对话后继续使用以前的终端 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 在命令执行前后执行指定的脚本 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 在命令执行前后执行某些固定命令 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 执行某些带有额外提示的命令,通知AI正确的方法 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 使用正则表达式过滤终端输出以保存上下文 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
TODO
- \[\]美化终端
- \[\]添加身份验证功能以防止任何人访问
- \[x\] 添加命令黑名单-即使收到某些命令,它们也永远不会被执行
