moamcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@moamcpstart a multi-agent debate on security audit for PR #42"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
moamcp
MOA(Multi-Agent Orchestration,多代理辩论)MCP 插件,为 Kimi Code CLI 与其社区版 omkc 提供结构化的多代理辩论能力:多个子代理以轮转辩论的方式交叉审查同一目标(安全审计、设计评审、高风险改动的正确性核验),分歧与结论全程可视。
邮箱式辩论枢纽:辩手通过 MCP 工具收发轮次(
moa_wait_turn长轮询 /moa_submit_turn提交),状态机保证严格的轮转顺序,辩手之间互不串供。辩论卡片:同进程拉起一个本地 HTTP Bus(SSE + 静态页面),
moa_init返回card_url,浏览器打开即可实时观看进度条(共识 → Reference → 辩论 R N/M → 聚合 → 结论)、preset/配置快照、辩手阵容、逐轮 transcript 与裁决 + findings;探测到 omkc-status 时还会多出 agent 状态墙与工具调用日志两个可选面板(见下)。不带task_id打开是任务选择页(每 3s 静默刷新任务列表,无任务时不闪屏)。三层归档:
moa_complete落盘probe.json(辩手档案)/events.jsonl(全量事件流)/result.json(裁决),事后可完整回放。多实例共存:实例注册表 + 端口退让 + Bus 复用,同机开多个 CLI 会话不会端口打架,也不会留下孤儿 Bus。
工作原理
宿主 CLI(kimi / omkc)
│ spawn(stdio,MCP 协议)
▼
moamcp 进程
├── MCP 工具(moa_init / moa_start_debate / moa_wait_turn /
│ moa_submit_turn / moa_complete / moa_status)
│ ↕ 驱动
│ 辩论状态机(轮转、轮次、超时上限、归档)
│
├── own 模式:监听 127.0.0.1:39813(Bus)
│ ├── GET / 辩论卡片(SSE 实时刷新)
│ ├── GET /tasks 活跃任务列表
│ ├── GET /subscribe SSE 事件流(迟到者自动重放)
│ ├── GET /archive 三层归档只读访问
│ └── POST /publish 事件扇入(复用模式转发用)
│
└── reuse 模式:端口已被另一个 moamcp 占用时不再监听,
域事件经 POST /publish 尽力转发给占用端口的 Bus,
card_url 指向该 Bus —— 卡片上照样看得到本进程的任务。
同时周期探活宿主 Bus,宿主死了就接管端口升为 own 模式,
不会留下对着死端口转发的"僵尸"实例。辩手由宿主 CLI 的子代理充当:orchestrator 发起辩论并并行派发辩手,每个辩手在自己的上下文里循环 wait_turn → 发言 → submit_turn,直到辩论结束。除 @modelcontextprotocol/sdk 外零运行时依赖。
安装
插件清单为仓库根目录的 kimi.plugin.json(声明 stdio MCP server:node ./dist/server.js;toolTimeoutMs: 1800000 是因为 moa_wait_turn 长轮询)。dist/server.js 是已提交的单文件 bundle(esbuild 打包,自包含),从 GitHub 直接安装无需任何构建步骤。
omkc(社区版,推荐)
/plugins install https://github.com/Yorha9e/moamcp
/reload或钉住分支 / tag / commit:
/plugins install https://github.com/Yorha9e/moamcp/tree/main官方 kimi-code
命令相同,安装方式完全一致:
/plugins install https://github.com/Yorha9e/moamcp
/reload无 release 时 /plugins install <repo-url> 回落安装默认分支;第三方来源会先弹出信任确认。安装后可在 /plugins 面板(M 键)管理 MCP server 的启用/禁用。
本地安装(开发 / 离线)
git clone https://github.com/Yorha9e/moamcp.git
# 在 kimi / omkc 中:
/plugins install /绝对路径/moamcp
/reload本地安装会被拷贝到 $KIMI_CODE_HOME/plugins/managed/moamcp/,改动源码后需重新安装才生效。
注意:官方 kimi 与 omkc 的插件系统相同,但能力不完全相同,见下节。
能力降级矩阵
moamcp 本身(MCP 工具 + Bus + 卡片 + 归档)在两个版本上完全一致;差异全部来自宿主 CLI 的子代理体系:
能力 | 官方 kimi-code | omkc(社区版) |
MCP 工具全集( | ✅ | ✅ |
辩论 Bus、浏览器卡片、SSE、三层归档 | ✅ | ✅ |
辩手模型 | 继承主代理模型(单模型 MOA) |
|
角色化 profile(orchestrator / critic / synthesizer) | 需手动把本仓库 | 内置,开箱即用 |
桌面悬浮卡片 moa-card(实时辩论进度) | ❌(仅浏览器卡片) | ✅ 交互启动时自动拉起( |
| ❌ | ✅ |
即:官方 kimi 上可以完整跑通 MOA 辩论流程,但所有辩手共用主代理的模型(单模型多视角);omkc 上才是完整形态——不同辩手由不同模型扮演(如强模型正方 / 强模型反方 / 快模型魔鬼代言人),配合角色化 profile 与桌面卡片。
官方版本备注:截至 0.29.0,上游官方仓库尚不含子代理模型绑定机制(相关 PR #1928 / #2034 仍在 open 状态)。因此官方版本目前只支持单模型 MOA;多模型槽位绑定是 omkc 社区版独有的能力。
使用
1. 配置命名槽位(仅 omkc)
在工作区 .kimi-code/local.toml 中声明槽位(绑定是用户配置,spawn 时机械生效):
[subagent-slot.debate-strong]
model = "kimi-code/kimi-for-coding"
thinking_effort = "high"
[subagent-slot.debate-fast]
model = "kimi-code/kimi-for-coding"
thinking_effort = "low"omkc 中也可以用 /subagent-model set slot debate-strong 交互式配置。单模型场景(官方默认)可跳过此步,agents 直接写字符串数组。
2. 发起辩论(orchestrator 视角)
// moa_init
{
"task_id": "auth-review-1",
"preset_config": {
"agents": [
{ "id": "debater-a", "binding_slot": "debate-strong" },
{ "id": "debater-b", "binding_slot": "debate-strong" },
{ "id": "debater-c", "binding_slot": "debate-fast" }
],
"debate": { "rounds": 2 }
}
}返回 {ok, card_url, agents}:card_url 是辩论卡片地址(浏览器打开实时观看),agents 是派发映射 [{id, binding_slot?}]——派发每个辩手子代理时按其中的 binding_slot 传参。简单场景的等价写法:"agents": ["debater-a", "debater-b", "debater-c"]。
随后:
moa_start_debate(task_id, reference_results)—— 注入参考材料(验证目标、范围、各辩手立场、每轮要求)并启动状态机。并行派发辩手子代理(
run_in_background=true),每个辩手循环:moa_wait_turn→ 阅读full_context中已有发言 →moa_submit_turn提交本轮论点。非首轮必须先回应对方上一轮。wait_turn返回{status:"debate_complete", transcript}时辩论结束。moa_complete(task_id)—— 写三层归档到<MOAMCP_LOGS_DIR>/{task_id}/,关闭任务,唤醒所有等待者。
提交协议(SUBMISSION PROTOCOL):
moa_wait_turn每次返回回合时,prompt 都已预注入提交铁律——发言必须且只能通过moa_submit_turn工具提交,禁止把发言内容当纯文本输出后直接 end_turn(那会让辩论永久卡死);提交后若辩论未结束继续moa_wait_turn;收到not_your_turn说明该回合已被处理,不要重试提交、回到等待。铁律随回合 prompt 下发(不仅靠派发 brief),是辩手"写完发言忘记调用提交工具"问题的结构性修复。
全体签字提前闭合(UNANIMOUS SIGNOFF):实战中辩论经常在排定轮数之前就达成共识,辩手会自发提议"签字确认轮"再全体签字收官——状态机把这个自发模式固化成机制。辩手在
moa_submit_turn传signoff: true(content写签字陈词 / 最终立场)即投出一张"提前闭合"票:该回合照常进入 transcript(事件与归档记录带signoff: true,卡片上以 ✍ 徽章标记),后续辩手仍按原轮转顺序拿回合,wait_turn的 prompt 会实时提示当前N/M签字数并说明签字规则。全体辩手都签字 → 辩论立即提前闭合(debate_complete带early: true, reason: "unanimous_signoff",moa_complete的result.json额外带early/reason/signoffs,卡片结论区显示"提前闭合(全体签字)"),无需跑满排定轮次。异议即清零:任何辩手提交一次普通发言(不传signoff)即视为异议,已积累的签字全部清空(signoff_reset事件),辩论按原轮次继续。签字协议随每个回合 prompt 下发(紧跟 SUBMISSION PROTOCOL)。orchestrator 的moa_complete强制收尾不受影响。
MCP 工具一览
工具 | 调用方 | 作用 |
| orchestrator | 初始化任务(辩手列表 + 辩论参数),返回 |
| orchestrator | 注入参考结果,启动状态机 |
| 辩手 | 长轮询至轮到自己 / 辩论结束 / 安全上限(默认 25 分钟, |
| 辩手 | 提交本轮发言,校验轮转顺序(乱序返回 |
| orchestrator | 写三层归档并关闭任务 |
| 任意 | Bus 端口、模式(own/reuse)、活跃任务、进程信息 |
agents/ 目录附带三个配套角色 profile(orchestrator.md / critic.md / synthesizer.md),含完整的邮箱辩论 playbook 与辩手派发模板。omkc 已内置同名角色;官方版本可将其复制到 agent 目录(~/.kimi-code/agents/ 用户级,或项目 .kimi-code/agents/)后使用。
Bus 端点
端点 | 说明 |
| 辩论卡片:进度条、preset/配置快照(含实时 round/speaker)、辩手阵容、实时发言流、裁决 + findings。不带 |
|
|
| SSE 事件流;迟到订阅者自动重放(每任务保留最近 200 帧) |
|
|
|
|
Bus 只绑定 127.0.0.1(环回),不对局域网暴露。
卡片另有两块可选面板——agent 状态墙与工具调用日志,数据来自 omkc-status 状态服务(见伴生项目)。卡片自动探测 http://127.0.0.1:39627/health(500ms 超时):可达则订阅其 SSE /events(首帧为全量 snapshot,可能数百 KB,解析容错;之后是逐 agent 增量帧),每个 agent 一行展示 model、busy/phase、context tokens、最近工具调用(stale 半透明、isError 标红),scan.scanning 时显示"扫描中…";不可达则两面板完全静默隐藏、断线 3 次才退避重探。装插件即可用,omkc-status 只是可选增强而非依赖。
端口规则与实例发现
默认端口 39813,可用
MOAMCP_BUS_PORT覆盖。每个实例在绑定之前先写注册表
<MOAMCP_HOME>/instances/<pid>.json({id, pid, port, started_at, version}),并发启动的同伴在绑定窗口内就能互相看见;写入为原子 rename,无锁。绑定失败(
EADDRINUSE)时查注册表:端口被另一个活的 moamcp 持有(注册表条目 + pid 存活 +
GET /tasks健康探针通过)→ 进入 reuse 模式:本进程不监听,事件尽力转发给对方的 Bus(超时 / 失败只记 warning 丢弃,由对方的 SSE 重放缓冲与共享归档兜底),card_url指向对方端口;条目对应进程已死、或占用者不是 moamcp → 清掉该条目,端口 +1 重试(最多 100 次,耗尽则报错退出,退出前先释放注册表条目)。
宿主死亡接管:进入 reuse 后本进程会看管宿主 Bus(每 10s 探测
GET /tasks,超时 1s,连续 3 次失败判定宿主已死,最坏约 30s 发现),随即走正常启动绑定流程抢回原端口:抢到(绑定成功)→ 升为 own 模式:重写自己的注册表条目(进入复用时删掉的那条)、
card_url改指自己的端口、域事件改由本地 Bus 直接服务。此后再起的实例按既有复用逻辑挂到它下面,无需任何新协调;没抢到(多个 reuse 实例同时判死抢端口)→ 绑定的原子性(
EADDRINUSE)即仲裁:输家经健康探针确认新属主是活的 moamcp 后重新挂到新属主下继续 reuse(若占用者不是 moamcp——比如老尸体刚死端口被无关进程占了——则按既有规则端口 +1)。若赢家在输家第三次探测前就已接管,输家的探测会直接成功、静默留在 reuse 模式——同样是一个属主、零僵尸;判死到接管完成的窗口期(默认 20~30s)内产生的事件仍发往死端口,记 warning 丢弃;状态机在各实例自己的内存里不受影响,接管只切换"事件出口"(转发 → 本地 Bus)。
被杀死的宿主留下的 Windows 孤儿 Bus 因此成为可复用资产,而不是残骸;孤儿 Bus 再被杀死后,挂在它下面的 reuse 实例也会接管而不是僵死。
{cwd}/bus.port在 own 模式下仍会写(兼容旧约定),不再是主要发现通道。
环境变量
变量 | 默认 | 用途 |
|
| 实例注册表根目录( |
|
| 三层归档根目录(所有实例共享,reuse 模式的 |
|
| 期望的 Bus 端口 |
| 25 分钟 |
|
|
| reuse 模式探活宿主 Bus 的间隔 |
|
| 宿主探活请求超时 |
|
| 连续探活失败多少次判定宿主死亡并触发接管 |
伴生项目
oh-my-kimi-code —— Kimi Code 社区 fork(omkc):子代理模型绑定全家桶、内置 MOA 角色 profile、桌面悬浮卡片 moa-card。moamcp 的完整形态依赖它。
omkc-status —— 独立状态服务:只读监听会话持久化文件,对外提供 HTTP
/state与 SSE/events,不依赖 CLI 进程存活。辩论卡片的 agent 状态墙与工具调用日志面板会自动接入它作为可选数据源。(仓库待发布)kimi-copilot —— 桌面悬浮卡片(moa-card widget 的独立演进版本)。(仓库待发布)
开发
npm install
npm run build # tsc 类型检查 + esbuild 打包 → dist/server.js(单文件 bundle,已提交入库)
npm test # vitest:smoke(邮箱流程,含全体签字提前闭合)+ registry + bus(HTTP/SSE)+ reuse(真实多进程,含宿主死亡接管)四套,共 44 例
npm start # node dist/server.jsdist/server.js 作为构建产物提交在仓库中(GitHub 直装插件依赖它);修改 src/ 后请运行 npm run build 并保持 dist/ 同步提交。测试套件会自行重建 dist 再 spawn 真实进程验证复用模式。
License
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Yorha9e/moamcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server