项目简介: 本项目包含一个使用 TypeScript 和 Node.js 构建的狼人杀游戏后端服务器,以及一个示例客户端。服务器实现了基于 Model Context Protocol (MCP) 的通信接口,用于接收客户端(如LLM客户端或其他游戏客户端)发送的结构化请求,处理游戏逻辑,并通过WebSocket向客户端推送游戏状态更新。

主要功能点:

  • 用户账号管理: 提供安全的注册和登录功能。
  • 游戏大厅功能: 允许客户端浏览当前活跃的游戏房间列表,创建新的游戏房间,以及加入现有房间。
  • 游戏房间管理: 管理房间内的玩家状态(如准备、离开),处理游戏开始流程。
  • 游戏核心逻辑: 实现了狼人杀游戏的基本规则,包括角色分配、夜晚各角色行动处理、白天讨论、投票及结果处理、胜负判定等。
  • MCP通信实现:
    • 通过WebSocket协议接收和响应遵循特定JSON结构(类似于JSON-RPC)的MCP请求(“工具调用”)。
    • 将核心游戏逻辑封装为可供客户端调用的“工具”(Tools),例如发言、投票、使用角色能力等。
    • 管理和维护游戏状态(GameState),作为客户端可访问和互动的“资源”(Resources)。
    • 通过WebSocket向客户端实时推送游戏状态更新(GameStateUpdate事件)。
  • 数据持久化: 支持将用户数据、游戏结果和游戏日志保存到MySQL数据库。

安装步骤:

  1. 数据库设置:
    • 确保已安装并运行MySQL服务器。
    • 创建一个新的数据库,例如命名为 'werewolf_mcp'。
    • 连接到该数据库,执行 'server/migrations/001_initial_schema.sql' 文件中的SQL语句来创建必要的用户、游戏结果、游戏日志等数据表。
  2. 服务器配置:
    • 进入 'server/' 目录 ('cd server')。
    • 复制环境变量示例文件: 'cp .env.example .env'。
    • 编辑新创建的 '.env' 文件,根据你的MySQL设置填写数据库连接信息(DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_DATABASE)。同时设置一个用于JWT认证的密钥(JWT_SECRET,建议使用一个安全的随机字符串)。
  3. 安装依赖:
    • 确保仍在 'server/' 目录下,运行包管理器命令安装依赖:'npm install'。
  4. 编译代码:
    • 确保仍在 'server/' 目录下,运行TypeScript编译命令:'npm run build'。这会将 'src/' 目录下的TypeScript源文件编译到 'dist/' 目录。
  5. 运行服务器:
    • 确保仍在 'server/' 目录下,运行启动命令:'npm start'。
    • 或者直接运行编译后的JavaScript文件:'node dist/server.js'。
    • 服务器将根据 '.env' 文件中的配置(默认端口3000)启动,并监听WebSocket连接。

服务器配置信息 (供MCP客户端参考): MCP服务器通过特定的网络地址和协议端点暴露其功能。MCP客户端框架需要这些信息来建立连接和交互。对于此项目实现的MCP服务器,其核心连接信息如下:

{
  "serverName": "Werewolf MCP Server",
  "description": "A Werewolf game backend implementing the MCP protocol over WebSocket.",
  "protocol": "websocket",
  "endpoint": "ws://localhost:3000/mcp",
  "notes": "WebSocket监听地址和端口可在服务器的 .env 文件中配置(SERVER_PORT环境变量)。",
  "exposedTools": [
     "register",          // 用户注册
     "login",             // 用户登录,成功后客户端需使用返回的token进行认证
     "get_game_list",     // 获取游戏房间列表
     "create_game",       // 创建新的游戏房间
     "join_game",         // 加入指定房间
     "leave_game",        // 离开当前房间
     "player_ready",      // 设置玩家准备状态
     "speak",             // 在游戏中发言
     "vote",              // 在投票阶段投票
     "use_ability",       // 使用角色能力 (如 seerCheck, witchSave, werewolfKill等,具体取决于能力定义和当前游戏状态)
     "get_game_state",    // 请求当前游戏状态同步(客户端通常通过GameStateUpdate事件接收更新)
     // 可能还支持 get_game_info, get_my_role 等补充信息工具
  ],
  "pushedEvents": [
     "GameStateUpdate"    // 游戏状态发生变化时服务器推送通知
     // 可能还有其他通知如 CHAT_MESSAGE 等
  ]
  // 如果MCP客户端框架负责启动服务器进程,可能还需要以下配置:
  // "command": "node",
  // "args": ["dist/server.js"],
  // "workingDirectory": "server/" // 指服务器代码的根目录
}

此JSON结构仅为示例,实际MCP客户端框架可能使用不同的配置格式,但核心信息(协议、端点、工具、事件)是类似的。

基本使用方法:

  1. 按照上述步骤确保服务器已成功运行。
  2. 进入 'client/' 目录 ('cd client')。
  3. 运行 'npm install' 安装示例客户端的依赖。
  4. 运行 'npm run build' 编译客户端代码。
  5. 运行 'npm start' 启动示例客户端。客户端将尝试连接到 'ws://localhost:3000/mcp',模拟一个玩家的注册、登录、创建/加入游戏房间、准备等一系列交互流程,并在控制台打印服务器返回的响应和推送的游戏状态更新(GameStateUpdate)通知。

信息

分类

通信与社交