Udostępnij przez


MockStdioResponsePlugin

Symuluje odpowiedzi dla aplikacji opartych na modelu STDIO, takich jak serwery PROTOKOŁU MCP (Model Context Protocol).

Definicja wystąpienia wtyczki

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

Przykład konfiguracji

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

Właściwości konfiguracji

Majątek Description Default
mocksFile Ścieżka do pliku zawierającego odpowiedzi pozorne STDIO stdio-mocks.json
blockUnmockedRequests Gdy trueprogram uniemożliwia niedopasowane stdin dotarcie do procesu podrzędnego false

Opcje wiersza polecenia

Name Description Default
--no-stdio-mocks Wyłączanie ładowania odpowiedzi pozornych STDIO false
--stdio-mocks-file Ścieżka do pliku zawierającego odpowiedzi pozorne STDIO -

Przykłady plików makiety

Poniżej przedstawiono przykłady obiektów pozornych STDIO.

Odpowiadanie za pomocą stdout

Odpowiedz na stdin zawierające określony tekst z odpowiedzią stdout.

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

Odpowiadanie za pomocą narzędzia stderr

Odpowiedz na stdin za pomocą komunikatu o błędzie w stderr.

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

Używanie symboli zastępczych ze stdin

Użyj @stdin.body.* symboli zastępczych, aby dynamicznie dołączać wartości ze stdin w odpowiedzi.

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

Dostępne są następujące symbole zastępcze:

Placeholder Description
@stdin.body.id identyfikator żądania JSON-RPC
@stdin.body.method nazwa metody JSON-RPC
@stdin.body.params.name Dostęp do właściwości zagnieżdżonych

Ładowanie odpowiedzi z pliku

Załaduj pozorną zawartość odpowiedzi z pliku zewnętrznego przy użyciu @filename składni.

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

Plik: initialize-response.json

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

Odpowiedz w n-tym wystąpieniu

Odpowiedź dopiero po przechwyceniu pasującego stdin po raz n..

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

Makietuje właściwości pliku

Majątek Description Wymagane
request Zażądaj obiektu definiującego element stdin do dopasowania yes
response Obiekt odpowiedzi definiujący odpowiedź do zwrócenia yes

Obiekt żądania

Każde żądanie ma następujące właściwości:

Majątek Description Wymagane Wartość domyślna Przykładowa wartość
bodyFragment Ciąg, który powinien być obecny w stdin yes tools/list
nth Odpowiadaj tylko podczas przechwytywania żądania przez n-ty no 2

Obiekt odpowiedzi

Każda odpowiedź ma następujące właściwości:

Majątek Description Wymagane Wartość domyślna Przykładowa wartość
stdout Zawartość do wysłania do elementu stdout no empty {"result": "ok"}\n
stderr Zawartość do wysłania do narzędzia stderr no empty Error: Something went wrong\n

Uwagi odpowiedzi

Jeśli chcesz załadować zawartość odpowiedzi z pliku, ustaw stdout właściwość or stderr na wartość ciągu, która zaczyna się @ od ścieżki pliku w stosunku do pliku makiety. Na przykład @response.json zwraca zawartość przechowywaną w response.json pliku w tym samym katalogu co plik makiety.

Aby dynamicznie dołączać wartości ze stdin w odpowiedzi, użyj @stdin.body.* symboli zastępczych. Na przykład @stdin.body.id zwraca wartość id właściwości ze stdin JSON.

Uwagi dotyczące wtyczki

Ta wtyczka jest przeznaczona do użycia z poleceniemstdio przechwytywania i pozorowania komunikacji STDIO z lokalnymi plikami wykonywalnymi. Jest to przydatne do testowania i debugowania serwerów protokołu MCP (Model Context Protocol) i innych aplikacji opartych na stDIO.

Gdy blockUnmockedRequests jest ustawiona wartość true, każdy stdin, który nie pasuje do makiety, jest używany i nie jest przekazywany do procesu podrzędnego. Blokowanie niezadokowanych żądań jest przydatne, gdy chcesz w pełni wyśmiewać zachowanie pliku wykonywalnego bez uruchamiania rzeczywistej logiki.

Następny krok