月亮桥
你的MCP客户刚刚组建了一个团队。
从Claude Code、Cursor或任何MCP客户端生成AI编码代理。以成本的一小部分并行运行10种方法。
uvx moonbridge快速开始
- 安装至少一个受支持的CLI:
| 适配器 | 安装 | 身份验证 | |
|---|---|---|---|
基米(default) uv tool install --python 3.13 kimi-cli | kimi login | ||
| 食品法典委员会 | npm install -g @openai/codex | 设置 OPENAI_API_KEY | |
| OpenCode | `curl -fsSL https://opencode.ai/install \ | bash` | opencode auth login |
| Gemini CLI | npm install -g @google/gemini-cli | 快跑 gemini 登录流程或设置 GEMINI_API_KEY |
- 添加到MCP配置 (
~/.mcp.json):
{
"mcpServers": {
"moonbridge": {
"type": "stdio",
"command": "uvx",
"args": ["moonbridge"]
}
}
}- 使用它。 您的MCP客户端现在具有
spawn_agent和spawn_agents_parallel工具。
安全警告(请先阅读)
Moonbridge执行代理CLIs(Kimi/Codex/OpenCode/GGemini)。恶意或粗心的提示可能会导致 代理运行shell命令、读取可访问的文件或通过网络调用泄露数据。
Moonbridge增加了护栏(MOONBRIDGE_ALLOWED_DIRS,环境同种异体,可选 MOONBRIDGE_SANDBOX=1),但这些并不等同于操作系统级别的遏制。
对于不受信任的提示或共享环境,请在容器或VM中运行Moonbridge 最小权限文件系统和网络访问。
更新中
Moonbridge在启动时检查更新(缓存24小时)。要手动更新,请执行以下操作:
# If using uvx (recommended)
uvx moonbridge --refresh
# If installed as a tool
uv tool upgrade moonbridge禁用CI/CD自动化的更新检查:
export MOONBRIDGE_SKIP_UPDATE_CHECK=1何时使用Moonbridge
| 任务 | 为什么选择Moonbridge |
|---|---|
| 并行探索 | 同时运行10种方法,选择最佳方法 |
| 前端/UI工作 | Kimi擅长视觉编码和组件设计 |
| 测试和文档 | 高容量任务的成本效益 |
| 重构 | 在一个请求中尝试多种策略 |
最适合: 受益于并行执行或批量的任务。
原理
连接流程
- MCP客户端(Claude Code、Cursor等)通过stdio连接到Moonbridge
- 客户端通过以下方式发现可用工具
list_tools - 客户电话
spawn_agent或spawn_agents_parallel
产卵过程
- Moonbridge验证提示和工作目录
- 决定使用哪个适配器(Kimi、Codex、OpenCode、Gemini)
- 适配器使用适当的标志构建CLI命令
- 在单独的流程组中生成子流程
- 捕获stdout/stderr,强制超时
- 返回结构化JSON结果
并行执行
spawn_agents_parallel通过以下方式同时运行多达10个代理asyncio.gather- 每个代理都是独立的(单独的过程,单独的输出)
- 当最后一个代理完成(或超时)时,所有结果一起返回
MCP Client → stdio → Moonbridge → adapter → CLI subprocess
→ CLI subprocess (parallel)
→ CLI subprocess (parallel)工具
| 工具 | 用例 |
|---|---|
spawn_agent | 单一任务:“为auth.ts编写测试” |
spawn_agents_parallel | 广泛:10名特工,10种方法,挑选最好的 |
check_status | 验证适配器CLI是否已安装并经过身份验证 |
list_adapters | 显示可用适配器及其状态 |
list_models | 显示适配器的已知/动态模型选项 |
示例:平行探索
{
"agents": [
{"prompt": "Refactor to React hooks"},
{"prompt": "Refactor to Zustand"},
{"prompt": "Refactor to Redux Toolkit"}
]
}三种方法。一个请求。你选择赢家。
工具参数
spawn_agent
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
prompt | string | 是 | 代理的任务描述 |
adapter | string | 否 | 要使用的后端: kimi, codex, opencode, gemini (默认从 MOONBRIDGE_ADAPTER,回退 kimi) |
model | string | 否 | 模型覆盖(例如。, gpt-5.2-codex, openrouter/minimax/minimax-m2.5, gemini-2.5-pro).对于 opencode,模型使用 provider/model. |
thinking | boolean | 否 | 启用推理模式(仅限Kimi) |
reasoning_effort | string | 否 | 预算推理: low, medium, high, xhigh (仅限食品法典委员会,默认 xhigh) |
timeout_seconds | integer | 否 | 覆盖默认超时(30-3600) |
spawn_agents_parallel
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
agents | array | Yes | 代理配置列表(最多10个) |
agents[].prompt | string | 是 | 此代理的任务 |
agents[].adapter | string | 否 | 此代理的后端 |
agents[].model | string | 否 | 此代理的模型覆盖(codex 违约: gpt-5.3-codex; opencode 用途 provider/model; gemini 违约: gemini-2.5-pro) |
agents[].thinking | boolean | 否 | 启用推理(仅限Kimi) |
agents[].reasoning_effort | string | 否 | 推理预算(仅Codex,默认值 xhigh) |
agents[].timeout_seconds | integer | 否 | 此代理超时 |
check_status
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
adapter | string | 否 | 要显式检查的适配器。默认为 MOONBRIDGE_ADAPTER 当省略时。 |
list_models
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
adapter | string | 否 | 要检查的适配器。默认为 MOONBRIDGE_ADAPTER 当省略时。 |
provider | string | 否 | OpenCode模型目录的提供者过滤器(例如。, openrouter). |
refresh | boolean | 否 | 刷新支持动态发现的适配器的模型目录。 |
响应格式
所有工具都返回带有以下字段的JSON:
| 字段 | 类型 | 描述 | |
|---|---|---|---|
status | 字符串 | success, error, timeout, auth_error,或 cancelled | |
output | string | 来自代理的stdout | |
stderr | string | null | stderr(如果有) |
returncode | int | 进程退出代码(-1表示超时/错误) | |
duration_ms | int | 执行时间(毫秒) | |
agent_index | int | 代理索引(0表示单代理,0-N表示并行代理) | |
message | 弦? | 人类可读的错误上下文(如适用) | |
raw | 对象? | 可选的结构化元数据(例如沙盒差异) |
当输出太大时,Moonbridge会截断它并添加 raw.output_limit 元数据 原始尺寸。
配置
环境变量
| 变量 | 描述 |
|---|---|
MOONBRIDGE_ADAPTER | 默认适配器(默认: kimi) |
MOONBRIDGE_TIMEOUT | 默认超时时间(秒)(30-3600) |
MOONBRIDGE_KIMI_TIMEOUT | Kimi特定的默认超时 |
MOONBRIDGE_CODEX_TIMEOUT | 特定于Codex的默认超时 |
MOONBRIDGE_OPENCODE_TIMEOUT | OpenCode特定的默认超时 |
MOONBRIDGE_GEMINI_TIMEOUT | Gemini特定的默认超时 |
MOONBRIDGE_MODEL | 全局默认模型覆盖 |
MOONBRIDGE_KIMI_MODEL | Kimi特定车型超控 |
MOONBRIDGE_CODEX_MODEL | Codex特定模型覆盖 |
MOONBRIDGE_OPENCODE_MODEL | OpenCode特定的模型覆盖 |
MOONBRIDGE_GEMINI_MODEL | Gemini特定模型超控 |
MOONBRIDGE_MAX_AGENTS | 最大并行代理数 |
MOONBRIDGE_MAX_OUTPUT_CHARS | 每个代理返回的最大字符数 stdout+stderr (默认值为120000;超时尾部为每个流) |
MOONBRIDGE_ALLOWED_DIRS | 冒号分隔的工作目录列表 |
MOONBRIDGE_STRICT | 设置为 1 要求 ALLOWED_DIRS (如果未设置,则退出) |
MOONBRIDGE_SANDBOX | 设置为 1 在cwd的临时副本中运行代理 |
MOONBRIDGE_SANDBOX_KEEP | 设置为 1 保存沙盒目录以供检查 |
MOONBRIDGE_SANDBOX_MAX_DIFF | 最大差异大小(以字节为单位)(默认值500000) |
MOONBRIDGE_SANDBOX_MAX_COPY | 最大沙盒副本大小(以字节为单位)(默认500MB) |
MOONBRIDGE_LOG_LEVEL | 设置为 DEBUG 用于详细日志记录 |
安全
Moonbridge继承了所选适配器CLI的安全模型。Kimi、Codex、OpenCode和Gemini是 代理CLIs;提示可以触发命令执行、文件访问和网络活动 在流程权限范围内。
1.威胁模型(包括快速注入)
如果攻击者可以影响通过MCP发送的提示输入,他们可以尝试 代理人:
- 读取敏感文件(例如
~/.ssh或.env), - 运行破坏性shell命令,
- 通过网络泄露数据。
Moonbridge不会检查即时意图。将提示输入视为可能不受信任。
2.目录限制(MOONBRIDGE_ALLOWED_DIRS)
默认值:代理可以在任何目录中操作。集 MOONBRIDGE_ALLOWED_DIRS 限制:冒号分隔允许的路径。Symlinks已通过以下方式解决 os.path.realpath 在检查之前。严格模式(MOONBRIDGE_STRICT=1)如果未配置有效的允许目录,则在启动时退出。
export MOONBRIDGE_ALLOWED_DIRS="/home/user/projects:/home/user/work"
export MOONBRIDGE_STRICT=1 # require restrictions3.环境消毒
只有白名单中的环境变量才会传递给生成的代理。每个适配器都定义了自己的满列表(PATH, HOME,加上适配器特定的类似功能 OPENAI_API_KEY 食品法典委员会)。默认情况下,您的shell环境(机密、令牌、SSH密钥)不会被继承。
4.输入验证
验证模型参数以防止标志注入(值以 - 被拒绝)。提示最多为100000个字符,不能为空。
5.过程隔离和沙盒模式
代理在单独的进程组中运行(start_new_session=True).出口处的孤儿清理。沙盒模式可用(MOONBRIDGE_SANDBOX=1)用于运行时复制隔离。
不是操作系统级沙盒。 代理仍然可以读取或写入他们可以访问的任意主机文件。
6.强化部署检查表
- 集
MOONBRIDGE_ALLOWED_DIRS尽可能小的集合。 - 启用
MOONBRIDGE_STRICT=1因此,缺失的限制无法关闭。 - 启用
MOONBRIDGE_SANDBOX=1以避免直接的工作空间突变。 - 在容器/VM中运行Moonbridge以实现强隔离。
- 在没有额外身份验证控制的情况下,不要将Moonbridge暴露给不受信任的客户端。
故障排除
“未找到CLI”
为所选适配器安装CLI:
# Kimi
uv tool install --python 3.13 kimi-cli
which kimi
# Codex
npm install -g @openai/codex
which codex
# OpenCode
curl -fsSL https://opencode.ai/install | bash
which opencode
# Gemini
npm install -g @google/gemini-cli
which gemini“auth_error”响应
使用您选择的CLI进行身份验证:
# Kimi
kimi login
# Codex
export OPENAI_API_KEY=sk-...
# OpenCode
opencode auth login
# Gemini
gemini # complete login flow, or set GEMINI_API_KEY超时错误
适配器有合理的默认值:Codex=1800s,Kimi=600s,OpenCode=1200s,Gemini=1200s。
对于超长任务,显式重写:
{"prompt": "...", "timeout_seconds": 3600}或者通过环境设置每个适配器的默认值:
export MOONBRIDGE_CODEX_TIMEOUT=2400 # 40 minutes
export MOONBRIDGE_KIMI_TIMEOUT=900 # 15 minutes
export MOONBRIDGE_OPENCODE_TIMEOUT=1200 # 20 minutes
export MOONBRIDGE_GEMINI_TIMEOUT=1200 # 20 minutes超时最佳实践
| 任务类型 | 推荐 |
|---|---|
| 快速查询,状态 | 60-180s |
| 简单编辑 | 300-600s |
| 功能实现 | 1200-1800s |
| 大型重构 | 1800-3600 |
优先级解析:显式参数>适配器环境>适配器默认值>全局环境>600秒回退
“MOONBRIDGE_ALLOWED_DIRS未设置”警告
默认情况下,如果没有配置目录限制,Moonbridge会在启动时发出警告。这是当地发展的预期。对于共享/生产环境,设置允许的目录:
export MOONBRIDGE_ALLOWED_DIRS="/path/to/project:/another/path"沙盒模式(运行时复制)
启用沙盒模式以在工作目录的临时副本中运行代理:
export MOONBRIDGE_SANDBOX=1启用时:
- 代理在临时副本中运行
cwd. - 默认情况下,主机文件保持不变。
- 包含一个统一的diff+摘要
raw.sandbox.
可选:
export MOONBRIDGE_SANDBOX_KEEP=1 # keep temp dir
export MOONBRIDGE_SANDBOX_MAX_DIFF=200000
export MOONBRIDGE_SANDBOX_MAX_COPY=300000000限制:这不是操作系统级别的隔离。如果代理选择的话,它们仍然可以读/写任意主机路径。使用容器/VM进行强隔离。
要执行限制(退出而不是警告):
export MOONBRIDGE_STRICT=1工作目录权限被拒绝
验证目录是否在您的列表中:
export MOONBRIDGE_ALLOWED_DIRS="/path/to/project:/another/path"调试日志
启用详细日志记录:
export MOONBRIDGE_LOG_LEVEL=DEBUG平台支持
仅限macOS和Linux。不支持Windows。
许可证
MIT。看 LICENSE.

