项目简介

此项目是 'Microsoft Copilot Studio Labs' 仓库中的一个示例,展示了如何构建一个基于 Model Context Protocol (MCP) 的服务器。它模拟了一个奇幻世界中的“冒险者公会”,为大语言模型 (LLM) 客户端提供了一系列上下文信息和可调用的功能(工具)。服务器通过 JSON-RPC 协议进行通信,可以根据请求者的“公会等级”和认证状态,动态地提供不同的任务、冒险队伍和金库访问权限。

主要功能点

  • 任务管理: 允许根据用户在公会中的等级(如新手、高手、资深、传奇),查询当前等级下可接受的各种任务,包括任务的详细描述、危险程度、奖励金币和推荐的职业类型。
  • 队伍管理: 展示可供雇佣的冒险队伍信息,每个队伍都包含其名称、预期奖励、详细描述以及队伍成员列表(包含种族、职业和等级)。客户端还可以选择根据特定职业来筛选队伍。
  • 金库管理: 提供一个受安全认证保护的金库查询功能。只有通过授权的请求才能查看公会金库的当前余额。
  • 队伍雇佣: 允许客户端雇佣冒险队伍来执行特定任务。系统在雇佣前会进行多重验证,包括任务奖励是否满足队伍预期、金库是否有足够资金支付、以及请求者是否已通过授权。成功雇佣后,金库余额将相应扣除。
  • 上下文感知: 服务器能够根据请求头中的 'user-level'(用户等级)和 'authorization'(授权凭证)来动态调整可访问的数据(如任务难度、队伍等级)和功能。

安装步骤

要运行此MCP服务器示例,您需要以下环境:Node.js 和 npm (或 yarn)。

  1. 克隆仓库: 首先,使用Git命令将 'microsoft/mcs-labs' 仓库克隆到您的本地机器。

    git clone https://github.com/microsoft/mcs-labs.git
    cd mcs-labs
  2. 进入示例目录: 导航到MCP服务器示例所在的目录。

    cd samples/adventurers-guild-mcp
  3. 安装项目依赖: 运行以下命令安装所有必要的 Node.js 包,包括 MCP SDK、Express 框架和 Zod(用于数据验证)。

    npm install
    # 或者使用 yarn
    # yarn install
  4. 安装TypeScript运行时(可选,推荐): 此服务器代码使用 TypeScript 编写。为了能直接运行 '.ts' 文件,推荐全局安装 'ts-node'。

    npm install -g ts-node

    如果您不想全局安装 'ts-node',也可以先将 TypeScript 代码编译成 JavaScript ('npm install -g typescript && tsc src/index.ts'),然后运行编译后的 '.js' 文件。

服务器配置

MCP客户端在连接此服务器时,需要以下配置信息来启动和与其通信:

  • 服务器名称: 'adventurers-guild' (这是服务器在MCP生态系统中的标识符)
  • 启动命令: 'ts-node' (客户端需要知道如何启动此服务器进程,'ts-node' 是运行 TypeScript 文件的便捷工具)
  • 启动参数: 'src/index.ts' (这是服务器代码的主文件路径,'ts-node' 将执行此文件)
  • 环境变量 (PORT): 默认情况下,服务器将在 '3000' 端口监听。您可以通过在 'command' 执行前设置 'PORT' 环境变量来改变端口号,例如 'PORT=8080 ts-node src/index.ts'。
  • 服务地址: 'http://localhost:3000/mcp' (MCP客户端将通过此 HTTP 地址向服务器发送 JSON-RPC 请求,请根据实际运行端口调整)

基本使用方法

  1. 启动服务器: 在 'samples/adventurers-guild-mcp' 目录下,执行以下命令来启动MCP服务器:

    ts-node src/index.ts

    服务器成功启动后,您会在控制台看到一个醒目的 ASCII 艺术欢迎信息,并提示服务器已准备就绪。

  2. 通过MCP客户端交互: 使用您的 MCP 客户端(例如,一个集成 MCP 的 LLM 应用或开发工具)连接到服务器的服务地址:'http://localhost:3000/mcp'。

  3. 列出任务: 调用服务器提供的 'list_quests' 工具,获取当前可用的任务列表。您可以模拟不同等级的用户来查看不同难度的任务:

    • 在客户端请求头中设置 'user-level: Novice' 或 'user-level: Adept' 等。
  4. 查询队伍: 调用 'parties' 工具,查看可雇佣的冒险队伍。您还可以通过参数 'classes' 筛选特定职业的队伍:

    • 例如,调用 'parties' 工具并传入参数 '{ "classes": ["Fighter", "Cleric"] }'。
  5. 检查金库余额: 调用 'chest' 工具查询公会金库的余额。此操作需要授权:

    • 在客户端请求头中添加 'authorization: Bearer YOUR_AUTH_TOKEN' (其中 'YOUR_AUTH_TOKEN' 可以是任意非空字符串,仅作验证标识)。
  6. 雇佣队伍: 调用 'hire_party' 工具,提供任务的 'quest_id' 和队伍的 'party_id' 来雇佣队伍。

    • 例如,调用 'hire_party' 工具并传入参数 '{ "quest_id": "q1", "party_id": "p1" }'。
    • 请确保您已通过授权 (如上述金库查询步骤),并且所选任务的奖励能满足队伍的预期。

信息

分类

AI与计算