Windows CLI MCP服务器
[!小心] 项目已弃用 -不再维持。 使用https://github.com/wonderwhy-er/DesktopCommanderMCP而是用于类似的功能。
MCP服务器 用于Windows系统上的安全命令行交互,通过SSH实现对PowerShell、CMD、Git Bash shell和远程系统的受控访问。它允许MCP客户端(如 克劳德桌面)在系统上执行操作,类似于 开放式口译员.
[!重要] 此MCP服务器通过SSH提供对系统命令行界面和远程系统的直接访问。启用后,它授予对文件、环境变量、命令执行功能和远程服务器管理的访问权限。
检查并限制允许的路径和SSH连接
启用目录限制
配置命令块
考虑安全影响
看 配置 了解更多详情。
-
特性
-
使用Claude Desktop
-
配置
-
配置位置
-
默认配置
-
配置设置
-
安全设置
-
外壳配置
-
SSH配置
-
API
-
工具
-
资源
-
安全考虑
-
许可证
特性
-
多壳支持:在PowerShell、命令提示符(CMD)和Git Bash中执行命令
-
SSH支持:通过SSH在远程系统上执行命令
-
资源暴露:将SSH连接、当前目录和配置作为MCP资源查看
-
安全控制:
-
命令和SSH命令阻止(完整路径,大小写变化)
-
工作目录验证
-
最大命令长度限制
-
命令记录和历史跟踪
-
智能论证验证
-
可配置的:
-
自定义安全规则
-
外壳特定设置
-
SSH连接配置文件
-
路径限制
-
已阻止的命令列表
请参阅 API 有关服务器为MCP客户端提供的工具和资源的更多详细信息,请参阅第节。
备注:服务器只允许在配置的目录内、使用允许的命令和配置的SSH连接上进行操作。
使用Claude Desktop
将此添加到您的 claude_desktop_config.json:
JSON``` 1 2 3 4 5 6 7 8{ “mcpServers”: { “windows-cli”: { “command”: “npx”, “args”: [“-y”, “@simonb97/server-win-cli”] } } }
要与特定的配置文件一起使用,请添加 `--config` 标志:
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13{
"mcpServers": {
"windows-cli": {
"command": "npx",
"args": [
"-y",
"@simonb97/server-win-cli",
"--config",
"path/to/your/config.json"
]
}
}
}
配置后,您可以:
- 使用可用工具直接执行命令
- 在参考资料部分查看配置的SSH连接和服务器配置
- 通过提供的工具管理SSH连接
配置
服务器使用JSON配置文件来定制其行为。您可以指定安全控制、shell配置和SSH连接的设置。
- 要创建默认配置文件,请执行以下操作之一:
一 复制 config.json.example 向 config.json,或
b 运行:
BASH``` 1npx @simonb97/server-win-cli —init-config ./config.json
1. 然后设置 `--config` 标记指向配置文件,如中所述 使用Claude Desktop 部分。
### 配置位置
服务器在以下位置查找配置(按顺序):
1. 指定的路径 `--config` 旗帜
2. 当前目录中的./config.json
3. ~/.win-cli-mcp/config.json位于用户的主目录中
如果找不到配置文件,服务器将使用默认(受限)配置:
### 默认配置
**备注**:默认配置被设计为具有限制性和安全性。在中查找有关每个设置的更多详细信息 配置设置 部分。
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66{
"security": {
"maxCommandLength": 2000,
"blockedCommands": [
"rm",
"del",
"rmdir",
"format",
"shutdown",
"restart",
"reg",
"regedit",
"net",
"netsh",
"takeown",
"icacls"
],
"blockedArguments": [
"--exec",
"-e",
"/c",
"-enc",
"-encodedcommand",
"-command",
"--interactive",
"-i",
"--login",
"--system"
],
"allowedPaths": ["User's home directory", "Current working directory"],
"restrictWorkingDirectory": true,
"logCommands": true,
"maxHistorySize": 1000,
"commandTimeout": 30,
"enableInjectionProtection": true
},
"shells": {
"powershell": {
"enabled": true,
"command": "powershell.exe",
"args": ["-NoProfile", "-NonInteractive", "-Command"],
"blockedOperators": ["&", "|", ";", "`"]
},
"cmd": {
"enabled": true,
"command": "cmd.exe",
"args": ["/c"],
"blockedOperators": ["&", "|", ";", "`"]
},
"gitbash": {
"enabled": true,
"command": "C:\\Program Files\\Git\\bin\\bash.exe",
"args": ["-c"],
"blockedOperators": ["&", "|", ";", "`"]
}
},
"ssh": {
"enabled": false,
"defaultTimeout": 30,
"maxConcurrentSessions": 5,
"keepaliveInterval": 10000,
"keepaliveCountMax": 3,
"readyTimeout": 20000,
"connections": {}
}
}
配置设置
配置文件分为三个主要部分: security, shells,以及 ssh.
安全设置
JSON``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49{ “security”: { // Maximum allowed length for any command “maxCommandLength”: 1000, // Commands to block - blocks both direct use and full paths // Example: “rm” blocks both “rm” and “C:\Windows\System32\rm.exe” // Case-insensitive: “del” blocks “DEL.EXE”, “del.cmd”, etc. “blockedCommands”: [ “rm”, // Delete files “del”, // Delete files “rmdir”, // Delete directories “format”, // Format disks “shutdown”, // Shutdown system “restart”, // Restart system “reg”, // Registry editor “regedit”, // Registry editor “net”, // Network commands “netsh”, // Network commands “takeown”, // Take ownership of files “icacls” // Change file permissions ], // Arguments that will be blocked when used with any command // Note: Checks each argument independently - “cd warm_dir” won’t be blocked just because “rm” is in blockedCommands “blockedArguments”: [ “—exec”, // Execution flags “-e”, // Short execution flags “/c”, // Command execution in some shells “-enc”, // PowerShell encoded commands “-encodedcommand”, // PowerShell encoded commands “-command”, // Direct PowerShell command execution “—interactive”, // Interactive mode which might bypass restrictions “-i”, // Short form of interactive “—login”, // Login shells might have different permissions “—system” // System level operations ], // List of directories where commands can be executed “allowedPaths”: [“C:\Users\YourUsername”, “C:\Projects”], // If true, commands can only run in allowedPaths “restrictWorkingDirectory”: true, // If true, saves command history “logCommands”: true, // Maximum number of commands to keep in history “maxHistorySize”: 1000, // Timeout for command execution in seconds (default: 30) “commandTimeout”: 30, // Enable or disable protection against command injection (covers ;, &, |, `) “enableInjectionProtection”: true } }
#### 外壳配置
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26{
"shells": {
"powershell": {
// Enable/disable this shell
"enabled": true,
// Path to shell executable
"command": "powershell.exe",
// Default arguments for the shell
"args": ["-NoProfile", "-NonInteractive", "-Command"],
// Optional: Specify which command operators to block
"blockedOperators": ["&", "|", ";", "`"] // Block all command chaining
},
"cmd": {
"enabled": true,
"command": "cmd.exe",
"args": ["/c"],
"blockedOperators": ["&", "|", ";", "`"] // Block all command chaining
},
"gitbash": {
"enabled": true,
"command": "C:\\Program Files\\Git\\bin\\bash.exe",
"args": ["-c"],
"blockedOperators": ["&", "|", ";", "`"] // Block all command chaining
}
}
}
SSH配置
JSON``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40{ “ssh”: { // Enable/disable SSH functionality “enabled”: false, // Default timeout for SSH commands in seconds “defaultTimeout”: 30, // Maximum number of concurrent SSH sessions “maxConcurrentSessions”: 5, // Interval for sending keepalive packets (in milliseconds) “keepaliveInterval”: 10000, // Maximum number of failed keepalive attempts before disconnecting “keepaliveCountMax”: 3, // Timeout for establishing SSH connections (in milliseconds) “readyTimeout”: 20000, // SSH connection profiles “connections”: { // NOTE: these examples are not set in the default config! // Example: Local Raspberry Pi “raspberry-pi”: { “host”: “raspberrypi.local”, // Hostname or IP address “port”: 22, // SSH port “username”: “pi”, // SSH username “password”: “raspberry”, // Password authentication (if not using key) “keepaliveInterval”: 10000, // Override global keepaliveInterval “keepaliveCountMax”: 3, // Override global keepaliveCountMax “readyTimeout”: 20000 // Override global readyTimeout }, // Example: Remote server with key authentication “dev-server”: { “host”: “dev.example.com”, “port”: 22, “username”: “admin”, “privateKeyPath”: “C:\Users\YourUsername\.ssh\id_rsa”, // Path to private key “keepaliveInterval”: 10000, “keepaliveCountMax”: 3, “readyTimeout”: 20000 } } } }
## API
### 工具
- **execute_命令**
- 在指定的shell中执行命令
- 输入:
- `shell` (string):要使用的Shell(“powershell”、“cmd”或“gitbash”)
- `command` (string):要执行的命令
- `workingDir` (可选字符串):工作目录
- 以文本形式返回命令输出,如果执行失败,则返回错误消息
- **get_command_history**
- 获取已执行命令的历史记录
- 输入: `limit` (可选编号)
- 返回带有时间戳的命令历史记录及其输出
- **ssh执行**
- 通过SSH在远程系统上执行命令
- 输入:
- `connectionId` (string):要使用的SSH连接的ID
- `command` (string):要执行的命令
- 以文本形式返回命令输出,如果执行失败,则返回错误消息
- **ssh断开连接**
- 断开与SSH服务器的连接
- 输入:
- `connectionId` (string):要断开的SSH连接的ID
- 返回确认消息
- **create_ssh_connection**
- 创建新的SSH连接
- 输入:
- `connectionId` (string):新SSH连接的ID
- `connectionConfig` (object):连接配置详细信息,包括主机、端口、用户名以及密码或privateKeyPath
- 返回确认消息
- **read_ssh_连接**
- 读取所有已配置的SSH连接
- 从配置中返回所有SSH连接的列表
- **update_ssh_connection**
- 更新现有的SSH连接
- 输入:
- `connectionId` (string):要更新的SSH连接的ID
- `connectionConfig` (对象):新连接配置详细信息
- 返回确认消息
- **delete_ssh_connection**
- 删除SSH连接
- 输入:
- `connectionId` (string):要删除的SSH连接的ID
- 返回确认消息
- **get_current目录**
- 获取服务器的当前工作目录
- 返回当前工作目录路径
### 资源
- **SSH连接**
- URI格式: `ssh://{connectionId}`
- 包含隐藏敏感信息的连接详细信息
- 每个配置的SSH连接对应一个资源
- 例子: `ssh://raspberry-pi` 显示了“raspberry pi”连接的配置
- **SSH配置**
- URI: `ssh://config`
- 包含整体SSH配置和所有连接(密码被屏蔽)
- 显示defaultTimeout、maxConcurrentSessions和连接列表等设置
- **当前目录**
- URI: `cli://currentdir`
- 包含CLI服务器的当前工作目录
- 显示默认情况下执行命令的路径
- **CLI配置**
- URI: `cli://config`
- 包含CLI服务器配置(不包括敏感数据)
- 显示安全设置、shell配置和SSH设置
## 安全考虑
### 内置安全功能(始终处于活动状态)
以下安全功能已硬编码到服务器中,无法禁用:
- **不区分大小写的命令阻止**:所有命令阻塞都不区分大小写(例如,如果“DEL”在blockedCommands中,则“DEL.EXE”、“DEL.cmd”等都会被阻塞)
- **智能路径解析**:服务器解析完整的命令路径以防止绕过尝试(如果“rm”被阻止,则阻止“C:\Windows\System32\rm.exe”)
- **命令解析智能**:避免了误报(例如,“warm_dir”不会因为“rm”在blockedCommands中而被阻止)
- **输入验证**:所有用户输入在执行前都经过验证
- **壳牌工艺管理**:进程在执行或超时后正确终止
- **敏感数据屏蔽**:密码在资源中自动屏蔽(替换为******)
### 可配置的安全功能(默认为活动)
这些安全功能可以通过config.json文件进行配置:
- **命令阻止**:中指定的命令 `blockedCommands` 数组被阻止(默认包括rm、del、format等危险命令)
- **参数阻止**:中指定的参数 `blockedArguments` 数组被阻止(默认包括潜在危险标志)
- **指令注入保护**:防止命令链(默认情况下通过启用 `enableInjectionProtection: true`)
- **工作目录限制**:将命令执行限制到指定目录(默认情况下通过启用 `restrictWorkingDirectory: true`)
- **命令长度限制**:限制最大命令长度(默认值:2000个字符)
- **命令超时**:终止运行时间过长的命令(默认值:30秒)
- **命令记录**:记录命令历史记录(默认情况下通过启用 `logCommands: true`)
### 重要安全警告
这些不是功能,而是需要注意的重要安全考虑因素:
- **环境准入**:命令可以访问可能包含敏感信息的环境变量
- **文件系统访问**:命令可以在允许的路径内读/写文件-请仔细配置 `allowedPaths` 防止访问敏感数据
## 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。