进程管理工具

mcp-shim是一个进程包装工具,确保在父连接关闭时正确终止MCP服务器子进程。

  • by cbgbt
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 cbgbt/mcp-shim

使用说明

mcp垫片

一个进程包装器,确保MCP服务器子进程在父连接关闭时正确终止。

问题

MCP(模型上下文协议)服务器通常由主机应用程序作为子进程生成。当主机终止时,它应该清理这些子进程。然而,许多MCP主机没有正确跟踪和终止其子进程,导致泄漏的进程继续在后台运行。

这对于产生它们自己的子进程的MCP服务器来说尤其成问题(例如。, uvx, npx,或其他进程启动器),因为整个进程树可以是孤立的。

解决方案

mcp-shim 包装MCP服务器命令并:

  1. 在其自己的进程组中生成子进程
  2. 透明地转发stdin/stdout/stderr
  3. 将信号(SIGTERM、SIGINT、SIGHUP)转发给子进程组
  4. 当stdin关闭时,杀死整个进程组(表示主机已断开连接)

安装

docker pull ghcr.io/cbgbt/mcp-shim:latest

用法

将MCP服务器命令包装为 mcp-shim:

mcp-shim <command> [args...]

示例:MCP服务器配置

如果没有垫片,MCP服务器可能会按如下方式配置:

{
  "mcpServers": {
    "my-server": {
      "command": "uvx",
      "args": ["some-mcp-server"]
    }
  }
}

使用垫片,包裹命令以确保正确清理:

{
  "mcpServers": {
    "my-server": {
      "command": "mcp-shim",
      "args": ["uvx", "some-mcp-server"]
    }
  }
}

运作原理

  1. 垫片在新的进程组中生成您的命令(setpgid(0, 0))
  2. Stdin、stdout和stderr是透明转发的
  3. 当stdin达到EOF(主机断开连接)时,填充程序向进程组发送SIGTERM,短暂等待,然后发送SIGKILL
  4. 垫片接收到的信号被转发给子进程组

许可证

麻省理工学院或阿帕奇-2.0