使用说明
rmcp多路复用器–MCP服务器多路复用器
管理的Rust守护进程 从单个进程访问所有MCP服务器。在中定义服务器 mux.toml,运行一个 rmcp-mux 命令,并为每个服务获取Unix套接字。功能包括ID重写、初始化缓存、自动重启和交互式TUI仪表板。
0.3.x版本新增:具有守护进程状态套接字的统一进程模型!一 rmcp-mux 进程从配置文件管理所有服务器。用于监控和控制的交互式TUI仪表板。通过查询实时状态 rmcp-mux daemon-status.
目录
特性
核心
- 单进程、多服务器 -一个
rmcp-mux管理配置中定义的所有MCP服务器 - 每个服务的Unix套接字 –每台服务器都有自己的套接字用于客户端连接
- ID重写 –所有服务的响应都与正确的客户端相匹配
- 初始化缓存 –每台服务器执行一次;缓存响应服务于后续客户端
- 自动重启 –服务器在出现故障时以指数级回退重新启动
- 平滑关闭 –Ctrl+C停止所有服务器,删除套接字
监控与控制
- 交互式TUI (
--tui)–具有服务器状态、重启控制的实时仪表板 - 状态命令 (
--show-status)–所有服务器状态的JSON快照 - 每台服务器控制 –在运行时重新启动、停止、启动各个服务器
- 选择性启动 –
--only和--except部分发射标志
配置
- TOML配置 –简单易读的服务器定义
- 环境变量 –每台服务器的环境变量注入
- 灵活的参数 –超时、客户端限制、重启策略
快速开始
# 1. Create config file
cat > mux.toml << 'EOF'
[servers.memory]
socket = "/tmp/mcp-memory.sock"
cmd = "npx"
args = ["-y", "@modelcontextprotocol/server-memory"]
[servers.filesystem]
socket = "/tmp/mcp-fs.sock"
cmd = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
EOF
# 2. Start all servers
rmcp-mux --config mux.toml
# 3. Or start with TUI dashboard
rmcp-mux --config mux.toml --tui
# 4. Connect via proxy (for MCP hosts expecting STDIO)
rmcp-mux-proxy --socket /tmp/mcp-memory.sock
安装
来源
cargo build --release
# Binaries: target/release/rmcp-mux, target/release/rmcp-mux-proxy
一个衬垫(卷曲|sh)
curl -fsSL https://raw.githubusercontent.com/Loctree/rmcp-mux/main/tools/install.sh | sh
环境覆盖:
INSTALL_DIR–包装器位置(默认值:$HOME/.local/bin)CARGO_HOME–货房(默认值:~/.cargo)MUX_REF–分支/标签/提交(默认值:main)MUX_NO_LOCK=1–跳过--locked旗帜
内置代理
如果您的MCP主机需要STDIO命令,请使用捆绑的代理:
rmcp-mux-proxy --socket /tmp/mcp-memory.sock
配置
配置文件格式(TOML)
[servers.memory]
socket = "~/mcp-sockets/memory.sock"
cmd = "npx"
args = ["-y", "@modelcontextprotocol/server-memory"]
max_active_clients = 5
tray = true
[servers.brave-search]
socket = "~/mcp-sockets/brave.sock"
cmd = "npx"
args = ["-y", "@anthropic/mcp-server-brave-search"]
env = { BRAVE_API_KEY = "your-api-key" }
request_timeout_ms = 60000
[servers.filesystem]
socket = "~/mcp-sockets/fs.sock"
cmd = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/docs"]
lazy_start = true
[servers.rmcp-memex]
socket = "~/.rmcp-servers/sockets/rmcp-memex.sock"
cmd = "/path/to/rmcp-memex"
args = ["serve", "--config", "config.toml", "--db-path", "~/.ai-memories/lancedb"]
env = { SLED_PATH = "~/.rmcp-servers/sled/memex" }
lazy_start = false
参数参考
| 参数 | 默认值 | 说明 |
|---|---|---|
socket |
必需 | Unix套接字路径(支持 ~ 扩展) |
cmd |
必需 | MCP服务器命令 |
args |
[] |
命令参数 |
env |
{} |
子进程的环境变量 |
max_active_clients |
5 |
并发客户端限制 |
lazy_start |
false |
将孩子的出生推迟到第一个请求 |
max_request_bytes |
1048576 |
最大请求大小(1 MiB) |
request_timeout_ms |
30000 |
请求超时(30s) |
restart_backoff_ms |
1000 |
初始重启延迟(1秒) |
restart_backoff_max_ms |
30000 |
最大重启延迟(30s) |
max_restarts |
5 |
重启限制(0=无限制) |
tray |
false |
为此服务器启用托盘图标 |
status_file |
none | JSON状态快照的路径 |
客户端配置(克劳德桌面等)
MCP主机希望通过STDIO通信连接 rmcp-mux-proxy:
{
"mcpServers": {
"rmcp-memex": {
"command": "rmcp-mux-proxy",
"args": ["--socket", "~/.rmcp-servers/sockets/rmcp-memex.sock"]
},
"loctree": {
"command": "rmcp-mux-proxy",
"args": ["--socket", "~/.rmcp-servers/sockets/loctree.sock"]
},
"brave-search": {
"command": "rmcp-mux-proxy",
"args": ["--socket", "~/.rmcp-servers/sockets/brave-search.sock"]
}
}
}
每个代理实例都转换STDIO<->Unix套接字,允许标准MCP主机与rmcp-mux管理的服务器通信。
CLI 参考
主命令
rmcp-mux --config mux.toml [OPTIONS]
必修的:
--config <PATH>–配置文件路径(TOML)
服务器选择:
--only <NAMES>–仅启动指定的服务器(逗号分隔)--except <NAMES>–启动除指定以外的所有服务器(逗号分隔)
运行时控制:
--show-status–显示所有服务器的状态并退出--restart-service <NAME>–重新启动特定服务器--tui–启动交互式TUI仪表板
示例:
# Start all servers from config
rmcp-mux --config mux.toml
# Start only memory and filesystem servers
rmcp-mux --config mux.toml --only memory,filesystem
# Start all except brave-search
rmcp-mux --config mux.toml --except brave-search
# Check status of running servers
rmcp-mux --config mux.toml --status
# Restart a specific server
rmcp-mux --config mux.toml --restart-service memory
# Interactive dashboard
rmcp-mux --config mux.toml --tui
子指令
daemon-status –查询正在运行的守护进程
# Get status of running daemon (requires daemon to be running)
rmcp-mux daemon-status
# Output as JSON
rmcp-mux daemon-status --json
# Use custom status socket
rmcp-mux daemon-status --socket /custom/path.sock
返回:版本、正常运行时间、服务器计数、每台服务器状态(活动客户端、挂起请求、重启、心跳延迟)。
health –验证连接
# Check specific socket
rmcp-mux health --socket /tmp/mcp-memory.sock
# Check service from config
rmcp-mux health --config mux.toml --service memory
proxy –STDIO代理
rmcp-mux proxy --socket /tmp/mcp-memory.sock
scan –发现并生成配置
rmcp-mux scan \
--manifest ~/.codex/mcp-mux.toml \
--snippet ~/.codex/mcp-mux \
--socket-dir ~/.rmcp-servers/rmcp-mux/sockets
rewire –更新主机配置
# Rewire a host config to use rmcp-mux proxy (creates .bak backup)
rmcp-mux rewire --host codex --socket-dir ~/.rmcp-servers/rmcp-mux/sockets
# Preview changes without writing
rmcp-mux rewire --host codex --dry-run
wizard –交互式配置
rmcp-mux wizard --config ~/.codex/mcp-mux.toml
交互式TUI仪表板
启动时 --tui 对于实时仪表板:
rmcp-mux --config mux.toml --tui
显示
- 带有状态指示器(运行/停止/错误)的服务器列表
- 每台服务器连接的客户端数
- 待定申请
- 重启计数和上次重启原因
- 实时更新
键盘控制
| 关键 | 行动 |
|---|---|
j / Down |
向下移动选择 |
k / Up |
向上移动选择 |
r |
重新启动所选服务器 |
s |
停止所选服务器 |
S |
启动所选服务器 |
q / Esc |
退出 |
图书馆使用情况
添加到您的 Cargo.toml:
[dependencies]
rmcp-mux = { version = "0.3", default-features = false }
基本示例-单多路复用服务器
use rmcp_mux::{MuxConfig, run_mux_server};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let config = MuxConfig::new("/tmp/my-mcp.sock", "npx")
.with_args(vec!["-y".into(), "@anthropic/mcp-server".into()])
.with_max_clients(10)
.with_service_name("my-mcp-server");
run_mux_server(config).await
}
多个Mux实例(单个进程)
use rmcp_mux::{MuxConfig, spawn_mux_server, MuxHandle};
use std::time::Duration;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let services = vec![
("memory", "/tmp/mcp-memory.sock", "npx", vec!["@mcp/server-memory"]),
("filesystem", "/tmp/mcp-fs.sock", "npx", vec!["@mcp/server-filesystem"]),
];
let mut handles: Vec<MuxHandle> = Vec::new();
for (name, socket, cmd, args) in services {
let config = MuxConfig::new(socket, cmd)
.with_args(args.into_iter().map(String::from).collect())
.with_service_name(name)
.with_request_timeout(Duration::from_secs(60));
handles.push(spawn_mux_server(config).await?);
}
for handle in handles {
handle.wait().await?;
}
Ok(())
}
健康检查
use rmcp_mux::check_health;
async fn verify_service() -> bool {
check_health("/tmp/mcp-memory.sock").await.is_ok()
}
功能标志
| 特性 | 默认值 | 描述 |
|---|---|---|
cli |
yes | CLI二进制、向导、扫描命令 |
tray |
是 | 系统托盘图标支持 |
仅用于库(最小依赖性):
[dependencies]
rmcp-mux = { version = "0.3", default-features = false }
运行时行为
客户处理
- 新客户端连接到服务器的套接字->分配
client_id - 消息获取
global_id = c<client>:<seq> - 使用本地ID将响应解复用回原始客户端
- 第一
initialize点击服务器;响应已缓存 - 稍后
initialize从缓存应答的呼叫
安全防护装置
- 最大请求大小 –默认1 MiB
- 请求超时 –默认30秒,用于清理挂起的呼叫
- 指数级重启回退 –1秒->30秒,可配置限制
- 缓慢启动 –将孩子的出生推迟到第一个请求
错误处理
- 子系统退出或I/O失败->重新启动子系统,清除缓存/挂起,向受影响的客户端发送错误
- 优雅关机(Ctrl+C)->停止所有子进程,删除所有套接字
项目结构
rmcp-mux/
├── src/
│ ├── lib.rs # Library entry point, MuxConfig, public API
│ ├── config.rs # Config types, loading, validation
│ ├── state.rs # MuxState, StatusSnapshot, helpers
│ ├── scan.rs # Host discovery and rewiring (cli feature)
│ ├── tray.rs # Tray icon (tray feature)
│ ├── bin/
│ │ ├── rmcp_mux.rs # CLI binary (cli feature)
│ │ └── rmcp_mux_proxy.rs # STDIO proxy (cli feature)
│ ├── runtime/ # Core mux daemon
│ │ ├── mod.rs # run_mux, health_check
│ │ ├── types.rs # ServerEvent, constants
│ │ ├── client.rs # Client connection handling
│ │ ├── server.rs # Child process management
│ │ ├── proxy.rs # STDIO proxy logic
│ │ ├── status.rs # Status file writing & daemon status socket
│ │ └── heartbeat.rs # Backend health monitoring
│ └── wizard/ # Interactive TUI wizard (cli feature)
├── tools/
│ ├── install.sh # One-liner installer
│ └── launchd/ # macOS launchd templates
└── public/
└── rmcp_mux_icon.png # Tray icon
测试
# Run all tests
cargo test
# Run tests without tray feature (for CI/headless)
cargo test --no-default-features
# Linting
cargo clippy --all-targets --all-features
launchd(macOS)
模板位于 tools/launchd/rmcp-mux.sample.plist:
cp tools/launchd/rmcp-mux.sample.plist ~/Library/LaunchAgents/rmcp-mux.plist
# Edit paths: set --config to your mux.toml
launchctl load -w ~/Library/LaunchAgents/rmcp-mux.plist
贡献
看 .ai代理商/ai_GUIDELINES.md 发展指南。
许可证
麻省理工学院