MCP CMD Windows Command MCP Server
使用说明(Markdown 格式)
-
项目简介
- 这是一个基于 Model Context Protocol (MCP) 的服务器实现,运行在 Windows 上。它暴露一组工具(如 cmd_run、cmd_batch、powershell_run 等),供 MCP 客户端通过 STDIO 的 JSON-RPC 进行调用,以获得命令执行、系统信息、进程管理等能力。
-
主要功能点
- 提供多种工具:
- cmd_run:执行单条 CMD 命令,自动关闭输入、限制输出、并在超时/异常时杀死整棵进程树。
- cmd_batch:按顺序执行多条 CMD 命令,支持在遇到错误时可选是否继续。
- powershell_run:安全执行 PowerShell 命令(使用 Base64 编码执行,降低转义风险)。
- system_info:获取系统基本信息(OS、内存、用户名等)。
- process_list:列出正在运行的相关进程,便于诊断。
- process_cleanup:清理老旧的挂起的 CMD/Conhost 进程,防止僵死。
- show_security_rules:展示当前的安全规则与运行时限制。
- 安全与稳定性:
- 严格的输入长度、超时、输出上限、并发控制与速率限制。
- 禁止系统级破坏性命令的执行,文件操作仅在受控的项目根目录内有效。
- 支持并发进程的管理、闲置超时清理、以及对整个进程树的强制清理。
- 通信与部署:
- 基于 MCP 的核心 JSON-RPC 协议,使用 Stdio 传输,与 MCP 客户端无缝对接。
- 额外提供 wrapper/launcher 辅助确保执行时不会弹出窗口或产生僵死进程。
- 提供多种工具:
-
安装步骤
- 安装前提:Node.js 18+,Windows OS。
- 步骤1:克隆仓库并安装依赖
- 通过 npm install 安装所需依赖。
- 步骤2:启动 MCP 服务器
- 直接运行 index.js(Windows 下确保 Node 18+ 环境,index.js 使用 ES 模块语法,直接 node index.js 即可启动)。
- 步骤3:在 MCP 客户端中进行配置
- 将服务器作为 MCP 客户端可用的后端,配置其启动命令与参数,使 MCP 客户端可以通过 JSON-RPC 调用上述工具。
-
服务器配置(MCP 客户端需要的启动信息) 为了方便集成,下面给出准确的配置示例信息,非代码块呈现,便于理解。实际使用时请按你的 MCP 客户端配置 JSON 格式填写。
{ "mcpServers": { "cmd": { "command": "node", "args": ["C:\path\to\MCP_CMD\index.js"], "autoApprove": ["cmd_run", "cmd_batch", "powershell_run", "system_info", "process_list", "process_cleanup", "show_security_rules"] } // 说明: // - "cmd" 为服务器在 MCP 客户端中的名称标识。 // - command/args 指定启动 MCP_CMD 的命令及参数,请替换成实际路径。 // - autoApprove 列表中的工具将自动授权给该 MCP 服务器使用。 } }
-
基本使用方法
- 启动后,MCP 客户端可以通过 JSON-RPC 调用以下工具:
- cmd_run:传入 command、cwd、timeout,请求执行单条 CMD 命令。
- cmd_batch:传入多条命令对象数组、timeout、continueOnError,批量执行。
- powershell_run:传入 command、cwd、timeout,执行 PowerShell 命令。
- system_info:获取系统信息的诊断输出。
- process_list:列出相关进程,便于排查。
- process_cleanup:清理历史进程,释放资源。
- show_security_rules:查看当前服务器的安全配置与限制。
- 使用时请务必遵守安全规则,如命令长度、输出大小、以及项目根目录内的文件操作安全检查。
- 启动后,MCP 客户端可以通过 JSON-RPC 调用以下工具:
-
注意事项
- 本实现包含 anti-hang 与 anti-zombie 机制,确保在命令执行超时或客户端异常关闭时,能彻底清理相关进程树。
- 服务器通过 STDIO 传输 JSON-RPC 数据,与 LLM 客户端的交互需要正确的调用格式和参数结构。
-
适用场景
- 需要在本地 Windows 环境中为大模型/LLM 客户端提供可控的系统命令执行能力、系统信息、以及进程管理等后端工具的场景。
-
备注
- 本仓库还提供 wrapper.js 与 launcher.cs 等辅助实现,用以提升命令执行的稳定性和防止弹窗、僵死子进程等问题,适合对鲁棒性要求较高的使用场景。