bashterm-mcp 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/CLAUDE.md +84 -0
- package/LICENSE +21 -0
- package/README.md +319 -0
- package/README.zh-CN.md +235 -0
- package/dist/extension.js +6429 -0
- package/dist/mcp-entry.js +218 -0
- package/docs/images/ask_exec_permission.png +0 -0
- package/docs/images/exec_finished.png +0 -0
- package/docs/images/run_finished.png +0 -0
- package/icon.png +0 -0
- package/icon.svg +65 -0
- package/package.json +127 -0
- package/research/01-mcp-sdk-patterns.md +54 -0
- package/research/02-vscode-terminal-api.md +36 -0
- package/research/03-vscode-mcp-integration.md +43 -0
- package/research/04-desktop-commander-referencia.md +45 -0
- package/server.json +23 -0
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# bashterm-mcp
|
|
2
|
+
|
|
3
|
+
[](README.md) [](https://github.com/1170953489/bashterm-mcp/releases) [](https://www.npmjs.com/package/bashterm-mcp) [](https://github.com/1170953489/bashterm-mcp/releases)
|
|
4
|
+
|
|
5
|
+
在 **VSCode 可见的终端标签页**中执行命令的 MCP 服务器,支持完整输出捕获。与内联执行不同,每个命令都在真正的终端中运行,你可以看到、滚动并与之交互。
|
|
6
|
+
|
|
7
|
+
> **Windows 兼容版本** — 本 fork 完整支持 Windows 平台,包括中文输出不乱码。
|
|
8
|
+
|
|
9
|
+
## 核心功能
|
|
10
|
+
|
|
11
|
+
- **可见终端**:命令在真实的 VSCode 终端标签页中运行,而非隐藏进程。你可以实时查看所有输出。
|
|
12
|
+
- **会话复用**:`run` 工具会自动复用空闲会话,仅在需要时创建新终端。
|
|
13
|
+
- **长时间运行支持**:使用 `waitForCompletion: false` 实现"发射后不管"模式,随后用 `read` 逐步获取输出。
|
|
14
|
+
- **子代理隔离**:通过 `agentId` 标记会话,将并行代理的工作负载彼此隔离。
|
|
15
|
+
- **跨平台**:支持 Windows、macOS、Linux。Windows 上中文输出自动解码不乱码。
|
|
16
|
+
|
|
17
|
+
## 环境要求
|
|
18
|
+
|
|
19
|
+
- VS Code 1.93+
|
|
20
|
+
- Node.js 20+
|
|
21
|
+
|
|
22
|
+
## 快速开始
|
|
23
|
+
|
|
24
|
+
### Claude Code
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
claude mcp add BashTerm -- npx bashterm-mcp@latest
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
或使用本 fork 的 Windows 优化版本:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# 下载 .vsix 安装包
|
|
34
|
+
# 从 Release 页面下载 bashterm-mcp-0.1.7.vsix
|
|
35
|
+
code --install-extension bashterm-mcp-0.1.7.vsix
|
|
36
|
+
|
|
37
|
+
# 添加 MCP 服务器(使用本地扩展内置的 mcp-entry)
|
|
38
|
+
claude mcp add BashTerm -- node "C:\Users\<用户名>\.vscode\extensions\hcdb.bashterm-mcp-0.1.7\dist\mcp-entry.js"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### VS Code / Copilot
|
|
42
|
+
|
|
43
|
+
在 `.vscode/mcp.json` 中添加:
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"servers": {
|
|
48
|
+
"BashTerm": {
|
|
49
|
+
"type": "stdio",
|
|
50
|
+
"command": "npx",
|
|
51
|
+
"args": ["bashterm-mcp@latest"]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
<details>
|
|
58
|
+
<summary>Cursor</summary>
|
|
59
|
+
|
|
60
|
+
在 `.cursor/mcp.json` 中添加:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"mcpServers": {
|
|
65
|
+
"BashTerm": {
|
|
66
|
+
"command": "npx",
|
|
67
|
+
"args": ["-y", "bashterm-mcp@latest"]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
</details>
|
|
74
|
+
|
|
75
|
+
<details>
|
|
76
|
+
<summary>Claude Desktop</summary>
|
|
77
|
+
|
|
78
|
+
在 `claude_desktop_config.json` 中添加:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"mcpServers": {
|
|
83
|
+
"BashTerm": {
|
|
84
|
+
"command": "npx",
|
|
85
|
+
"args": ["-y", "bashterm-mcp@latest"]
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
</details>
|
|
92
|
+
|
|
93
|
+
### 你的第一个提示
|
|
94
|
+
|
|
95
|
+
安装完成后,试试问:
|
|
96
|
+
|
|
97
|
+
> 在终端中运行 `ls -la`
|
|
98
|
+
|
|
99
|
+
你应该能在 VSCode 中看到一个新的终端标签页打开,并显示命令输出。
|
|
100
|
+
|
|
101
|
+
## 工具
|
|
102
|
+
|
|
103
|
+
### 快速执行
|
|
104
|
+
|
|
105
|
+
| 工具 | 说明 |
|
|
106
|
+
|------|------|
|
|
107
|
+
| `run` | 一步创建(或复用)终端并执行命令,返回清洁输出和退出码。 |
|
|
108
|
+
|
|
109
|
+
### 会话管理
|
|
110
|
+
|
|
111
|
+
| 工具 | 说明 |
|
|
112
|
+
|------|------|
|
|
113
|
+
| `create` | 创建新的可见终端会话,返回 `sessionId`。 |
|
|
114
|
+
| `exec` | 在已有会话中执行命令并捕获输出。 |
|
|
115
|
+
| `read` | 分页读取会话输出,支持增量读取和 tail 模式(`offset: -N`)。 |
|
|
116
|
+
| `input` | 向交互式终端发送文本(用于提示、REPL、确认等)。 |
|
|
117
|
+
| `list` | 列出活动会话,可选按 `agentId` 过滤。 |
|
|
118
|
+
| `close` | 关闭终端会话及其 VSCode 标签页。 |
|
|
119
|
+
|
|
120
|
+
## 使用模式
|
|
121
|
+
|
|
122
|
+
### 简单命令
|
|
123
|
+
|
|
124
|
+
`run` 工具处理一切——按需创建终端、执行命令、返回清洁输出:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
> 运行 npm test
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
$ npm test
|
|
132
|
+
PASS src/utils.test.ts (3 tests)
|
|
133
|
+
PASS src/index.test.ts (5 tests)
|
|
134
|
+
|
|
135
|
+
[exit: 0 | 1243ms | session-abc123]
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 长时间运行
|
|
139
|
+
|
|
140
|
+
对于构建、部署或其他耗时命令:
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
> 启动 npm run build 不等待,然后检查进度
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
代理会:
|
|
147
|
+
1. 调用 `run` 设置 `waitForCompletion: false` —— 立即返回
|
|
148
|
+
2. 调用 `read` 设置 `offset: -10` 查看最后 10 行
|
|
149
|
+
3. 重复直到进程完成
|
|
150
|
+
|
|
151
|
+
### 交互式命令
|
|
152
|
+
|
|
153
|
+
对于需要用户输入的命令:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
> 运行 npm init 并回答提示
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
代理会:
|
|
160
|
+
1. 调用 `run` 执行 `npm init`
|
|
161
|
+
2. 调用 `read` 查看提示
|
|
162
|
+
3. 调用 `input` 发送答案
|
|
163
|
+
|
|
164
|
+
### 并行代理
|
|
165
|
+
|
|
166
|
+
子代理可以使用 `agentId` 在隔离的终端中工作:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
> 让一个代理运行测试,另一个运行代码检查
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
每个子代理获得自己的终端,标记其 `agentId`,防止输出混淆。
|
|
173
|
+
|
|
174
|
+
## 配置
|
|
175
|
+
|
|
176
|
+
扩展从 VSCode 设置中读取 `terminalMcp.*` 配置:
|
|
177
|
+
|
|
178
|
+
| 设置项 | 类型 | 默认值 | 说明 |
|
|
179
|
+
|--------|------|--------|------|
|
|
180
|
+
| `terminalMcp.maxSessions` | number | 10 | 最大并发终端会话数 |
|
|
181
|
+
| `terminalMcp.commandTimeout` | number | 30000 | 默认命令超时(毫秒) |
|
|
182
|
+
| `terminalMcp.maxOutputLines` | number | 5000 | 每个会话最大缓冲输出行数 |
|
|
183
|
+
| `terminalMcp.idleTimeout` | number | 1800000 | 空闲会话自动关闭时间(毫秒,0=禁用) |
|
|
184
|
+
| `terminalMcp.blockedCommands` | string[] | `["rm -rf /"]` | 禁止执行的命令列表 |
|
|
185
|
+
|
|
186
|
+
## 推荐:设为优先工具
|
|
187
|
+
|
|
188
|
+
像 Claude Code 这样的 LLM 代理内置了 `Bash` 工具,会在聊天中内联执行命令。输出嵌入在对话中,难以阅读,尤其是输出冗长的命令。**建议告诉代理优先使用本 MCP 工具,而非内置 Bash 工具。**
|
|
189
|
+
|
|
190
|
+
将以下内容添加到项目的 `CLAUDE.md`(或等效指令文件)中:
|
|
191
|
+
|
|
192
|
+
```markdown
|
|
193
|
+
## 终端执行
|
|
194
|
+
|
|
195
|
+
优先使用 BashTerm MCP 工具(`run`、`exec`、`read` 等)来执行命令,而不是使用内置的 Bash 工具。
|
|
196
|
+
BashTerm 在可见的 VSCode 终端标签页中运行命令,用户可以实时查看输出。
|
|
197
|
+
仅在简单、非交互式操作(如读取环境变量)时回退到内置 Bash 工具。
|
|
198
|
+
|
|
199
|
+
对于可能超过 30 秒或产生大量输出的命令(构建、测试套件、部署、安装),使用 pull 模式:
|
|
200
|
+
1. 调用 `run` 设置 `waitForCompletion: false` 启动命令但不阻塞。
|
|
201
|
+
2. 调用 `read` 设置 `offset: -10` 查看最后 10 行输出。
|
|
202
|
+
3. 重复步骤 2 直到看到命令完成(查找退出消息、提示或 "Done")。
|
|
203
|
+
4. 向用户报告最终结果。
|
|
204
|
+
|
|
205
|
+
这样可以防止对话超时,并让用户实时观察终端进度。
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**为什么重要:**
|
|
209
|
+
|
|
210
|
+
| | 内置 Bash | BashTerm MCP |
|
|
211
|
+
|---|---|---|
|
|
212
|
+
| 输出可见性 | 嵌入聊天,难以滚动 | 在 VSCode 终端标签页中可见 |
|
|
213
|
+
| 实时反馈 | 用户看不到任何输出直到命令完成 | 用户实时观看输出 |
|
|
214
|
+
| 长时间命令 | 阻塞对话直到超时 | 发射后不管 + 轮询 |
|
|
215
|
+
| 会话状态 | 每个命令隔离 | 持久化会话,带历史 |
|
|
216
|
+
| 交互式命令 | 不支持 | 可向提示/REPL 发送输入 |
|
|
217
|
+
|
|
218
|
+
## 工作方式
|
|
219
|
+
|
|
220
|
+
1. **VSCode 扩展**激活并启动 IPC 服务器(Windows 上使用 Named Pipe,其他平台使用 Unix Socket)
|
|
221
|
+
2. **MCP 入口**(`mcp-entry.js`)由 MCP 客户端启动,在 JSON-RPC stdio 和 IPC socket 之间建立桥接
|
|
222
|
+
3. 命令通过 `child_process.exec()` 执行,输出直接捕获,不再依赖 Shell Integration API
|
|
223
|
+
4. 输出存储在循环缓冲区中,支持分页高效读取
|
|
224
|
+
|
|
225
|
+
## 最新更新 (0.1.7)
|
|
226
|
+
|
|
227
|
+
- **Windows 平台完整支持**:IPC 改用 Windows Named Pipe,修复 `EACCES` 错误
|
|
228
|
+
- **中文不乱码**:Windows 下自动使用 GBK 解码输出
|
|
229
|
+
- **命令执行更可靠**:改用 `child_process.exec()` 直接执行命令,绕过 Shell Integration API 依赖
|
|
230
|
+
|
|
231
|
+
详见 [CHANGELOG.md](CHANGELOG.md) 查看完整历史。
|
|
232
|
+
|
|
233
|
+
## 许可证
|
|
234
|
+
|
|
235
|
+
MIT
|