内容
# MCP 会话管理器
[](https://badge.fury.io/js/mcp-session-manager)
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org)
允许多个 Claude Code 会话共享 MCP 守护进程,而不会发生 SIGINT 冲突。
## 问题
当同时运行多个 Claude Code 会话时,每个新会话都会向现有的 MCP 进程发送 SIGINT,导致:
- **会话断开**:新会话会终止现有会话的 MCP
- **SQLite 冲突**:多个进程访问同一个数据库
- **状态隔离**:内存状态(文件监视器、索引)未共享
- **资源竞争**:进程冲突和崩溃
## 解决方案
该会话管理器引入了 3 层架构:
```
会话 A 会话 B
| |
v v
[代理 A] -------- HTTP -------- [MCP 守护进程]
(标准输入/输出) 共享 (HTTP/SSE)
| |
[Claude A] [Claude B]
```
1. **单例守护进程**:每个 MCP 作为一个守护进程运行,为所有会话提供服务
2. **标准输入/输出代理**:轻量级代理将 Claude 的标准输入/输出连接到守护进程的 HTTP
3. **SIGINT 保护**:代理忽略信号,保护共享守护进程
4. **自动启动**:守护进程在第一个请求时自动启动
## 安装
### 从 npm(推荐)
```bash
npm install -g mcp-session-manager
```
### 从源码
```bash
git clone https://github.com/daichi-kudo/mcp-session-manager.git
cd mcp-session-manager
npm install
npm run build
```
## 快速入门
### 1. 生成 Claude 配置
```bash
# 如果全局安装
mcp-manager generate-config
# 如果从源码安装
node dist/manager/index.js generate-config
```
这会在 `~/.claude/mcp.json` 中创建带有代理配置的文件。
### 2. 重启 Claude Code
关闭并重新打开 Claude Code。代理将根据需要自动启动守护进程。
### 3. 验证
打开多个 Claude Code 会话 - 它们应该可以同时工作而不会发生冲突。
## 配置
### Claude Code (`~/.claude/mcp.json`)
```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`)
自定义守护进程配置:
```typescript
{
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: "..." }
}
```
## 端口
| 守护进程 | 默认端口 | 传输协议 |
|--------|---------|-----------|
| memory | 3100 | streamable-http |
| code-index | 3101 | streamable-http(SSE 响应) |
| ast-grep | 3102 | sse |
| 管理器 API | 3199 | HTTP |
## 手动守护进程管理
启动管理器进行健康监测和自动重启:
```bash
# 启动所有守护进程
mcp-manager --start-all
# 或从源码
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 | 停止所有守护进程 |
## 故障排除
### 检查守护进程状态
```bash
curl http://localhost:3199/status
```
### 查看守护进程日志
```bash
# 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. 检查端口是否已被占用:
```bash
# Windows
netstat -ano | findstr :3100
# macOS/Linux
lsof -i :3100
```
2. 删除过时的锁定文件:
```bash
# 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`
### 重启卡住的守护进程
```bash
curl -X POST http://localhost:3199/stop -d '{"name":"memory"}'
curl -X POST http://localhost:3199/start -d '{"name":"memory"}'
```
### 手动清理(Windows)
```powershell
# 删除锁定文件
Remove-Item $env:USERPROFILE\.mcp-session-manager\*.lock
# 终止孤立的进程
Get-Process node | Where-Object {$_.CommandLine -like "*mcp*"} | Stop-Process -Force
```
### 手动清理(macOS/Linux)
```bash
# 删除锁定文件
rm ~/.mcp-session-manager/*.lock
# 终止孤立的进程
pkill -f "mcp-session-manager"
```
## 架构
参见 [ARCHITECTURE.md](./ARCHITECTURE.md) 以获取详细的架构文档。
## 需求
- Node.js 20+
- Windows、macOS 或 Linux
- 现有的 MCP 服务器,支持 HTTP/SSE 传输协议
## 支持的 MCP
| MCP | 传输协议 | 备注 |
|-----|-----------|-------|
| memory-mcp-sqlite | streamable-http | 需要 `--transport http` 标志 |
| code-index-mcp | streamable-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 许可证 - 参见 [LICENSE](./LICENSE) 以获取详细信息。
## 作者
**Daichi Kudo**
- [Cognisant LLC](https://cognisant.io/) - 首席执行官
- [M16 LLC](https://m16-llc.com/) - 首席技术官
## 相关项目
- [模型上下文协议](https://github.com/anthropics/model-context-protocol)
- [Claude Code](https://claude.ai/code)
- [memory-mcp-sqlite](https://github.com/anthropics/memory-mcp-sqlite)