Skip to main content
Glama
Akatsuki-SAYO

DnD WebMCP

DnD WebMCP / Agent Tavern

这是在已验证的 counter probe 上原地演进出的最小多人文字 TRPG。它保留共享 room、单调 version、角色工具隔离、乐观并发检查和 wait_for_event,但将数值累加替换为事件驱动的酒馆场景、三阶段回合和服务端 d20 检定。

当前范围只有:

  • DM / Human / Mira 三方公共事件日志

  • WAITING_DM / WAITING_HUMAN / WAITING_AGENT

  • 自然语言 speech / action / narration / reveal

  • STR / DEX / INT / CHA 四属性检定

  • Human 对话界面与角色/骰子状态栏

  • 中文 / English 界面和 WebMCP 工具描述切换

没有地图、战斗、装备、技能栏、商店、登录、音效、动画或持久数据库。

Online demo

公开服务:https://dnd-webmcp.onrender.com

同一局的三个参与者必须使用完全相同的 room 参数:

右上角可以切换中文 / English,也可以把 URL 中的 lang=zh 改为 lang=en

Render Free 实例在闲置后会休眠,首次访问可能延迟 50 秒以上。实例重启、重新部署或休眠恢复可能清空内存房间,请把它视为比赛演示地址。

Run

在仓库根目录:

cd DnD-WebMCP
npm start

从压缩包运行时,直接在包含 package.json 的解压目录执行 npm start

页面:

http://127.0.0.1:8787/?room=demo&role=dm&lang=zh
http://127.0.0.1:8787/?room=demo&role=human&lang=zh
http://127.0.0.1:8787/?room=demo&role=agent&lang=zh

三个页面只有使用相同 room 时才共享世界。role=player 作为旧 probe 的兼容别名映射到 agent。右上角的 中文 / EN 开关会保留 roomrole,只切换 lang=zh|en;系统界面、角色规则、等待提示和工具描述同步切换。玩家自由输入的剧情内容保持原文,不做自动翻译。

Turn contract

  • 初始阶段是 WAITING_DM

  • DM 可以连续叙事、请求检定和揭示事实,最后用 set_phase 交棒。

  • Human / Mira 的 speak 记录公开发言但不结束回合。

  • Human / Mira 的 act 或自身 request_check 会自动把阶段交回 DM。

  • 所有写工具都要求准确的 expectedVersion;旧版本返回 HTTP 409 和最新公开状态。

  • wait_for_event 最长 20 秒,默认 5 秒。结果包含 yourTurnnextInstruction,超时后应读取状态并再次短等待。

Role tools

DM 页面:

get_dm_state
get_recent_events
narrate
reveal_fact
request_check
set_phase
wait_for_event

Human / Mira 页面:

get_visible_state
get_my_character
get_recent_events
speak
act
request_check
wait_for_event

Human / Mira 的状态和等待结果不包含 dmSecrets。没有 set_stateupdate_jsonset_hp 或其他通用状态写工具。

Tests

npm test

测试覆盖状态初始化、秘密隔离、阶段权限、事件顺序、服务端随机 d20、四属性白名单、版本冲突、等待唤醒/超时、取消清理和重置唤醒。

Deployment

GitHub Pages 只能托管静态文件,不能运行本项目的 Node API、共享内存房间或 wait_for_event,因此不能单独发布完整版本。

当前线上服务部署在 Render Free(Singapore):https://dnd-webmcp.onrender.com

仓库包含 render.yaml,也支持从 GitHub 创建新的 Render Blueprint。详细步骤和平台边界见 DEPLOYMENT.md。服务支持平台提供的 PORT,云端监听地址由 HOST=0.0.0.0 设置。

Prototype limitations

状态只存在当前 Node 进程内,重启或免费实例休眠后会清空。API 没有认证且 CORS 宽松,角色权限目前由页面工具面隔离;知道接口的人仍可直接构造请求。可以公开部署用于比赛演示,但不适合作为不受控的生产服务。

正式部署至少需要共享持久化存储、原子版本更新、房间身份与角色令牌、幂等请求键、速率限制、审计日志和 HTTPS。