关于 puzzlebox
puzzlebox 是一个 MCP 服务,将有限状态机作为动态资源托管,供多个客户端订阅,状态变化时推送更新。它面向需要协调多个 Agent 完成长周期任务的团队,使流程本身由状态机约束。项目目前仍在开发中。
主要功能
- 01将状态机实例作为动态资源托管
- 02客户端可订阅资源并接收状态变更通知
- 03获取状态快照,包括当前状态和可用动作
- 04通过动作触发状态转换,服务端校验动作合法性
- 05支持 SSE 和 Streamable HTTP 传输及多客户端连接
适用场景
- 01协调多个 Agent 按项目阶段推进长周期任务
- 02让多个客户端实时监控同一状态机的进展
- 03在无法订阅资源的客户端中通过轮询工具跟踪状态变化
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露状态机资源、订阅更新以及用于创建 puzzle、查询快照和执行动作的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
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”团队从这里接手,使用规范作为资源,并以全新且针对各自角色的上下文开展工作。
- “Specification”团队的 Agent 正在监控谜题,此时应该结束工作。
- 首先,由退出守卫(即 LLM 采样)检查规范是否完整。
什么是谜题?
谜题就是有限状态机。说、写、想起来都更简单。
### 一个可供操作的有状态事物 想象一下 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
- 客户端可以使用
工作原理
- 客户端连接到 puzzlebox SSE 服务。
- 客户端向服务注册谜题。
- 客户端可以订阅指定谜题,以便在其状态发生变化时接收更新。
- 客户端对谜题执行操作,这些操作可能会改变其状态和可用操作。
- puzzlebox 服务会确保任何尝试的操作对于给定谜题的当前状态都是有效的。
- 如果操作有效,则会启动向目标状态的转换。
- 转换过程中,可选的退出和进入守卫可能会向客户端发送采样请求;请求结果可能导致转换取消(可将其视为利益相关者进行的验收测试)。
- 如果守卫检查通过,状态转换便会完成。
- 客户端收到资源更新通知后,可以读取资源,也可以使用
get_puzzle_snapshot工具获取当前状态和可用操作。 - 客户端根据新状态更新其 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 inspector- 运行 Model Context Protocol Inspector
- Inspector 界面将在此地址提供:http://localhost:5173
- 在 Inspector 界面中:
- 确保
Transport Type设置为SSE - 确保
URL设置为 http://localhost:3001/sse - 点击 "Connect" 按钮,连接到 puzzlebox 服务。
- 你应该会看到绿色指示灯 🟢以及 "Connected" 消息。
- 点击 List Tools 按钮
- 确保
格式化
npm run format- 使用
prettier格式化代码
类型检查
npm run typecheck- 使用带参数的
tsc检查并报告类型问题
代码检查
npm run lint- 使用
eslint检查并报告语法问题,不会修改代码
修复代码问题
npm run lint:fix- 使用
eslint检查并修复语法问题
测试
npm run test- 运行单元测试
截图
这些截图展示了该服务实现的各种 MCP 工具和资源。
服务器使用官方参考客户端——MCP Inspector 进行了测试。
0 - 列出工具

1 - 添加拼图

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

3 - 对拼图执行操作

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

5 - 对拼图执行操作

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

7 - 列出资源

8 - 资源模板

9 - 未订阅的资源

10 - 已订阅的资源

11 - 资源更新通知

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