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


MockStdioResponsePlugin

Имитирует ответы для приложений на основе STDIO, таких как серверы протокола MCP.

Определение экземпляра подключаемого модуля

{
  "name": "MockStdioResponsePlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
  "configSection": "mockStdioResponsePlugin"
}

Пример конфигурации

{
  "$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"
    }
  ],
  "mockStdioResponsePlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/mockstdioresponseplugin.schema.json",
    "mocksFile": "stdio-mocks.json"
  }
}

Свойства конфигурации

Недвижимость Description По умолчанию
mocksFile Путь к файлу с макетами STDIO stdio-mocks.json
blockUnmockedRequests Если trueпараметр не соответствует stdin, не достигает дочернего процесса. false

Параметры командной строки

Имя Description По умолчанию
--no-stdio-mocks Отключение загрузки ответов макета STDIO false
--stdio-mocks-file Путь к файлу с макетами STDIO -

Примеры файлов макетов

Ниже приведены примеры объектов макета STDIO.

Ответ с помощью stdout

Ответ на stdin, содержащий определенный текст с ответом stdout.

Файл: stdio-mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/mockstdioresponseplugin.schema.json",
  "mocks": [
    {
      "request": {
        "bodyFragment": "tools/list"
      },
      "response": {
        "stdout": "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[]}}\n"
      }
    }
  ]
}

Ответ с помощью stderr

Отвечайте на stdin с сообщением об ошибке на stderr.

Файл: stdio-mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/mockstdioresponseplugin.schema.json",
  "mocks": [
    {
      "request": {
        "bodyFragment": "invalid_method"
      },
      "response": {
        "stderr": "Error: Unknown method\n"
      }
    }
  ]
}

Использование заполнителей из stdin

Используйте @stdin.body.* заполнители для динамического включения значений из stdin в ответ.

Файл: stdio-mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/mockstdioresponseplugin.schema.json",
  "mocks": [
    {
      "request": {
        "bodyFragment": "tools/list"
      },
      "response": {
        "stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"tools\":[]}}\n"
      }
    }
  ]
}

Доступны следующие заполнители:

Placeholder Description
@stdin.body.id идентификатор запроса JSON-RPC
@stdin.body.method имя метода JSON-RPC
@stdin.body.params.name Доступ к вложенным свойствам

Загрузка ответа из файла

Загрузите содержимое ответа макета из внешнего файла с помощью @filename синтаксиса.

Файл: stdio-mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/mockstdioresponseplugin.schema.json",
  "mocks": [
    {
      "request": {
        "bodyFragment": "initialize"
      },
      "response": {
        "stdout": "@initialize-response.json"
      }
    }
  ]
}

Файл: initialize-response.json

{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"Mock MCP Server","version":"1.0.0"}}}

Реагирование на вхождение nth

Отвечайте только после перехвата соответствующего stdin в течение n-го времени.

Файл: stdio-mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/mockstdioresponseplugin.schema.json",
  "mocks": [
    {
      "request": {
        "bodyFragment": "tools/call",
        "nth": 2
      },
      "response": {
        "stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Operation completed\"}]}}\n"
      }
    }
  ]
}

Макеты свойств файла

Недвижимость Description Обязательно
request Объект request , определяющий stdin для сопоставления yes
response Объект ответа , определяющий ответ, возвращаемый yes

Объект запроса

Каждый запрос имеет следующие свойства:

Недвижимость Description Обязательно Значение по умолчанию Примерное значение
bodyFragment Строка, которая должна присутствовать в stdin yes tools/list
nth Отвечать только при перехвате запроса на n-е время no 2

Объект Response

Каждый ответ имеет следующие свойства:

Недвижимость Description Обязательно Значение по умолчанию Примерное значение
stdout Содержимое для отправки в stdout no empty {"result": "ok"}\n
stderr Содержимое для отправки в stderr no empty Error: Something went wrong\n

Примечания ответа

Если вы хотите загрузить содержимое ответа из файла, задайте stdout строковое значение или stderr свойство, которое начинается с @ пути к файлу относительно файла макетов. Например, возвращает содержимое, хранящееся в response.json файле в том же каталоге, @response.json что и файл макетов.

Для динамического включения значений из stdin в ответе используйте @stdin.body.* заполнители. Например, @stdin.body.id возвращает значение id свойства из stdin JSON.

Примечания подключаемого модуля

Этот подключаемый модуль предназначен для использования с командойstdio для перехвата и имитации взаимодействия STDIO с локальными исполняемыми файлами. Это полезно для тестирования и отладки серверов протокола контекста модели (MCP) и других приложений на основе STDIO.

Если blockUnmockedRequests задано значение true, любой stdin, который не соответствует макету, используется и не пересылается в дочерний процесс. Блокировка несмешанных запросов полезна, если вы хотите полностью имитировать поведение исполняемого файла без выполнения фактической логики.

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