stdio

代理 STDIN/STDOUT/STDERR 与本地可执行文件的通信。 此命令特别适用于测试和调试模型上下文协议(MCP)服务器和其他基于 STDIO 的应用程序。

概要

devproxy stdio [options] <command> [args...]

Description

stdio 命令启动子进程并代理所有 STDIN/STDOUT/STDERR 通信。 这样,便可以:

  • 检查客户端(如 VS Code)和 MCP 服务器之间的消息流
  • 模拟对测试客户端行为的响应,而无需运行实际的服务器逻辑
  • 使用 Chrome DevTools 调试通信问题
  • 通过注入模拟响应或阻止请求来测试错误处理
  • 模拟 STDIO 通信的延迟

Usage

devproxy stdio npx -y @modelcontextprotocol/server-filesystem

Arguments

Name Description 必选
<command> 要执行的命令 是的
[args...] 要传递给命令的参数

选项

Name Description 允许的值 违约
-c, --config-file <configFile> 配置文件的路径 本地文件路径 devproxyrc.json
--no-stdio-mocks 禁用加载 STDIO 模拟响应 n/a n/a
--stdio-mocks-file <file> 包含 STDIO 模拟响应的文件的路径 本地文件路径 -
--log-level <loglevel> 要记录的消息级别 tracedebuginformationwarningerror information
-?, -h, --help 显示帮助和使用情况信息 n/a n/a

例子

使用开发代理启动 MCP 服务器

devproxy stdio npx -y @modelcontextprotocol/server-filesystem

指定自定义配置文件

devproxy stdio --config-file ./my-config.json npx my-server

指定自定义模拟文件

devproxy stdio --stdio-mocks-file ./my-mocks.json npx my-server

禁用 stdio 模拟

devproxy stdio --no-stdio-mocks npx my-server

配置示例

若要将 stdio 命令用于插件,请创建配置文件:

文件: devproxyrc.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/rc.schema.json",
  "plugins": [
    {
      "name": "MockStdioResponsePlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "mockStdioResponsePlugin"
    },
    {
      "name": "DevToolsPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "devTools"
    }
  ],
  "devTools": {
    "preferredBrowser": "Edge"
  },
  "mockStdioResponsePlugin": {
    "mocksFile": "stdio-mocks.json"
  }
}

支持的插件

以下插件支持 STDIO 拦截:

插件 Description
MockStdioResponsePlugin 模拟 STDIN/STDOUT/STDERR 响应
DevToolsPlugin 检查 Chrome DevTools 中的 STDIO 流量
LatencyPlugin 向 STDIO 通信添加人工延迟

Architecture

使用 stdio 命令时,开发代理充当父进程(如 VS Code)和子进程(如 MCP 服务器)之间的中间人:

┌─────────────────┐     STDIN      ┌──────────────────┐     STDIN      ┌─────────────────┐
│  Parent Process │ ─────────────▶ │   Dev Proxy      │ ─────────────▶ │  Child Process  │
│   (VS Code)     │                │                  │                │   (MCP Server)  │
│                 │ ◀───────────── │  ┌────────────┐  │ ◀───────────── │                 │
└─────────────────┘    STDOUT      │  │  Plugins   │  │    STDOUT      └─────────────────┘
                                   │  └────────────┘  │
                                   └──────────────────┘

插件按顺序调用:

  1. BeforeStdinAsync - 在将 stdin 转发到子级之前
  2. AfterStdoutAsync - 从子级接收 stdout 后
  3. AfterStderrAsync - 从子级接收 stderr 后

DevTools 集成

启用 DevToolsPlugin 时,可以在 Chrome DevTools 中检查 STDIO 流量:

  • 消息随 URL 一起 stdio://command-name 显示
  • 请求显示为 STDIN 方法
  • 响应显示为 STDOUT (200 状态)或 STDERR (500 状态)
  • 消息正文的格式设置为 JSON(如果适用)

后续步骤