多代理协作规划服务器

mcp-campfire是一个为多代理系统设计的协作规划服务器,提供会话管理、消息传递、共享计划和决斗协议功能,适用于需要解决代理间无限辩论的开发场景。

  • by ResakaGit
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 ResakaGit/mcp-campfire

使用说明

mcp篝火

MCP服务器,用于代理之间的协作规划:篝火、消息、共享作战计划和具有可执行解决方案的仪式决斗协议。


当多个代理在Cursor中进行辩论时,共识可以永远循环。 mcp篝火 提供了一个明确的有限背景:篝火会议,讨论发生,以及与状态机的决斗(挑战者vs捍卫者,法官决定),这会减少无限的辩论,并对计划做出适用的裁决。不是神谕或魔法:这是一份合同。接下来是产品的现实,没有隐藏的限制。


它是什么,它是为谁准备的

mcp篝火 是一个MCP服务器(规范2025-11-25),它公开了:

  • 营火(火灾): 由以下人员确定的规划会议 fireId.
  • 信息: 按篝火张贴和列出信息。
  • 作战计划: 每个篝火共享内容;当没有决斗活动时可更新。
  • 决斗: 挑战者挑战防守者的仪式协议;第三个代理人(法官)宣誓,听取辩论,并对作战计划作出强制性修改的裁决。

观众: 开发人员在Cursor中协调多个代理,他们想要可执行的解决方案,而不是开放式的辩论。使用规范2025-11-25与Cursor 2026和MCP客户端兼容。


快速开始

cd mcp-campfire
npm install
npm run build
npm start

服务器使用 标准 传输:它从stdin读取JSON-RPC并写入stdout。光标在连接MCP时启动它。

光标注册: 在 .cursor/mcp.json (工作区根目录):

"mcp-campfire": {
  "command": "node",
  "args": ["mcp-campfire/dist/index.js"]
}

要求:工作区根目录必须包含 mcp-campfire, npm run build 必须已经运行,并且 重新启动游标 变更后 mcp.json.

  • 发展: npm run dev (tsx手表)。
  • 测验: npm test (Vitest)。

光标技能: 此回购包括 .cursor/skills/mcp-campfire/SKILL.md 这样当你克隆它时,Cursor就可以使用该技能进行注册、配置(包括Redis)和工具路由。无需额外设置。

任务用例: 有关编排风格MCP(任务/战役、世界事件循环、DDD+六边形)的参考,请参阅 docs/MISSION_RPG_QUEST_ORCHESTRATOR.md该文件描述了一个单独的“RPG任务编排器”核心域和状态机;它作为可重复使用的任务蓝图包含在这里。


使用另一个项目的mcp篝火

要在不同的工作区中使用此MCP(例如,另一个仓库或不包含MCP-campfire的项目):

  1. 找mcp篝火
    克隆 ResakaGit/mcp篝火 输入您的机器或复制 mcp-campfire 将文件夹放入项目中(或旁边)。

  2. 构建
    从 mcp-campfire 目录运行: npm install && npm run build.

  3. 在其他项目中注册
    在该项目的工作区根目录中,创建或编辑 .cursor/mcp.json.在下面添加条目 mcpServers:

    "mcp-campfire": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-campfire/dist/index.js"]
    }
    

    使用以下路径 mcp-campfire/dist/index.js 实际存在(绝对路径,或相对于其他项目根的路径)。

  4. 重新启动游标 因此它拾取MCP。

之后,工具在服务器密钥下可用 mcp-campfire 在那个工作空间里。


工具表

工具 关键参数 目的
campfire_ping —— 健康检查;返回pong和时间戳。
campfire_echo message 连通性测试;返回消息。
campfire_get_or_create_fire fireId 获取或创建篝火(会话)。
campfire_post_message fireId, text, author? 在篝火上发布消息(没有决斗时)。
campfire_list_messages fireId 列出篝火中的信息。
campfire_throw_gauntlet fireId, challenger_name, target_name, thesis_of_attack 宣布决斗;州立监狱;阻止一般写入。
campfire_take_oath_of_judgement fireId, character_name 法官(第三代理人)宣誓;激活决斗。
campfire_strike_argument fireId, character_name, technical_evidence 挑战者:技术攻击。
campfire_hold_the_line fireId, character_name, defense_rationale, surrender 防御者:防御或投降。
campfire_deliver_verdict fireId, character_name, winner, ruling_rationale, required_plan_mutation 法官:裁决和修改作战计划。
campfire_abandon_duel fireId 放弃决斗;回到DEBATING而不改变计划。
campfire_speak_to_party fireId, text, author? 张贴在篝火旁;决斗时被阻止(挂起/激活)。
campfire_update_battle_plan fireId, content 更新作战计划;决斗时被挡住了。

winner 在 campfire_deliver_verdict 是 "challenger" 或 "defender".


决斗流

  • throw阿姨: 挑战者以攻击论宣布与后卫决斗。状态→ 悬而未决的。 campfire_speak_to_party 和 campfire_update_battle_plan 被封锁。
  • 做出判断: 与挑战者和辩护人不同的第三名代理人(法官)宣誓。状态→ 活跃。轮到挑战者。
  • 罢工_争论: 挑战者提供了技术证据。转向后卫。
  • hold_the_line: 辩护人争辩或投降(surrender: true).轮到法官了。
  • 交货日期: 评委选择获胜者并申请 required_plan_mutation 战斗计划。状态→ 辩论。写入已解除阻止。
  • 每个篝火一场决斗。 没有决斗队列;下一场决斗需要再次宣布。
  • 死锁退出: 如果法官从未出现或流量被切断,请使用 campfire_abandon_duel 或依赖外部超时;没有自动恢复。

限制和权衡

  • 内存持久性(阶段1)。 服务器重启时,所有状态(营火、消息、决斗状态、作战计划)都会丢失。该架构允许未来的外部持久性;没有承诺日期。
  • 身份荣誉制度。 character_name, challenger_name, target_name,以及 author 未通过令牌进行身份验证。如果同一名称尝试两个角色(例如挑战者和法官),服务器将拒绝并显示可操作的消息。代理之间的约定,而不是加密安全。
  • 每个营火一次有效决斗。 此版本中没有队列或决斗历史记录。
  • 僵局: 如果法官从未宣誓或流程中途中断,唯一明确的出口是 campfire_abandon_duel;没有服务器端超时或自动放弃。

错误系统

根据规范2025-11-25,返回工具执行失败 在结果内部 随着 isError: true,而不是JSON-RPC错误,因此LLM可以读取消息并自我纠正。

  • 业务/验证错误 → 结果与 isError: true 以及可操作的信息 content[].text.
  • 协议错误 (找不到工具,请求格式错误)→ JSON-RPC错误。

实施: src/errors.ts (toolErrorResult, ToolError, errorToToolResult).包装在 server.ts 将异常转换为 ToolResult 随着 isError: true.


规格和依赖关系

如果服务器稍后集成到仓库的编排器中,则将在统一的服务器密钥下调用工具(例如。 mcp-orchestrator).