mcpField
M
MCP Sidecar

MCP Sidecar

本地服务
github.com/lsequeiraa开发工具022 周前更新

关于 MCP Sidecar

MCP Sidecar 是面向编码 Agent 的跨平台 MCP 服务,可让后台进程在多次工具调用间持续运行。它提供进程管理和输出访问,并支持可选的命令限制与审计日志。

主要功能

  1. 01启动和停止后台进程
  2. 02列出进程并查看状态
  3. 03读取输出并向标准输入写入
  4. 04自动清理已退出进程
  5. 05可选的可执行文件白名单与审计日志

适用场景

  1. 01测试期间保持 API 服务运行
  2. 02以监视模式运行构建任务
  3. 03启动数据库、运行测试后停止

MCP 相关

通过 stdio 向 MCP 客户端提供六种进程管理工具:start、stop、list、output、send 和 status。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"lsequeiraa-mcp-sidecar": {
"command": "npx",
"args": [
"-y",
"mcp-sidecar"
],
"env": {
"SIDECAR_MAX_PROCESSES": "<SIDECAR_MAX_PROCESSES>",
"SIDECAR_BUFFER_SIZE": "<SIDECAR_BUFFER_SIZE>",
"SIDECAR_KILL_TIMEOUT": "<SIDECAR_KILL_TIMEOUT>",
"SIDECAR_CLEANUP_AFTER": "<SIDECAR_CLEANUP_AFTER>",
"SIDECAR_MAX_OUTPUT_SIZE": "<SIDECAR_MAX_OUTPUT_SIZE>",
"SIDECAR_ALLOWED_EXECUTABLES": "<SIDECAR_ALLOWED_EXECUTABLES>",
"SIDECAR_BLOCKED_PATTERNS": "<SIDECAR_BLOCKED_PATTERNS>",
"SIDECAR_AUDIT_LOG": "<SIDECAR_AUDIT_LOG>"
}
}
}
}
启动命令npx -y mcp-sidecar
需要配置的环境变量
SIDECAR_MAX_PROCESSESMaximum number of concurrent managed processes (default: 10)
SIDECAR_BUFFER_SIZEOutput buffer size per stream in bytes (default: 1048576)
SIDECAR_KILL_TIMEOUTMilliseconds to wait between graceful and forced termination (default: 5000)
SIDECAR_CLEANUP_AFTERSeconds before exited processes are auto-removed. 0 disables cleanup (default: 1800)
SIDECAR_MAX_OUTPUT_SIZEGlobal cap on bytes returned by the output tool. 0 means unlimited (default: 0)
SIDECAR_ALLOWED_EXECUTABLESComma-separated allowlist of executable names. When set, enables security mode with direct exec (no shell). Unset means security disabled.
SIDECAR_BLOCKED_PATTERNSComma-separated regex patterns to reject in commands. Only applies when security is enabled.
SIDECAR_AUDIT_LOGAudit log destination. 'true' writes to cwd, 'temp' writes to OS temp dir, or a directory path. Unset disables audit logging.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-sidecar0.3.2

工具

6

收录的工具列表 · 更新于 3 周前

此工具无需参数。

详细介绍

mcp-sidecar

一款轻量、跨平台的 MCP 服务,用于管理后台进程。使用 Go 构建,可打包为单个二进制文件,且无需运行时依赖。

为什么需要它?

AI 编码 Agent(Claude Code、Gemini CLI、Cursor 等)无法在继续交互的同时运行长时间存续的进程。常见的受影响工作流包括:

  • 启动 API 服务,等待其就绪,然后对其发送 HTTP 请求
  • 在编辑代码的同时以监视模式运行构建
  • 启动数据库,为其填充数据,运行测试,然后关闭数据库

mcp-sidecar 通过 stdio 传输将进程生命周期管理作为 MCP 工具提供,从而解决了这个问题。

功能

  • 跨平台——使用同一套代码库支持 Windows、Linux 和 macOS
  • 零依赖——单个 Go 二进制文件,无需运行时
  • 精简易用——6 个工具,没有不必要的复杂性
  • 可靠清理——服务退出时会终止所有子进程;已退出的进程会在可配置的 TTL 后自动移除
  • 输出控制——通过每个请求的 maxBytes 和全局 SIDECAR_MAX_OUTPUT_SIZE 限制返回给大模型的输出
  • 命令安全——可选的可执行文件允许列表、禁止模式和审计日志

安装

快速设置(任意 Agent)

将 mcp-sidecar 安装到任何受支持的编码 Agent 中的最快方式:

# Interactive -- detects installed agents and lets you pick
npx add-mcp mcp-sidecar

# Install to a specific agent
npx add-mcp mcp-sidecar -a claude-code
npx add-mcp mcp-sidecar -a cursor
npx add-mcp mcp-sidecar -a vscode

# Install to all detected agents
npx add-mcp mcp-sidecar --all

支持的 Agent:Claude Code、Codex、Cursor、VS Code、Gemini CLI、OpenCode、Zed、Goose、Cline 等。完整列表请参阅 add-mcp。

手动配置

Claude Code:

claude mcp add sidecar -- npx -y mcp-sidecar

opencode(~/.config/opencode/opencode.json):

{
  "mcp": {
    "sidecar": {
      "type": "local",
      "command": ["npx", "-y", "mcp-sidecar"],
      "enabled": true
    }
  }
}

通用配置(mcp.json):

{
  "mcpServers": {
    "sidecar": {
      "command": "npx",
      "args": ["-y", "mcp-sidecar"]
    }
  }
}
从源代码构建
go install github.com/lsequeiraa/mcp-sidecar@latest

也可从 GitHub Releases 下载预构建的二进制文件,适用于 windows/amd64、linux/amd64、darwin/arm64 和 darwin/amd64。

工具

工具说明参数返回值
start启动后台进程command、name?、cwd?、env?{ id, name, pid }
stop终止进程(先尝试正常终止,再强制终止)id{ id, exitCode, uptime }
list列出所有受管理的进程--[{ id, name, pid, state, uptime }]
output获取缓冲的 stdout/stderrid、tail?、maxBytes?{ stdout, stderr, uptime }
send向进程的 stdin 写入内容id、input{ ok }
status获取单个进程的详细状态id{ id, name, pid, state, exitCode, uptime, outputSize }

uptime 字段表示实际运行时长:对于正在运行的进程,它表示从启动到现在的时间;对于已退出的进程,它表示进程存活的时长(而非从启动到现在的时间)。

output 工具的 maxBytes 参数限制 stdout 和 stderr 合计的总字节数。如果同时提供 tail 和 maxBytes,则先由 tail 选择行,再由 maxBytes 限制结果的字节数。输出超出限制时,会保留最新内容,并优先保留 stderr。截断时会保留完整行。如果输出被截断,响应会包含 "truncated": true 和表示原始大小的 "totalBytes"。

进程状态
状态含义
running进程正在运行
exited进程正常终止
failed进程以非零退出码终止
killed进程通过 stop 工具停止
工作流示例

一个典型会话:Agent 启动 API 服务,等待服务就绪,进行测试,然后关闭服务:

1. start  { command: "dotnet run --project MyApi", name: "api" }
   → { id: "sc-a1b2c3", name: "api", pid: 12345 }

2. output { id: "sc-a1b2c3", tail: 5 }
   → { stdout: "Now listening on: http://localhost:5000", stderr: "", uptime: "3s" }

3. (agent runs curl http://localhost:5000/health using its own shell)

4. output { id: "sc-a1b2c3", tail: 20 }
   → { stdout: "...request logs...", stderr: "", uptime: "15s" }

5. stop   { id: "sc-a1b2c3" }
   → { id: "sc-a1b2c3", exitCode: -1, uptime: "18s" }

Agent 使用原生 Shell 执行短时命令(curl、构建工具等),使用 mcp-sidecar 管理需要在多次工具调用之间保持运行的进程。

配置

所有配置均通过环境变量进行(均为可选):

变量默认值描述
SIDECAR_MAX_PROCESSES10最大并发进程数
SIDECAR_BUFFER_SIZE1048576 (1MB)每个进程的输出缓冲区大小(字节)
SIDECAR_KILL_TIMEOUT5000SIGTERM 和 SIGKILL 之间的等待毫秒数
SIDECAR_CLEANUP_AFTER1800 (30 min)进程退出后自动移除前的秒数。0 = 禁用
SIDECAR_MAX_OUTPUT_SIZE0 (unlimited)output 工具返回的全局字节数上限。0 = 无限制
SIDECAR_ALLOWED_EXECUTABLES--以逗号分隔的可执行文件允许列表(启用安全模式)
SIDECAR_BLOCKED_PATTERNS--以逗号分隔的正则表达式模式,用于拒绝命令
SIDECAR_AUDIT_LOG--审计日志目录,或 true(当前工作目录)/ temp(操作系统临时目录)

自动清理说明: 启用 SIDECAR_CLEANUP_AFTER 时(默认启用),进程退出并经过 TTL 后,会从管理器中移除。移除后,对该进程 ID 调用 output、status 或 stop 将返回“未找到”。请在 TTL 时限内获取所需输出(默认 30 分钟)。

安全性

设置 SIDECAR_ALLOWED_EXECUTABLES 后,mcp-sidecar 将从 shell 模式切换到安全模式:

Shell 模式(默认)安全模式
执行方式通过 sh -c / cmd /C直接执行(不使用 shell)
允许列表无仅允许运行列出的可执行文件
元字符允许(由 shell 解释)拒绝(|、&、;、>、<、$、`、(、))
阻止模式无与完整命令匹配的正则表达式模式
审计日志无可选的 JSONL 日志,记录所有启动/停止/拦截事件

引号内的元字符允许使用——grep "error|warning" file.txt 可以正常运行,因为 | 位于双引号内,不会被 shell 解释。

反斜杠(\)不会被视为元字符,这是有意为之,因此像 C:\Users\me\app.exe 这样的 Windows 路径无需转义即可使用。

配置示例

Claude Desktop / Cursor(mcp.json):

{
  "mcpServers": {
    "sidecar": {
      "command": "npx",
      "args": ["-y", "mcp-sidecar"],
      "env": {
        "SIDECAR_ALLOWED_EXECUTABLES": "dotnet,npm,node,git,python",
        "SIDECAR_BLOCKED_PATTERNS": "rm\\s+-rf,--force,--no-verify",
        "SIDECAR_AUDIT_LOG": "./logs"
      }
    }
  }
}

Claude Code:

claude mcp add sidecar \
  -e SIDECAR_ALLOWED_EXECUTABLES=dotnet,npm,node,git,python \
  -e SIDECAR_BLOCKED_PATTERNS="rm\\s+-rf,--force,--no-verify" \
  -e SIDECAR_AUDIT_LOG=true \
  -- npx -y mcp-sidecar
审计日志格式

审计日志始终写入配置目录中的 sidecar-audit.jsonl 文件。SIDECAR_AUDIT_LOG 变量用于控制日志位置:

值日志文件位置
true./sidecar-audit.jsonl(当前工作目录)
temp<OS temp dir>/sidecar-audit.jsonl
./logs./logs/sidecar-audit.jsonl(自动创建目录)

每行都是一个 JSON 对象,包含以下三种事件类型之一:

{"ts":"2025-03-12T10:00:00Z","event":"start","id":"abc123","command":"dotnet run","cwd":"/app"}
{"ts":"2025-03-12T10:00:05Z","event":"stop","id":"abc123","exit_code":0,"duration":"5s"}
{"ts":"2025-03-12T10:00:06Z","event":"blocked","command":"rm -rf /","reason":"executable \"rm\" is not in allowed list"}
可执行文件匹配

允许列表支持三种匹配模式:

允许列表条目匹配对象
dotnet任意位置的 dotnet(按基本名称匹配)
./build.sh仅 ./build.sh(精确匹配)
/usr/bin/python3仅 /usr/bin/python3,或通过 PATH 解析到的任意 python3

分发

渠道用法
npmnpx -y mcp-sidecar(通过 @mcp-sidecar/* 可选包提供平台二进制文件)
GitHub Releases每个版本均附带预构建的二进制文件
MCP Registryio.github.lsequeiraa/mcp-sidecar

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。