Freigeben über


MockStdioResponsePlugin

Simuliert Antworten für STDIO-basierte Anwendungen, z. B. MCP-Server (Model Context Protocol).

Definition der Plug-In-Instanz

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

Konfigurationsbeispiel

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

Konfigurationseigenschaften

Eigentum Description Standard
mocksFile Pfad zur Datei mit STDIO-Mockantworten stdio-mocks.json
blockUnmockedRequests Wenn true, verhindert, dass nicht übereinstimmende Stdin den untergeordneten Prozess erreicht false

Befehlszeilenoptionen

Name Description Standard
--no-stdio-mocks Deaktivieren des Ladens von STDIO-Pseudoantworten false
--stdio-mocks-file Pfad zur Datei mit STDIO-Mockantworten -

Simulierte Dateibeispiele

Nachfolgend sind Beispiele für STDIO-Modellobjekte aufgeführt.

Antworten mit Stdout

Reagieren Sie auf Stdin mit einem bestimmten Text mit einer Stdout-Antwort.

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

Antworten mit stderr

Reagieren Sie auf Stdin mit einer Fehlermeldung auf stderr.

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

Verwenden von Platzhaltern aus Stdin

Verwenden Sie @stdin.body.* Platzhalter, um Werte aus Stdin in die Antwort dynamisch einzuschließen.

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

Die folgenden Platzhalter sind verfügbar:

Platzhalter Description
@stdin.body.id JSON-RPC Anforderungs-ID
@stdin.body.method JSON-RPC Methodenname
@stdin.body.params.name Zugriff auf geschachtelte Eigenschaften

Laden der Antwort aus Datei

Laden Sie den Pseudoantwortinhalt aus einer externen Datei mithilfe der @filename Syntax.

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

Datei: initialize-response.json

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

Reagieren auf das n. Vorkommen

Antworten Sie erst nach dem Abfangen des übereinstimmenden Stdins für das n. Mal.

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

Simuliert Dateieigenschaften

Eigentum Description Erforderlich
request Anforderungsobjekt , das den zuzuordnenden Stdin definiert ja
response Response-Objekt , das die Antwort definiert, die zurückgegeben werden soll ja

Anforderungsobjekt

Jede Anforderung verfügt über die folgenden Eigenschaften:

Eigentum Description Erforderlich Standardwert Beispielwert
bodyFragment Eine Zeichenfolge, die in stdin vorhanden sein soll ja tools/list
nth Nur antworten, wenn die Anforderung zum n. Mal abgefangen wird nein 2

Antwortobjekt

Jede Antwort weist die folgenden Eigenschaften auf:

Eigentum Description Erforderlich Standardwert Beispielwert
stdout Inhalt, der an Stdout gesendet werden soll nein empty {"result": "ok"}\n
stderr Inhalt, der an Stderr gesendet werden soll nein empty Error: Something went wrong\n

Antwortshinweise

Wenn Sie Antwortinhalte aus einer Datei laden möchten, legen Sie die Eigenschaft stderr auf einen Zeichenfolgenwert fest, der stdout mit @ dem Dateipfad relativ zur Mocks-Datei beginnt. Gibt beispielsweise den Inhalt zurück, @response.json der in der response.json Datei im selben Verzeichnis wie die Mocks-Datei gespeichert ist.

Verwenden Sie @stdin.body.* Platzhalter, um Werte aus Stdin in die Antwort dynamisch einzuschließen. Gibt beispielsweise @stdin.body.id den Wert der id Eigenschaft aus dem stdin JSON-Code zurück.

Plug-In-Hinweise

Dieses Plug-In wurde für die Verwendung mit dem Befehl entwickelt, um die stdio STDIO-Kommunikation mit lokalen ausführbaren Dateien abzufangen und zu modellieren. Es ist nützlich, Modellkontextprotokollserver (MODEL Context Protocol, MCP) und andere STDIO-basierte Anwendungen zu testen und zu debuggen.

Wenn blockUnmockedRequests dieser Wert auf " trueStdin" festgelegt ist, wird jede Stdin, die nicht mit einem Modell übereinstimmt, verbraucht und nicht an den untergeordneten Prozess weitergeleitet. Das Blockieren nicht abgedommter Anforderungen ist nützlich, wenn Sie das Verhalten einer ausführbaren Datei vollständig modellieren möchten, ohne die eigentliche Logik auszuführen.

Nächster Schritt