Compartir a través de


MockStdioResponsePlugin

Simula respuestas para aplicaciones basadas en STDIO, como servidores de Protocolo de contexto de modelo (MCP).

Definición de instancia del complemento

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

Ejemplo de configuración

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

Propiedades de configuración

Propiedad Description Predeterminado
mocksFile Ruta de acceso al archivo que contiene respuestas ficticias STDIO stdio-mocks.json
blockUnmockedRequests Cuando true, impide que stdin sin coincidencia llegue al proceso secundario. false

Opciones de línea de comandos

Nombre Description Predeterminado
--no-stdio-mocks Deshabilitar la carga de respuestas ficticias de STDIO false
--stdio-mocks-file Ruta de acceso al archivo que contiene respuestas ficticias STDIO -

Ejemplos de archivos ficticios

A continuación se muestran ejemplos de objetos ficticios de STDIO.

Responder con stdout

Responda a stdin que contiene un texto específico con una respuesta stdout.

Archivo: 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 con stderr

Responda a stdin con un mensaje de error en stderr.

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

Uso de marcadores de posición de stdin

Use @stdin.body.* marcadores de posición para incluir dinámicamente valores de stdin en la respuesta.

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

Los siguientes marcadores de posición están disponibles:

Placeholder Description
@stdin.body.id id. de solicitud de JSON-RPC
@stdin.body.method nombre del método JSON-RPC
@stdin.body.params.name Acceso a propiedades anidadas

Carga de la respuesta desde el archivo

Cargue el contenido de respuesta ficticio desde un archivo externo mediante @filename la sintaxis.

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

Archivo: 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 la nésima repetición

Responda solo después de interceptar el stdin coincidente por primera vez.

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

Propiedades de archivo simuladas

Propiedad Description Obligatorio
request Objeto de solicitud que define el stdin que debe coincidir
response Objeto response que define la respuesta que se va a devolver

Request (objeto)

Cada solicitud tiene las siguientes propiedades:

Propiedad Description Obligatorio Valor predeterminado Valor de ejemplo
bodyFragment Cadena que debe estar presente en stdin tools/list
nth Responder solo al interceptar la solicitud de la nª vez no 2

Objeto Response

Cada respuesta tiene las siguientes propiedades:

Propiedad Description Obligatorio Valor predeterminado Valor de ejemplo
stdout Contenido que se va a enviar a stdout no vacío {"result": "ok"}\n
stderr Contenido que se va a enviar a stderr no vacío Error: Something went wrong\n

Comentarios de respuesta

Si desea cargar contenido de respuesta desde un archivo, establezca la stdout propiedad o stderr en un valor de cadena que comience con @ seguido de la ruta de acceso del archivo en relación con el archivo ficticio. Por ejemplo, @response.json devuelve el contenido almacenado en el archivo en el response.json mismo directorio que el archivo ficticio.

Para incluir dinámicamente valores de stdin en la respuesta, use @stdin.body.* marcadores de posición. Por ejemplo, @stdin.body.id devuelve el valor de la id propiedad del json stdin.

Comentarios del complemento

Este complemento está diseñado para su uso con el stdio comando para interceptar y simular la comunicación STDIO con ejecutables locales. Resulta útil para probar y depurar servidores del Protocolo de contexto de modelo (MCP) y otras aplicaciones basadas en STDIO.

Cuando blockUnmockedRequests se establece trueen , cualquier stdin que no coincida con un simulacro se consume y no se reenvía al proceso secundario. Bloquear las solicitudes no habilitadas es útil cuando se quiere simular completamente el comportamiento de un archivo ejecutable sin ejecutar su lógica real.

Paso siguiente