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

Coincidencia de solicitud mediante una expresión regular

Use bodyRegex para buscar coincidencias con stdin mediante una expresión regular. Esto resulta útil cuando necesita coincidencias precisas para evitar la ambigüedad con bodyFragment la coincidencia de subcadenas.

Archivo: stdio-mocks.json

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

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 no tools/list
bodyRegex Expresión regular que se va a comparar con stdin. Tiene prioridad sobre bodyFragment cuándo se especifican ambos. no ^tools/
nth Responder solo al interceptar la solicitud de la nª vez no 2

Nota:

Se bodyFragment requiere o bodyRegex para que coincida con una solicitud. Cuando se especifican ambos, bodyRegex tiene prioridad.

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