Delen via


MockStdioResponsePlugin

Simuleert antwoorden voor OP STDIO gebaseerde toepassingen, zoals MCP-servers (Model Context Protocol).

Definitie van invoegtoepassingexemplaren

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

Configuratievoorbeeld

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

Configuratie-eigenschappen

Vastgoed Description Verstek
mocksFile Pad naar het bestand met STDIO-mockantwoorden stdio-mocks.json
blockUnmockedRequests Wanneer true, voorkomt u dat niet-overeenkomende stdin het onderliggende proces bereikt false

Opdrachtregelopties

Naam Description Verstek
--no-stdio-mocks Het laden van STDIO-mockantwoorden uitschakelen false
--stdio-mocks-file Pad naar het bestand met STDIO-mockantwoorden -

Voorbeelden van mocks-bestanden

Hieronder volgen voorbeelden van STDIO-mockobjecten.

Reageren met stdout

Reageer op stdin met een specifieke tekst met een stdout-antwoord.

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

Reageren met stderr

Reageer op stdin met een foutbericht op stderr.

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

Tijdelijke aanduidingen uit stdin gebruiken

Gebruik @stdin.body.* tijdelijke aanduidingen om dynamisch waarden uit stdin op te nemen in het antwoord.

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

De volgende tijdelijke aanduidingen zijn beschikbaar:

Placeholder Description
@stdin.body.id JSON-RPC aanvraag-id
@stdin.body.method JSON-RPC methodenaam
@stdin.body.params.name Toegang tot geneste eigenschappen

Reactie van bestand laden

Laad de inhoud van het gesimuleerde antwoord uit een extern bestand met behulp van @filename de syntaxis.

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

Bestand: initialize-response.json

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

Reageren op nde instantie

Reageer pas na het onderscheppen van de overeenkomende stdin voor de nde keer.

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

Eigenschappen van mocks-bestanden

Vastgoed Description Verplicht
request Aanvraagobject waarmee de stdin moet worden vergeleken yes
response Antwoordobject dat het antwoord definieert dat moet worden geretourneerd yes

Verzoekobject

Elke aanvraag heeft de volgende eigenschappen:

Vastgoed Description Verplicht Standaardwaarde Voorbeeldwaarde
bodyFragment Een tekenreeks die aanwezig moet zijn in stdin yes tools/list
nth Reageer alleen wanneer u de aanvraag voor de nde keer onderschept no 2

Antwoordobject

Elk antwoord heeft de volgende eigenschappen:

Vastgoed Description Verplicht Standaardwaarde Voorbeeldwaarde
stdout Inhoud die moet worden verzonden naar stdout no empty {"result": "ok"}\n
stderr Inhoud die moet worden verzonden naar stderr no empty Error: Something went wrong\n

Reactie opmerkingen

Als u antwoordinhoud uit een bestand wilt laden, stelt u de stdout of stderr eigenschap in op een tekenreekswaarde die begint met @ gevolgd door het bestandspad ten opzichte van het mocks-bestand. Retourneert bijvoorbeeld @response.json de inhoud die is opgeslagen in het response.json bestand in dezelfde map als het mocks-bestand.

Als u dynamisch waarden uit stdin in het antwoord wilt opnemen, gebruikt u @stdin.body.* tijdelijke aanduidingen. Retourneert bijvoorbeeld @stdin.body.id de waarde van de id eigenschap van de stdin JSON.

Opmerkingen bij invoegtoepassing

Deze invoegtoepassing is ontworpen voor gebruik met de stdio opdracht om STDIO-communicatie te onderscheppen en te mocken met lokale uitvoerbare bestanden. Het is handig voor het testen en opsporen van fouten in MCP-servers (Model Context Protocol) en andere OP STDIO gebaseerde toepassingen.

Wanneer blockUnmockedRequests dit is ingesteld true, wordt een stdin die niet overeenkomt met een mock gebruikt en niet doorgestuurd naar het onderliggende proces. Het blokkeren van niet-versleutelde aanvragen is handig wanneer u het gedrag van een uitvoerbaar bestand volledig wilt nalopen zonder de werkelijke logica uit te voeren.

Volgende stap