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 外零运行时依赖。
Related MCP server: guru-pk-mcp
安装
插件清单为仓库根目录的 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
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