项目简介

mcpmock 是一个命令行工具,旨在帮助开发者模拟 MCP (Model Context Protocol) 服务器的行为。它允许用户通过 YAML 文件定义一系列请求和响应场景,然后启动一个模拟服务器,根据预设的场景对接收到的 MCP 请求进行响应。这对于在没有真实 MCP 服务器环境的情况下测试和开发 MCP 客户端应用非常有用。

主要功能点

  • 模拟 MCP 服务器行为: mcpmock 能够模拟 MCP 服务器接收和响应 JSON-RPC 请求的核心流程。
  • 基于 YAML 场景配置: 用户可以通过简单的 YAML 文件定义各种请求场景及其对应的响应,灵活定制服务器行为。
  • 支持 Stdio 传输: 模拟服务器通过标准输入/输出 (stdio) 与客户端通信,方便集成和测试。
  • 请求/响应匹配: 服务器会根据接收到的 JSON-RPC 请求内容(方法名、参数等)匹配 YAML 文件中定义的场景,并返回预设的响应。
  • 动态 ID 处理: 服务器会自动将请求中的 'id' 字段复制到响应中,确保 JSON-RPC 协议的正确性。

安装步骤

mcpmock 提供了多种安装方式:

1. 使用 npm (Node Package Manager) 安装 (推荐):

如果你的环境中安装了 Node.js 和 npm,可以直接运行以下命令全局安装 mcpmock:

npm install -g @strowk/mcpmock

2. 从 GitHub Releases 下载:

访问 https://github.com/strowk/mcpmock/releases 页面,下载适用于你操作系统的预编译版本。下载后解压,并将可执行文件 'mcpmock' (或 'mcpmock.exe' 在 Windows 上) 添加到系统的 PATH 环境变量中。

3. 从源代码编译安装:

如果你的环境中安装了 Go 语言环境,可以使用以下命令从源代码编译安装:

go get github.com/strowk/mcpmock
go install github.com/strowk/mcpmock

服务器配置

MCP 客户端需要配置 MCP 服务器的启动命令及其参数才能连接到 mcpmock 模拟服务器。以下是配置信息示例 (JSON 格式),你需要根据你的实际安装方式和场景文件路径进行调整:

{
  "serverName": "mcpmock-server",  //  服务器名称,可以自定义
  "command": "mcpmock",          //  启动服务器的命令,如果 mcpmock 已添加到 PATH,则直接使用命令名
  "args": [                       //  启动参数
    "serve",                       //  固定参数,表示启动 serve 模式
    "path/to/your/scenarios"     //  场景 YAML 文件所在的文件夹路径,例如 "testdata"
  ]
}

参数说明:

  • '"serverName"': MCP 服务器的名称,客户端可以使用此名称来标识服务器,可以根据需要自定义。
  • '"command"': 启动 mcpmock 模拟服务器的命令。如果你是通过 npm 或 GitHub Releases 安装的,并且 'mcpmock' 可执行文件已经添加到了系统的 PATH 环境变量中,则可以直接使用 '"mcpmock"'。 如果没有添加到 PATH,则需要填写 'mcpmock' 可执行文件的完整路径。
  • '"args"': 启动命令的参数,mcpmock 的 'serve' 命令需要指定场景 YAML 文件所在的文件夹路径。你需要将 '"path/to/your/scenarios"' 替换为你实际存放 YAML 文件的文件夹路径。 例如,如果你的 YAML 文件放在项目根目录下的 'testdata' 文件夹中,则配置为 '"testdata"'。

场景 YAML 文件说明:

场景 YAML 文件用于定义模拟服务器的行为。你需要创建一个或多个 YAML 文件,并将其放在配置中 '"args"' 指定的文件夹中。YAML 文件的命名需要以 '_test.yaml' 结尾,例如 'my_scenarios_test.yaml'。

YAML 文件中可以定义多个 'case',每个 'case' 代表一个场景。每个场景包含 'in' (输入请求) 和 'out' (预期输出响应) 部分。 'in' 和 'out' 部分都需要是符合 JSON-RPC 格式的对象。

示例 YAML 场景文件 (testdata/example_test.yaml):

case: List tools  # 场景描述

# 请求列出工具列表
in: {"jsonrpc": "2.0", "method": "tools/list", "id": 1}

# 预期响应包含一个名为 "hello" 的工具
out: {"jsonrpc": "2.0", "result":{ "tools": [{"description": "Hello MCP", "inputSchema": {"type": "object"}, "name": "hello"}] }, "id": 1}

---  #  场景分隔符

case: Call Hello tool # 场景描述

# 请求调用名为 "hello" 的工具
in: {"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "hello", "arguments": {}}, "id": 1}

# 预期响应返回文本内容 "Hi!"
out: {
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {"type": "text", "text": "Hi!"}
    ],
    "isError": false
  },
}

基本使用方法

  1. 创建场景 YAML 文件: 根据你的测试需求,创建 YAML 文件并定义请求和响应场景,将其放在指定的文件夹中。
  2. 配置 MCP 客户端: 配置你的 MCP 客户端,使其能够连接到 mcpmock 模拟服务器。你需要配置服务器的启动命令和参数,如上面的 "服务器配置" 部分所示。
  3. 启动 MCP 客户端: 启动你的 MCP 客户端应用程序。客户端会根据配置连接到 mcpmock 模拟服务器。
  4. 发送 MCP 请求: 客户端发送符合 MCP 协议的 JSON-RPC 请求到 mcpmock 模拟服务器。
  5. 接收模拟响应: mcpmock 服务器会根据接收到的请求,在 YAML 文件中查找匹配的场景,并返回预设的 JSON-RPC 响应。
  6. 查看输出: 你可以在客户端应用程序中查看接收到的响应,验证客户端的行为是否符合预期。 mcpmock 服务器本身会在终端输出一些日志信息,帮助你了解服务器的运行状态。

例如:

假设你创建了一个名为 'testdata' 的文件夹,并在其中放置了 'example_test.yaml' 场景文件。 你可以使用以下命令启动 mcpmock 模拟服务器:

mcpmock serve testdata

然后,你可以将上面提供的服务器配置信息配置到你的 MCP 客户端,启动客户端后,客户端发送的请求将会被 mcpmock 服务器处理,并返回 YAML 文件中定义的模拟响应。

信息

分类

开发者工具