MCP开发服务器管理器
一个守护进程,接受来自MCP客户端的启动开发服务器的请求,分配唯一的端口以避免冲突,并在120秒不活动后关闭空闲连接。
示例
- 用户启动守护进程
- 用户的第一个MCP客户端(例如编写CLI)请求运行开发服务器
- 开发服务器已在PORT 3010上启动
- 用户的第二个MCP客户端(例如编码CLI)请求运行开发服务器
- 开发服务器已在PORT 3011上启动
特性
- 避免端口冲突:使用网站时,如果要运行多个开发服务器,通常需要指定不同的端口
- 自动端口分配 从3010开始重复使用
- 日志捕获 每台服务器有512KB环形缓冲区
- 自动清理 120秒后空闲会话的数量(可通过配置
--idle-timeout)
安装与使用
要求: Node.js>=18
建议使用开发管理器mcp的方式是通过 npx:
快速开始
确保守护进程正在某个终端中运行:
npx -y dev-manager-mcp将此MCP配置添加到您的编码CLI中:
{
"mcpServers": {
"dev-manager": {
"command": "npx",
"args": ["dev-manager-mcp", "stdio"]
}
}
}最后,让您的编码CLI启动开发服务器。您应该看到它使用MCP服务器。
MCP工具
start
启动开发服务器。自动生成一个唯一的4个字符的会话密钥。
参数:
command(string):要执行的Shell命令(例如,“npm run-dev”、“python-m http.server 8080”)cwd(可选字符串):命令的工作目录。使用STDIO传输时,默认为客户端的工作目录。
退货:
{
"status": "started",
"port": 3010,
"session_key": "A3X9"
}stop
停止正在运行的开发服务器会话。
参数:
session_key(string):会话标识符
退货:
{
"status": "stopped",
"session_key": "A3X9"
}status
获取一个或所有开发服务器会话的状态。
参数:
session_key(可选字符串):要查询的特定会话,或省略所有会话
退货:
{
"sessions": [
{
"session_key": "B7K2",
"port": 3010,
"running": true
}
]
}tail
获取开发服务器会话的stdout/stderr日志。
参数:
session_key(string):会话标识符(例如“A3X9”)
退货:
{
"session_key": "A3X9",
"stdout": "Server started on port 3010...",
"stderr": ""
}建筑
模块
- port_allocator.rs -3010的顺序端口分配,带有空闲列表
- log_buffer.rs -有界512KB环形缓冲区,支持克隆
- server_entry.rs -带有异步日志捕获的进程包装器
- 经理 -带有自动清理功能的共享状态管理器
- service.rs -带工具定义的MCP服务
- main.rs -HTTP/SSE守护进程服务器
状态管理
- 单
Arc在所有客户端连接中共享 - 每个连接都会得到一个新的
DevManagerService例子 - Mutex保护的HashMap用于会话存储
- 后台清理程序每5秒运行一次,以清理空闲会话(默认情况下>120秒)
会话密钥
- 自动生成的4个字符大写字母数字代码(例如“A3X9”、“K7M2”)
- 保证在活动会话中独一无二
- 1679616种可能的组合(36^4)
端口分配
- 从3010开始,按顺序递增
- 维护重用端口的空闲列表
- 在分配之前使用TcpListener探测可用性
日志捕获
- 每台服务器为stdout/stderr生成两个异步任务
- 存储在带字节跟踪的有界VecDeque中的日志
- 达到512KB限制时,最旧的条目被驱逐
- 带行缓冲的非阻塞读取
测试多客户端行为
- 启动守护进程:
npx -y dev-manager-mcp daemon - 连接客户端A并启动服务器会话
- 连接客户端B并查询状态-应查看客户端A的会话
- 客户端B可以停止客户端A的会话
- 所有客户端共享相同的会话状态
从源头构建
如果您更喜欢从源代码构建或需要离线/高级使用:
cargo build --release二进制文件将位于 target/release/dev-manager-mcp.
要使用内置二进制文件,请替换 npx dev-manager-mcp 随着 ./target/release/dev-manager-mcp 在上述所有示例中。
许可证
麻省理工学院
