MCP服务器模拟工具

一个基于Bun和TypeScript的快速原型工具,用于通过YAML文件配置模拟Model Context Protocol (MCP)服务器响应。

  • by Dimirolz
  • TypeScript
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 Dimirolz/mcpmock

使用说明

mcpmock

用于快速原型制作的Bun+TypeScript游乐场 模型上下文协议(MCP)服务器.
在一个YAML文件中描述你的模拟服务器,运行CLI,服务器(stdio或HTTP)会用模拟数据进行响应。目标是帮助迭代工具形状和响应,而无需构建完整的后端。

项目状态

  • 单文件YAML配置(examples/basic/mock.yaml)加载到带有明显错误的类型化表示中。
  • CLI现在启动一个模拟MCP服务器:
    • transport: stdio (默认)通过stdin/stdout进行代理集成连接。
    • transport: http 启动由以下支持的Express服务器 StreamableHTTPServerTransport.
  • 工具调用返回配置的 response 作为文本(以及适用时的结构化内容)。

安装

一旦包发布到npm,你就可以立即安装或运行它:

npm install -g mcpmock
# or run without installing
npx mcpmock ./examples/basic/mock.yaml

用法

将CLI指向任何项目YAML文件:

npx mcpmock path/to/server.yaml
  • transport: stdio (默认)通过stdin/stdout进行代理集成连接。
  • transport: http 启动由以下支持的Express服务器 StreamableHTTPServerTransport.
  • 跨源请求已启用( Mcp-Session-Id 暴露),因此像MCP Inspector这样的浏览器可以直接连接。

如果配置包含错误,CLI会打印带有注释路径的可读错误消息,以便编码代理(和人类)可以快速修复它们。

地方发展

要在本地使用CLI:

bun install
bun run build
node dist/index.js examples/basic/mock.yaml

构建步骤发出Node就绪包(dist/index.js)以及发布到npm时使用的TypeScript声明。

配置格式

所有配置都存在 一个YAML文件示例(examples/basic/mock.yaml):

server:
  name: demo-mock
  transport: stdio
  description: Minimal mock MCP server example

tools:
  - name: echo
    description: Returns the provided message
    input_schema:
      type: object
      properties:
        message:
          type: string
      required:
        - message
    response:
      message: default echo

响应模板

在...之内 response 可以使用以下值引用工具参数 {{ args.* }} 表达。字符串在调用时被插值,并在嵌套对象和数组中工作。例如:

tools:
  - name: echo
    response:
      message: "You said: {{ args.message }}"

如果缺少引用的参数,则工具调用会引发错误,使调试更容易。

关键规则:

  • 每个工具都必须有一个独特的 name.
  • input_schema 遵循JSON模式约定(目前是一个子集,专注于对象、字符串、数字、布尔值、数组)。
  • response 可以是任何JSON值(如果你想要Markdown,纯字符串也可以)。

路线图

  1. 强化HTTP传输(SSE会话、可恢复性、身份验证助手)。
  2. 提供更丰富的响应脚本选项(多种场景、模板)。
  3. 构建配套的MCP客户端CLI,以运行脚本交互、记录工具调用并支持轻量级评估。
  4. 支持大型项目的可选多文件布局。
  5. 打包用于npm分发,并提供编译后的二进制文件 bun build --compile.

欢迎投稿、想法和反馈!请随时在中绘制新格式 examples/ 并在CLI上迭代***