用途
mcp-shell 是一个 MCP(Model Context Protocol)服务器,为 AI 助手提供执行操作的能力,同时让使用者保留对“运行什么”和“如何运行”的控制权。它运行 shell 命令类操作,但默认不提供原始 shell,而是暴露类型化工具。项目基于 mark3labs/mcp-go 构建,使用 Go 语言编写。
主要能力
安全模式(默认):服务器启动时若无配置文件,会自动进入安全模式,只注册类型化工具。每一条命令的 argv 由服务器自行构建,客户端永远不提供 shell 字符串。这些工具覆盖文件读取、grep / glob、git 检查,以及需要显式启用的文件/git 写入和操作员定义脚本。
路径限制:每个路径参数都会基于 working_directory 解析(跟随符号链接),任何解析到该目录之外的路径都会被拒绝。
Git 加固:Git 路径在 -- 之后传入,ref 在 --end-of-options 之后传入,以 - 开头的 ref 会被拒绝。Git 运行时设置 GIT_CONFIG_NOSYSTEM=1、GIT_CONFIG_GLOBAL=/dev/null,并中和 core.fsmonitor、core.pager、core.hooksPath,在 log/diff/show/blame 上启用 --no-ext-diff --no-textconv。
最小环境:子进程只获得 PATH、HOME 和 LANG,不会继承服务器自身环境或 .env 中的机密。
写入与脚本需显式启用:writes_enabled: true 才会暴露文件/git 写入工具;非空的 scripts 映射才会暴露 run_script。两者默认关闭。
无网络工具:push、fetch 和 clone 均不提供。
使用方式
Docker(最简单)运行,安全模式为默认模式。无需配置文件即可启动。要自定义策略,可指向一个 YAML 配置文件。接入 Claude Desktop 时,在 MCP 配置中添加相应项;使用自定义配置时,挂载文件并设置对应环境变量。
若要完全不受限制地运行,必须显式启用:设置 MCP_SHELL_ALLOW_UNSAFE=1。此时唯一注册的工具是 shell_exec,它通过 bash -c 运行命令且不做验证,仅适合本地开发,其他场景下很危险。
适用场景
适合希望给 AI 提供受控文件访问、代码检索、git 检查等能力,同时保持可审计性的开发与自动化场景。Docker 镜像基于 Alpine、以非 root 运行,建议在生产中使用,并最好搭配操作系统级沙箱(只读文件系统、丢弃能力)作为纵深防御。
限制
安全模式下没有原始 shell 命令,只有类型化工具可用。文件/git 写入和自定义脚本默认关闭,需要显式开启。没有网络类工具(push、fetch、clone)。从 0.x 迁移时,安全模式不再验证 shell_exec 命令字符串,配置文件的 security: 块不再接受某些旧键;若配置仍设置这些键,启动会失败并报出对应键名。已无“legacy mode”和 security-legacy.yaml 示例。如需原始 shell 访问,只能设置 MCP_SHELL_ALLOW_UNSAFE=1 获得 shell_exec,且它不再受 security: 块约束。威胁模型、保证与漏洞报告范围见 SECURITY.md,提交 advisory 前应先阅读。