Поделиться через


stdio

Прокси-серверы STDIN/STDOUT/STDERR обмен данными с локальными исполняемыми файлами. Эта команда особенно полезна для тестирования и отладки серверов протокола контекста модели (MCP) и других приложений на основе STDIO.

Synopsis

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

Имя Description Обязательно
<command> Команда для выполнения yes
[args...] Аргументы для передачи команде no

Options

Имя Description Допустимые значения По умолчанию
-c, --config-file <configFile> Путь к файлу конфигурации Путь к локальному файлу devproxyrc.json
--no-stdio-mocks Отключение загрузки ответов макета STDIO n/a n/a
--stdio-mocks-file <file> Путь к файлу с макетами STDIO Путь к локальному файлу -
--log-level <loglevel> Уровень сообщений для журнала trace, debug, , information, warningerror 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 Ответы Mock STDIN/STDOUT/STDERR
DevToolsPlugin Проверка трафика STDIO в Chrome DevTools
Плагин задержки Добавление искусственной задержки в связь 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, вы можете проверить трафик STDIO в Chrome DevTools:

  • Сообщения отображаются с stdio://command-name URL-адресами
  • Запросы отображаются как STDIN метод
  • Ответы отображаются как STDOUT (состояние 200) или STDERR (500 состояний)
  • Тела сообщений форматируются в формате JSON при необходимости

Следующий шаг