Dela via


MockStdioResponsePlugin

Simulerar svar för STDIO-baserade program, till exempel MCP-servrar (Model Context Protocol).

Definition av plugin-instans

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

Konfigurationsexempel

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

Konfigurationsegenskaper

Fastighet Description Förinställning
mocksFile Sökväg till filen som innehåller STDIO-falska svar stdio-mocks.json
blockUnmockedRequests När true, förhindrar att omatchad stdin når den underordnade processen false

Kommandoradsalternativ

Namn Description Förinställning
--no-stdio-mocks Inaktivera inläsning av STDIO-falska svar false
--stdio-mocks-file Sökväg till filen som innehåller STDIO-falska svar -

Simulerar filexempel

Här följer exempel på STDIO-modellobjekt.

Svara med stdout

Svara på stdin som innehåller en specifik text med ett stdout-svar.

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

Svara med stderr

Svara på stdin med ett felmeddelande på stderr.

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

Använda platshållare från stdin

Använd @stdin.body.* platshållare för att dynamiskt inkludera värden från stdin i svaret.

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

Följande platshållare är tillgängliga:

Placeholder Description
@stdin.body.id JSON-RPC begärande-ID
@stdin.body.method JSON-RPC metodnamn
@stdin.body.params.name Kapslad egenskapsåtkomst

Läs in svar från fil

Läs in det falska svarsinnehållet från en extern fil med hjälp av @filename syntax.

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

Fil: initialize-response.json

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

Svara vid nth-förekomst

Svara först efter att matchande stdin har fångats upp för den n:e gången.

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

Simulerar filegenskaper

Fastighet Description Krävs
request Begär objekt som definierar den stdin som ska matcha yes
response Svarsobjekt som definierar svaret för att returnera yes

Begär objekt

Varje begäran har följande egenskaper:

Fastighet Description Krävs Standardvärde Exempelvärde
bodyFragment En sträng som ska finnas i stdin yes tools/list
nth Svara endast när begäran fångas upp för den n:e gången no 2

Svarsobjekt

Varje svar har följande egenskaper:

Fastighet Description Krävs Standardvärde Exempelvärde
stdout Innehåll som ska skickas till stdout no tom {"result": "ok"}\n
stderr Innehåll som ska skickas till stderr no tom Error: Something went wrong\n

Svarskommentarer

Om du vill läsa in svarsinnehåll från en fil anger du stdout egenskapen eller stderr till ett strängvärde som börjar med @ följt av filsökvägen i förhållande till mocks-filen. Returnerar till exempel @response.json innehållet som lagras i response.json filen i samma katalog som mocks-filen.

Använd platshållare för att dynamiskt inkludera värden från stdin i svaret @stdin.body.* . Returnerar @stdin.body.id till exempel värdet för id egenskapen från stdin JSON.

Kommentarer om plugin-program

Det här plugin-programmet är utformat för användning med stdio kommandot för att fånga upp och håna STDIO-kommunikation med lokala körbara filer. Det är användbart för testning och felsökning av MCP-servrar (Model Context Protocol) och andra STDIO-baserade program.

När blockUnmockedRequests är inställt på trueförbrukas alla stdin som inte matchar en mock och vidarebefordras inte till den underordnade processen. Det är användbart att blockera oskyddade begäranden när du vill håna beteendet för en körbar fil utan att köra den faktiska logiken.

Nästa steg