会话管理工具

MCP会话管理器是一个允许多个Claude Code会话共享MCP守护进程而不会发生SIGINT冲突的工具。

  • by Daichi-Kudo
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Daichi-Kudo/mcp-session-manager

使用说明

MCP会话管理器

允许多个Claude Code会话共享MCP守护进程,而不会发生SIGINT冲突。

问题

当同时运行多个Claude Code会话时,每个新会话都会向现有的MCP进程发送SIGINT,从而导致:

  • 会话断开连接:新会话会杀死现有会话的MCP
  • SQLite冲突:多个进程访问同一数据库
  • 国家隔离:内存状态(文件监视器、索引)未共享
  • 资源争用:进程冲突和崩溃

解决方案

此会话管理器引入了一个3层架构:

Session A                          Session B
    |                                  |
    v                                  v
[Proxy A] -------- HTTP -------- [MCP Daemon]
(stdio)            shared          (HTTP/SSE)
    |                                  |
[Claude A]                        [Claude B]
  1. Singleton Daemons:每个MCP都作为一个守护进程运行,为所有会话提供服务
  2. 标准代理:轻量级代理将Claude的stdio桥接到守护进程HTTP
  3. 信号情报保护:代理忽略信号,保护共享守护进程
  4. 自动启动:守护进程在第一次请求时自动启动

安装

来自npm(推荐)

npm install -g mcp-session-manager

来源

git clone https://github.com/daichi-kudo/mcp-session-manager.git
cd mcp-session-manager
npm install
npm run build

快速开始

1.生成Claude配置

# If installed globally
mcp-manager generate-config

# If installed from source
node dist/manager/index.js generate-config

这创造了 ~/.claude/mcp.json 使用代理配置。

2.重新启动克劳德代码

关闭并重新打开Claude Code。代理将根据需要自动启动守护进程。

3.验证

打开多个Claude Code会话-它们应该同时工作而不会发生冲突。

配置

克劳德代码(~/.claude/mcp.json)

{
  "mcpServers": {
    "memory": {
      "command": "node",
      "args": ["path/to/mcp-session-manager/dist/proxy/index.js", "--target", "memory"]
    },
    "code-index": {
      "command": "node",
      "args": ["path/to/mcp-session-manager/dist/proxy/index.js", "--target", "code-index"]
    },
    "ast-grep": {
      "command": "node",
      "args": ["path/to/mcp-session-manager/dist/proxy/index.js", "--target", "ast-grep"]
    }
  }
}

守护程序设置(src/shared/config.ts)

自定义守护进程配置:

{
  name: "memory",
  command: "node",
  args: ["path/to/memory-mcp-sqlite/dist/index.js", "--transport", "http", "--port", "3100"],
  port: 3100,
  transport: "streamable-http",
  env: { MEMORY_DB_PATH: "..." }
}

港口

守护进程 默认端口 传输
内存 3100 可流式传输http
代码索引 3101 可流式传输http(SSE响应)
希腊东部 3102 sse
管理器API 3199 HTTP

手动守护程序管理

启动管理器进行健康监控并自动重启:

# Start all daemons
mcp-manager --start-all

# Or from source
node dist/manager/index.js --start-all

API经理

端点 方法 描述
/ping GET 健康检查
/status GET 所有守护进程状态
/start POST 启动守护进程({"name": "memory"})
/stop POST 停止守护进程
/ensure POST 确保守护进程正在运行(必要时启动)
/start-all POST 启动所有守护进程
/stop-all POST 停止所有守护进程

故障排除

检查守护进程状态

curl http://localhost:3199/status

查看守护进程日志

# Windows
type %USERPROFILE%\.mcp-session-manager\memory.log
type %USERPROFILE%\.mcp-session-manager\code-index.log

# macOS/Linux
cat ~/.mcp-session-manager/memory.log
cat ~/.mcp-session-manager/code-index.log

守护进程无法启动

  1. 检查端口是否已在使用中:

    # Windows
    netstat -ano | findstr :3100
    
    # macOS/Linux
    lsof -i :3100
    
  2. 删除过时的锁文件:

    # Windows
    del %USERPROFILE%\.mcp-session-manager\*.lock
    
    # macOS/Linux
    rm ~/.mcp-session-manager/*.lock
    

会话仍然断开连接

  1. 验证是否在中配置了代理 ~/.claude/mcp.json
  2. 检查Claude Code的MCP输出中的代理日志
  3. 确保守护进程正在运行: curl http://localhost:3100/health

重新启动卡住的守护进程

curl -X POST http://localhost:3199/stop -d '{"name":"memory"}'
curl -X POST http://localhost:3199/start -d '{"name":"memory"}'

手动清理(Windows)

# Remove lock files
Remove-Item $env:USERPROFILE\.mcp-session-manager\*.lock

# Kill orphaned processes
Get-Process node | Where-Object {$_.CommandLine -like "*mcp*"} | Stop-Process -Force

手动清理(macOS/Linux)

# Remove lock files
rm ~/.mcp-session-manager/*.lock

# Kill orphaned processes
pkill -f "mcp-session-manager"

建筑

看 建筑.md 详细的设计文档。

需求

  • Node.js 20+
  • Windows、macOS或Linux
  • 支持HTTP/SSE传输的现有MCP服务器

支持的MCP

MCP 运输 注意事项
内存mcp sqlite 可流式传输http 需要 --transport http 旗帜
代码索引mcp 可流式http SSE响应,需要FastMCP
ast grep mcp sse 弃用的mcp 2024-11-05格式

贡献

  1. 克隆该仓库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

许可证

MIT许可证-请参阅 许可证 了解详情。

作者

工藤大一

相关项目