MCP运行
stdio MCP服务器(mcp-run-bash)这暴露了a run 工具:它执行 shell命令通过 bash -c 并返回退出代码、stdout和stderr-- 可选择通过30多个特定于命令的过滤器(ls, git, make, cargo, cpanm, kubectl, terraform,…)所以法学硕士看到了本质 而不是900行噪声。
将其插入克劳德桌面, .mcp.json或任何MCP客户端。
作为一个 奖金,相同的压缩管道作为独立的克劳德运输 代码 PreToolUse 钩子(mcp-run-compress)过滤克劳德的输出 代码的内置Bash工具。钩子可以通过Docker完全独立使用-- 主机上不需要Perl。
安装(Perl)
cpanm MCP::Run给你 mcp-run-bash (MCP服务器)和 mcp-run-compress (钩子
- 安装程序)。
用作MCP服务器(MCP运行bash)
use MCP::Run::Bash;
my $server = MCP::Run::Bash->new(
allowed_commands => ['ls', 'cat', 'grep', 'find'],
working_directory => '/var/data',
timeout => 60,
);
$server->to_stdio;或者直接运行二进制文件——它从环境变量中读取配置 通过stdio与MCP通话:
mcp-run-bash属性: allowed_commands (白名单,默认:全部), working_directory (默认值:cwd), timeout (默认:30s), compress (默认设置:关闭 模块,on in bin/mcp-run-bash), tool_name (默认值: run), tool_description.
工具输入模式:
{
"command": "ls -la",
"working_directory": "/tmp",
"timeout": 10,
"compress": false
}当 compress 启用后,原始命令将输入筛选器 管道命令特定规则(例如。 git status, make, kubectl) 比赛。看 MCP::Run::Compress::Filters 对于预设目录。
额外奖励:Claude代码的PreToolUse钩子(mcp-run-compress)
相同的压缩管道,但安装为Claude Code挂钩,因此 过滤内置的输出 Bash 工具。
已安装Perl
cpanm MCP::Run
mcp-run-compress --install-claude没有Perl,通过Docker
docker run --rm \
-v "$HOME:$HOME" -e HOME="$HOME" \
raudssus/mcp-run-compress --install-claude补丁 ~/.claude/settings.json 并将旁路技能放入 ~/.claude/skills/。主机只需要 bash, mktemp, base64, docker.
在任何命令前加上前缀 no-compress 绕过过滤器进行一次通话。
Docker安装是如何工作的
钩子需要来自两个不同世界的两样东西:
- 运行真正的Bash命令 (
git status,dzil test,…)与
主机的cwd、env和二进制文件。
- 过滤输出 --纯文本处理,无需主机访问。
所以钩子把它们分开了。重写的命令运行原始命令 主机上的命令,将stdout/stderr捕获到临时文件中,然后 将它们装入压缩它们的容器中:
{ __o=$(mktemp) && __e=$(mktemp) || exit 1
trap 'rm -f "$__o" "$__e"' EXIT
bash -c "$(printf %s '' | base64 -d)" >"$__o" 2>"$__e" # host
__ec=$?
docker run --rm -v "$__o:/in/stdout:ro" -v "$__e:/in/stderr:ro" \
raudssus/mcp-run-compress:
\
--filter-files --cmd-b64 '' /in/stdout /in/stderr # filter
exit $__ec
}主机bash在主机上运行。Docker只运行压缩。没有chroot, 没有共享工具链,主机上没有Perl。
写入哪种安装模式
bin/mcp-run-compress 读取 MCP_RUN_COMPRESS_INSTALL_MODE:
- 未设置/
native→ 挂钩是mcp-run-compress --hook,重写为
mcp-run-compress --b64 (正在处理中)。
docker→ 挂钩是docker run … --hook,重写到主机端
管道穿过上面的代码段。
Docker镜像被烘焙 ENV MCP_RUN_COMPRESS_INSTALL_MODE=docker,所以 任何 --install-claude 跑 *里面* 容器写入Docker模式 自动挂钩。本地人 cpanm 在主机上安装会留下var 未设置。无检测启发式;图像会标记自己。
图像也会烘烤 MCP_RUN_COMPRESS_IMAGE=raudssus/mcp-run-compress:, 因此,钩子被固定在安装它的确切版本上。升级 明确: docker pull … && … --install-claude 再一次。
环境变量
| Var | 目的 |
|---|---|
MCP_RUN_ALLOWED_COMMANDS | 以逗号分隔的白名单 mcp-run-bash |
MCP_RUN_WORKING_DIRECTORY | 默认cwd mcp-run-bash |
MCP_RUN_TIMEOUT | 的默认超时时间(秒) mcp-run-bash |
MCP_RUN_COMPRESS | 0 禁用压缩 mcp-run-bash |
MCP_RUN_TOOL_NAME | 注册的MCP工具名称(默认 run) |
MCP_RUN_COMPRESS_INSTALL_MODE | native (默认)或 docker.烤到 docker 在图像中 |
MCP_RUN_COMPRESS_IMAGE | docker模式挂钩的图像参考。固定到 : 在图像中 |
MCP_RUN_COMPRESS_NO_CO_AUTHORED | 设置为任何值以禁用“共同作者”替换 |
CO_AUTHORED_BY | git commits中Co-Authored By的替换值 |
ANTHROPIC_MODEL | 如果未设置CO_AUTHORED_BY,则回退 |
通过替换git提交共同编写
当 mcp-run-compress 检测a git commit 命令,它可以自动添加 或更换 Co-Authored-By 提交消息中的行。这在以下情况下很有用 使用具有不同AI模型的Claude Code来跟踪使用了哪个模型。
它是如何工作的:
- 如果
CO_AUTHORED_BY或ANTHROPIC_MODEL已设置并提交消息
已包含 Co-Authored-By 行,它将被替换为值 该env变种。
- 如果没有
Co-Authored-By如果行存在,它将被附加到提交消息中。 - 要暂时禁用此功能,请设置
MCP_RUN_COMPRESS_NO_CO_AUTHORED=1.
例子:
# Set the model identifier
export CO_AUTHORED_BY="MiniMax-M2.7"
# git commit will now automatically include:
# Co-Authored-By: MiniMax-M2.7
# To temporarily disable:
MCP_RUN_COMPRESS_NO_CO_AUTHORED=1 git commit -m "WIP"在本地构建Docker镜像
dzil build
VERSION=$(perl -Ilib -MMCP::Run -E 'say $MCP::Run::VERSION')
docker build \
--build-arg MCP_RUN_VERSION=$VERSION \
--target runtime \
-t raudssus/mcp-run-compress:$VERSION \
-t raudssus/mcp-run-compress:latest \
MCP-Run-$VERSION发布(维护者)
dzil release 上传到CPAN,然后 maint/release-after.pl 创建 匹配GitHub版本, docker builds、 以及 docker push都是 :VERSION 和 :latest Docker Hub。
dzil release
# extra build flags:
MCP_RUN_DOCKER_BUILD_ARGS='--platform linux/amd64,linux/arm64' dzil release需求 docker login 和 gh auth login.
许可证
版权所有(c)2026托斯滕·劳德苏斯。与Perl 5本身相同。
