Sdílet prostřednictvím


MockStdioResponsePlugin

Simuluje odpovědi pro aplikace založené na STDIO, jako jsou servery MCP (Model Context Protocol).

Definice instance modulu plug-in

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

Příklad konfigurace

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

Vlastnosti konfigurace

Vlastnictví Description Výchozí
mocksFile Cesta k souboru obsahujícímu odpovědi napodobení STDIO stdio-mocks.json
blockUnmockedRequests Pokud truezabrání nedosahujícímu stdinu do podřízeného procesu. false

Možnosti příkazového řádku

Název Description Výchozí
--no-stdio-mocks Zákaz načítání napodobených odpovědí STDIO false
--stdio-mocks-file Cesta k souboru obsahujícímu odpovědi napodobení STDIO -

Příklady souborů Napodobení

Následují příklady objektů napodobení STDIO.

Reakce pomocí stdoutu

Odpovězte na stdin obsahující konkrétní text s odpovědí stdout.

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

Reakce pomocí stderru

Odpovězte na stdin chybovou zprávou na stderru.

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

Použití zástupných symbolů z stdin

Pomocí @stdin.body.* zástupných symbolů můžete do odpovědi dynamicky zahrnout hodnoty ze stdinu.

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

K dispozici jsou následující zástupné symboly:

Placeholder Description
@stdin.body.id ID požadavku JSON-RPC
@stdin.body.method název metody JSON-RPC
@stdin.body.params.name Přístup k vnořené vlastnosti

Načtení odpovědi ze souboru

Načtěte obsah napodobení odpovědi z externího souboru pomocí @filename syntaxe.

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

Soubor: initialize-response.json

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

Reakce na n-tý výskyt

Odpovězte pouze po zachycení odpovídajícího intervalu stdin pro nth time.

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

Napodobení vlastností souboru

Vlastnictví Description Povinné
request Request object that defines the stdin to match yes
response Objekt odpovědi , který definuje odpověď k vrácení yes

Objekt požadavku

Každý požadavek má následující vlastnosti:

Vlastnictví Description Povinné Výchozí hodnota Ukázková hodnota
bodyFragment Řetězec, který by měl být v stdin yes tools/list
nth Odpověď pouze při zachycování požadavku na n-tého času no 2

Objekt odpovědi

Každá odpověď má následující vlastnosti:

Vlastnictví Description Povinné Výchozí hodnota Ukázková hodnota
stdout Obsah, který se má odeslat do stdoutu no empty {"result": "ok"}\n
stderr Obsah k odeslání do stderru no empty Error: Something went wrong\n

Poznámky k odpovědím

Pokud chcete načíst obsah odpovědi ze souboru, nastavte stdout hodnotu řetězce nebo stderr vlastnosti, která začíná @ cestou k souboru vzhledem k souboru napodobení. Vrátí například @response.json obsah uložený v response.json souboru ve stejném adresáři jako soubor napodobování.

Pokud chcete do odpovědi dynamicky zahrnout hodnoty ze stdin, použijte @stdin.body.* zástupné symboly. Například @stdin.body.id vrátí hodnotu id vlastnosti ze stdin JSON.

Poznámky k modulům plug-in

Tento modul plug-in je určený pro použití s příkazemstdio k zachycení a napodobení komunikace STDIO s místními spustitelnými soubory. Je užitečné pro testování a ladění serverů MCP (Model Context Protocol) a dalších aplikací založených na STDIO.

Pokud blockUnmockedRequests je nastavená hodnota true, všechny stdin, které neodpovídají napodobení, se spotřebují a nepřepošla do podřízeného procesu. Blokování neockovaných požadavků je užitečné, když chcete plně napodobení chování spustitelného souboru bez spuštění jeho skutečné logiky.

Další krok