Compartilhar via


MockStdioResponsePlugin

Simula respostas para aplicativos baseados em STDIO, como servidores MCP (Model Context Protocol).

Definição da instância do plug-in

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

Exemplo de configuração

{
  "$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"
  }
}

Propriedades de configuração

Propriedade Description Padrão
mocksFile Caminho para o arquivo que contém respostas simuladas de STDIO stdio-mocks.json
blockUnmockedRequests Quando true, impede que o stdin sem correspondência alcance o processo filho false

Opções de linha de comando

Nome Description Padrão
--no-stdio-mocks Desabilitar o carregamento de respostas simuladas do STDIO false
--stdio-mocks-file Caminho para o arquivo que contém respostas simuladas de STDIO -

Exemplos de arquivo de simulações

A seguir estão exemplos de objetos fictícios do STDIO.

Responder com stdout

Responda ao stdin que contém um texto específico com uma resposta stdout.

Arquivo: 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"
      }
    }
  ]
}

Responder com stderr

Responda ao stdin com uma mensagem de erro no stderr.

Arquivo: 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"
      }
    }
  ]
}

Usar espaços reservados do stdin

Use @stdin.body.* espaços reservados para incluir dinamicamente valores de stdin na resposta.

Arquivo: 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"
      }
    }
  ]
}

Os seguintes espaços reservados estão disponíveis:

Placeholder Description
@stdin.body.id JSON-RPC ID da solicitação
@stdin.body.method JSON-RPC nome do método
@stdin.body.params.name Acesso a propriedades aninhadas

Carregar resposta do arquivo

Carregue o conteúdo de resposta simulada de um arquivo externo usando @filename a sintaxe.

Arquivo: 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"
      }
    }
  ]
}

Arquivo: initialize-response.json

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

Responder na nª ocorrência

Responda somente depois de interceptar o stdin correspondente pela nª vez.

Arquivo: 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"
      }
    }
  ]
}

Propriedades do arquivo simulado

Propriedade Description Obrigatório
request Objeto request que define o stdin a ser correspondido sim
response Objeto de resposta que define a resposta a ser retornada sim

Objeto da solicitação

Cada solicitação tem as seguintes propriedades:

Propriedade Description Obrigatório Valor padrão Valor de amostra
bodyFragment Uma cadeia de caracteres que deve estar presente no stdin sim tools/list
nth Responder somente ao interceptar a solicitação pela nª vez no 2

Objeto de resposta

Cada resposta tem as seguintes propriedades:

Propriedade Description Obrigatório Valor padrão Valor de amostra
stdout Conteúdo a ser enviado para stdout no vazio {"result": "ok"}\n
stderr Conteúdo a ser enviado para stderr no vazio Error: Something went wrong\n

Comentários de resposta

Se você quiser carregar o conteúdo da resposta de um arquivo, defina a propriedade ou stderr a stdout propriedade como um valor de cadeia de caracteres que começa com @ seguido pelo caminho do arquivo em relação ao arquivo de simulações. Por exemplo, @response.json retorna o conteúdo armazenado no response.json arquivo no mesmo diretório que o arquivo de simulações.

Para incluir dinamicamente valores de stdin na resposta, use @stdin.body.* espaços reservados. Por exemplo, @stdin.body.id retorna o valor da id propriedade do stdin JSON.

Comentários do plug-in

Esse plug-in foi projetado para uso com o stdio comando para interceptar e simular a comunicação stdio com executáveis locais. É útil para testar e depurar servidores MCP (Model Context Protocol) e outros aplicativos baseados em STDIO.

Quando blockUnmockedRequests está definido como true, qualquer stdin que não corresponda a uma simulação é consumido e não encaminhado para o processo filho. Bloquear solicitações não bloqueadas é útil quando você deseja simular totalmente o comportamento de um executável sem executar sua lógica real.

Próxima etapa