Partilhar via


MockStdioResponsePlugin

Simula respostas para aplicações baseadas em STDIO, como servidores Model Context Protocol (MCP).

Definição de instância de 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 Predefinido
mocksFile Caminho para o ficheiro que contém respostas simuladas STDIO stdio-mocks.json
blockUnmockedRequests Quando true, impede que um stdin não combinado chegue ao processo filho false

Opções da linha de comandos

Nome Description Predefinido
--no-stdio-mocks Desativar o carregamento das respostas simuladas STDIO false
--stdio-mocks-file Caminho para o ficheiro que contém respostas simuladas STDIO -

Exemplos de arquivos simulados

Seguem-se exemplos de objetos mock STDIO.

Responda com o aviso

Responda a stdin contendo um texto específico com uma resposta stdout.

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

Responde com stderr

Responda ao stdin com uma mensagem de erro no stderr.

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

Usa marcadores de posição do stdin

Use @stdin.body.* marcadores de posição para incluir dinamicamente valores do stdin na resposta.

Ficheiro: 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 marcadores estão disponíveis:

Placeholder Description
@stdin.body.id JSON-RPC pedir ID
@stdin.body.method JSON-RPC nome do método
@stdin.body.params.name Acesso à propriedade aninhada

Resposta de carregamento a partir do ficheiro

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

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

Ficheiro: 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 à enésima ocorrência

Responde apenas depois de intercetar o stdin correspondente pela enésima vez.

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

Simula propriedades de arquivo

Propriedade Description Obrigatório
request Objeto de pedido que define o stdin para corresponder yes
response Objeto de resposta que define a resposta a ser retornada yes

Objeto de solicitação

Cada solicitação tem as seguintes propriedades:

Propriedade Description Obrigatório Valor predefinido Valor da amostra
bodyFragment Uma corda que deveria estar presente no stdin yes tools/list
nth Responda apenas quando intercetar o pedido pela enésima vez no 2

Objeto de resposta

Cada resposta tem as seguintes propriedades:

Propriedade Description Obrigatório Valor predefinido Valor da amostra
stdout Contente para enviar ao stdout no empty {"result": "ok"}\n
stderr Conteúdo para enviar para stderr no empty Error: Something went wrong\n

Comentários de resposta

Se quiseres carregar conteúdo de resposta a partir de um ficheiro, define a stdout propriedade or stderr para um valor de string que começa com @ seguido do caminho do ficheiro em relação ao ficheiro mocks. Por exemplo, @response.json devolve o conteúdo armazenado no response.json ficheiro no mesmo diretório do ficheiro mocks.

Para incluir dinamicamente valores do stdin na resposta, use @stdin.body.* marcadores de posição. Por exemplo, @stdin.body.id devolve o valor da id propriedade do JSON stdin.

Comentários sobre plugins

Este plugin foi concebido para ser usado com o stdio comando de interceção e simulação da comunicação STDIO com executáveis locais. É útil para testar e depurar servidores Model Context Protocol (MCP) e outras aplicações baseadas em STDIO.

Quando blockUnmockedRequests está definido para true, qualquer stdin que não corresponda a um mock é consumido e não encaminhado para o processo filho. Bloquear pedidos não simulados é útil quando se quer simular totalmente o comportamento de um executável sem executar a sua lógica real.

Próximo passo