项目简介
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 }, }
基本使用方法
- 创建场景 YAML 文件: 根据你的测试需求,创建 YAML 文件并定义请求和响应场景,将其放在指定的文件夹中。
- 配置 MCP 客户端: 配置你的 MCP 客户端,使其能够连接到 mcpmock 模拟服务器。你需要配置服务器的启动命令和参数,如上面的 "服务器配置" 部分所示。
- 启动 MCP 客户端: 启动你的 MCP 客户端应用程序。客户端会根据配置连接到 mcpmock 模拟服务器。
- 发送 MCP 请求: 客户端发送符合 MCP 协议的 JSON-RPC 请求到 mcpmock 模拟服务器。
- 接收模拟响应: mcpmock 服务器会根据接收到的请求,在 YAML 文件中查找匹配的场景,并返回预设的 JSON-RPC 响应。
- 查看输出: 你可以在客户端应用程序中查看接收到的响应,验证客户端的行为是否符合预期。 mcpmock 服务器本身会在终端输出一些日志信息,帮助你了解服务器的运行状态。
例如:
假设你创建了一个名为 'testdata' 的文件夹,并在其中放置了 'example_test.yaml' 场景文件。 你可以使用以下命令启动 mcpmock 模拟服务器:
mcpmock serve testdata
然后,你可以将上面提供的服务器配置信息配置到你的 MCP 客户端,启动客户端后,客户端发送的请求将会被 mcpmock 服务器处理,并返回 YAML 文件中定义的模拟响应。
信息
分类
开发者工具