Gameplay MCP Server for Unity
使用说明
-
项目简介
- 该仓库实现了一个基于 MCP 的服务器端,用于在 Unity 环境中托管资源、注册与执行工具,以及定义与渲染提示模板,供 LLM 客户端通过 JSON-RPC 与之交互。
- 服务器通过 HTTP 流式传输实现与客户端的实时通信,能够处理会话、能力声明,以及对资源、工具、提示的访问与执行请求。
-
主要功能点
- MCP 核心能力
- 资源(Resources)托管与访问能力,用于向 LLM 提供数据访问。
- 工具(Tools)注册、查询与执行,LLM 可以调用外部功能(如游戏对象定位、截屏等)。
- 提示模板(Prompts)定义与渲染,支持自定义的 LLM 交互方式。
- 会话与传输
- 以 JSON-RPC 形式进行请求/响应,支持多会话管理。
- 支持多种传输模式,当前实现以流式 HTTP(HttpListener + StreamableHttpTransport)为核心,方便在运行时嵌入到 Unity 客户端。
- 自动工具发现
- 通过扫描程序集自动发现并注册带有特定属性的工具(McpServerToolType、McpServerTool),无需手动注册。
- 安全与扩展
- 能力声明与过滤(如禁用某些工具),便于在不同游戏标题中进行定制化。
- 提供 DI 机制,方便注入自定义配置与工具。
- MCP 核心能力
-
安装步骤
- 该服务器在 Unity 环动作环境中运行,依赖 MCP C# SDK 与 UI 测试辅助工具等外部包,具体版本请参考仓库的依赖说明。
- 将项目导入 Unity 并确保以下包可用:
- ModelContextProtocol C# SDK(NuGet 包 ModelContextProtocol,版本及以上)
- UI Test Helper(UPM 包,适配当前项目)
- Test Helper(UPM 包,适配当前项目)
- 在 Unity 编辑器中编译并执行示例/测试脚本,确保 MCP 服务器可以启动。
-
服务器配置(面向 MCP 客户端的连接信息)
- MCP 客户端需要知道服务器的启动命令及参数才能与 MCP 服务器建立连接。下面给出配置要点说明(实际的 JSON 配置示例用于客户端读取,不包含具体实现代码):
- server 名称:用于区分不同 MCP 服务器实例的唯一标识
- command:启动 MCP 服务器所需的执行命令(如在游戏内嵌启动脚本中触发)
- args:命令行参数,以便客户端在连接时能够知道服务器的网络地址和其他可选设置
- 说明:在本实现中,服务器启动监听地址默认来自命令行参数 -gameplayMcpListenPrefix(若未指定则使用 http://+:8010/,在 Unity 的运行时项目中会被配置覆盖),并绑定到 /mcp 路径用于处理 MCP 请求。
注意:MCP 客户端配置不需要包含代码实现,仅用于描述客户端如何连接到服务器。请按照客户端的实际 json 配置读取要求来整理参数。
-
基本使用方法
- 启动服务器:在游戏标题代码中初始化并启动 MCP 服务器(示例中通过 McpConfig 配置并调用 StartAsync)。
- 访问工具与资源:LLM 客户端通过 JSON-RPC 向 /mcp 提交请求,调用已注册的工具、读取资源、或获取 Prompts。
- 会话管理:客户端在连接时应保持会话标识(Mcp-Session-Id)以维持连续的会话。服务器支持创建新会话以及基于现有会话进行请求的持续交互。
- 自定义工具:可通过标注自动发现方式扩展自定义工具,或在配置中禁用不需要的工具以限制可访问的能力。