mcpField
P
puzzlebox

puzzlebox

本地服务
github.com/cliffhallAI 与智能体3261 周前更新

关于 puzzlebox

puzzlebox 是一个 MCP 服务,将有限状态机作为动态资源托管,供多个客户端订阅,状态变化时推送更新。它面向需要协调多个 Agent 完成长周期任务的团队,使流程本身由状态机约束。项目目前仍在开发中。

主要功能

  1. 01将状态机实例作为动态资源托管
  2. 02客户端可订阅资源并接收状态变更通知
  3. 03获取状态快照,包括当前状态和可用动作
  4. 04通过动作触发状态转换,服务端校验动作合法性
  5. 05支持 SSE 和 Streamable HTTP 传输及多客户端连接

适用场景

  1. 01协调多个 Agent 按项目阶段推进长周期任务
  2. 02让多个客户端实时监控同一状态机的进展
  3. 03在无法订阅资源的客户端中通过轮询工具跟踪状态变化

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露状态机资源、订阅更新以及用于创建 puzzle、查询快照和执行动作的工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

puzzlebox

puzzlebox

使用状态机协调 Agent

一个MCP 服务,将有限状态机托管为动态资源。客户端可以订阅这些资源,并在其状态发生变化时收到更新。

功能路线图与状态

项目正在开发中。大部分工作已完成,还有少数事项待处理。
  • 工具代码的单元测试
  • MCP 服务的集成测试(包括 SSE 和 StreamableHttp)
  • SSE 传输
  • StreamableHttp 传输
  • 支持多个客户端同时连接(两种传输方式均支持)
  • 将谜题(状态机)创建为动态资源
  • 订阅谜题
  • 在谜题发生变化时接收更新通知
  • 获取谜题快照(当前状态和可用操作)
  • 通过对谜题执行操作来改变其状态
  • 根据谜题状态创建资源(供 Agent 和守卫提示词使用)
  • 创建转换守卫提示词(使用按状态划分的资源)
  • 通过采样执行转换守卫
  • 命令行 REPL
  • 通过 REPL 演示

puzzlebox 要解决什么问题?

协作和协调彼此相关,但解决的是不同的问题。协作适用于难度不低但相对简单的任务。为了应对长期工作,puzzlebox 致力于解决协调问题。
团队需要协调

将多个 Agent 集结起来实现一个大目标,远不只是把请求拆解成任务、分配给可用的 Agent,并让它们协作那么简单。

正如少数 Agent 可以协作完成一个小型项目,多个具备流程意识的 Agent 团队也需要在不同项目阶段中开展工作,以应对长期工作。

以企业级软件开发流程为例:

  • 一个大型软件项目通常会经历多个步骤,偶尔还会回退,从构思、设计、构建、测试、文档编写、营销到投产。

  • 随着项目推进,不同团队会专注于不同方面;他们会参考以往的进展,并着眼于不断变化的目标,根据吸取的经验不断完善目标。

  • 即使在一个阶段内,团队也可能像敏捷冲刺一样循环经历自己的各个阶段。团队为冲刺确定一定范围的工作,各自完成负责的部分,并在冲刺结束时决定下一步处理什么。团队需要接受,每个冲刺都可能改变未来开发的方向。这些循环也可以表示为谜题。

借助 puzzlebox,Agent 团队的成员可以具备流程意识,而流程本身不会受到幻觉影响。

场景:团队交接工作

三个 Agent 正在工作。他们共享的谜题当前处于“Specification”(规范)状态。

  • Agent 1 正在定义领域语言。
  • Agent 2 正在确定项目范围。
  • Agent 3 正在编写规范文档。
  • 这些 Agent 协作完成最终的规范文档。
  • 规范完成后,Agent 3 会发起到“Design”(设计)状态的转换。
    • 首先,由退出守卫(即 LLM 采样)检查规范是否完整。
      • 如果发现问题,则取消状态转换,团队继续工作。
      • 如果检查通过,则状态变为“Design”。
        • “Specification”团队的 Agent 正在监控谜题,此时应该结束工作。
          • 它们漫长而昂贵的上下文已提炼进规范中。
          • “Design”团队从这里接手,使用规范作为资源,并以全新且针对各自角色的上下文开展工作。

什么是谜题?

谜题就是有限状态机。说、写、想起来都更简单。 ### 一个可供操作的有状态事物 想象一下 Rubik's Cube 魔方。它有 43 quintillion 种状态,要在这些状态之间转换,需要通过旋转机制中相交的平面来操作它。
谜题的属性
  • 有限数量的离散状态,例如“系列概念与基调”、“世界构建”、“情节弧线规划”、“剧集规划”、“情节线融合”、“剧集大纲”、“剧本写作”等。
  • 每个状态可以有任意数量的操作(包括 0 个),这些操作会触发转换到另一个状态。
  • 存在一个初始状态。
  • 存在一个当前状态;对谜题执行操作后,当前状态可能会发生变化。
  • 转换可以通过状态退出和进入守卫取消,例如,通过客户端采样请求咨询 LLM。
一个简单的示例
{
  "initialState": "LOBBY",
  "states": {
    "LOBBY": {
      "name": "LOBBY",
      "actions": {
        "START_GAME": { "name": "START_GAME", "targetState": "PLAYING" }
      }
    },
    "PLAYING":  {
      "name": "PLAYING",
      "actions": {
        "END_GAME": { "name": "END_GAME", "targetState": "GAME_OVER" }
      }
    },
    "GAME_OVER": {
      "name": "GAME_OVER",
      "actions": {
        "RESTART": { "name": "RESTART", "targetState": "PLAYING" }
      }
    }
  }
}

什么是 puzzlebox?

大多数 MCP 服务与客户端是一对一的关系。Puzzlebox 则有所不同。
多个客户端共享动态资源

Puzzlebox 是一种 MCP 服务实现,具有以下功能:

  • 支持多个客户端连接,这些连接可以创建和监控共享的动态资源。
  • 管理谜题实例
  • 提供以下工具:
    • 添加谜题
    • 获取给定谜题的状态快照和可用操作
    • 对给定谜题执行操作,以触发状态转换
  • 将已注册的谜题作为资源公开
    • 客户端可以使用 Puzzle Snapshot 资源模板,通过 ID 获取资源
    • 资源 URI 为 puzzlebox:/puzzle/{puzzleId}
    • 客户端可以订阅或取消订阅单个资源 URI
工作原理
  1. 客户端连接到 puzzlebox SSE 服务。
  2. 客户端向服务注册谜题。
  3. 客户端可以订阅指定谜题,以便在其状态发生变化时接收更新。
  4. 客户端对谜题执行操作,这些操作可能会改变其状态和可用操作。
  5. puzzlebox 服务会确保任何尝试的操作对于给定谜题的当前状态都是有效的。
  6. 如果操作有效,则会启动向目标状态的转换。
  7. 转换过程中,可选的退出和进入守卫可能会向客户端发送采样请求;请求结果可能导致转换取消(可将其视为利益相关者进行的验收测试)。
  8. 如果守卫检查通过,状态转换便会完成。
  9. 客户端收到资源更新通知后,可以读取资源,也可以使用 get_puzzle_snapshot 工具获取当前状态和可用操作。
  10. 客户端根据新状态更新其 UI。

MCP 工具

这些函数会提供给 Agent,用于管理谜题。
⚙️ add_puzzle
添加一个新的谜题实例(有限状态机)。
  • **输入:**无
  • **返回:**包含布尔值 success 和 puzzleId 的 JSON 对象
⚙️ get_puzzle_snapshot
获取谜题快照(其当前状态和可用操作)。
  • 输入:puzzleId
  • **返回:**包含 currentState 和 availableActions 数组的 JSON 对象
  • **注意:**不支持资源订阅的 MCP 客户端可以轮询此工具,以监测状态变化。
⚙️ perform_action_on_puzzle
对谜题执行操作(尝试进行状态转换)。
  • 输入:puzzleId 和 actionName
  • **返回:**包含 currentState 和 availableActions 数组的 JSON 对象
⚙️ count_puzzles
获取已注册谜题的数量
  • **输入:**无
  • **返回:**包含已注册谜题当前 count 的 JSON 对象

本地设置

在本地运行需要安装 Node 和 npm。然后按照以下步骤操作……
安装依赖项
  • cd /path/to/puzzlebox/
  • npm install
构建
  • npm run build
  • 在 /dist/index.js 构建 MCP 服务运行时
启动
  • npm run start
  • 在端口 :3001 上启动基于 SSE 的 MCP 服务,端点为 /sse
  • 必须先启动,然后才能运行 Inspector
Inspector
格式化
  • npm run format
  • 使用 prettier 格式化代码
类型检查
  • npm run typecheck
  • 使用带参数的 tsc 检查并报告类型问题
代码检查
  • npm run lint
  • 使用 eslint 检查并报告语法问题,不会修改代码
修复代码问题
  • npm run lint:fix
  • 使用 eslint 检查并修复语法问题
测试
  • npm run test
  • 运行单元测试

截图

这些截图展示了该服务实现的各种 MCP 工具和资源。

服务器使用官方参考客户端——MCP Inspector 进行了测试。

0 - 列出工具

0. list_tools

1 - 添加拼图

1. add_puzzle

2 - 获取拼图快照(初始状态)

2. get_puzzle_snapshot

3 - 对拼图执行操作

3. perform_action_on_puzzle

4 - 获取拼图快照(新状态)

4. get_puzzle_snapshot

5 - 对拼图执行操作

5. perform_action_on_puzzle

6 - 获取拼图快照(另一种新状态)

6. get_puzzle_snapshot

7 - 列出资源

7. list resources

8 - 资源模板

8. resource_template

9 - 未订阅的资源

9. unsubscribed resource

10 - 已订阅的资源

10. unsubscribed resource

11 - 资源更新通知

11. subscribed resource updated

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。