次の方法で共有


MockStdioResponsePlugin

モデル コンテキスト プロトコル (MCP) サーバーなど、STDIO ベースのアプリケーションの応答をシミュレートします。

プラグイン インスタンスの定義

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

構成の例

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

構成プロパティ

プロパティ Description 既定値
mocksFile STDIO モック応答を含むファイルへのパス stdio-mocks.json
blockUnmockedRequests trueすると、一致しない stdin が子プロセスに到達するのを防ぎます false

コマンドライン オプション

名前 Description 既定値
--no-stdio-mocks STDIO モック応答の読み込みを無効にする false
--stdio-mocks-file STDIO モック応答を含むファイルへのパス -

モック ファイルの例

STDIO モック オブジェクトの例を次に示します。

stdout で応答する

stdout 応答を持つ特定のテキストを含む stdin に応答します。

ファイル: 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"
      }
    }
  ]
}

stderr で応答する

stderr のエラー メッセージで stdin に応答します。

ファイル: 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"
      }
    }
  ]
}

stdin のプレースホルダーを使用する

@stdin.body.*プレースホルダーを使用して、応答に stdin の値を動的に含めます。

ファイル: 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"
      }
    }
  ]
}

次のプレースホルダーを使用できます。

Placeholder Description
@stdin.body.id JSON-RPC 要求 ID
@stdin.body.method JSON-RPC メソッド名
@stdin.body.params.name 入れ子になったプロパティ アクセス

ファイルから応答を読み込む

@filename構文を使用して、外部ファイルからモック応答コンテンツを読み込みます。

ファイル: 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"
      }
    }
  ]
}

ファイル: initialize-response.json

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

N 回目の出現時に応答する

n 回目に一致する stdin をインターセプトした後にのみ応答します。

ファイル: 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"
      }
    }
  ]
}

モック ファイルのプロパティ

プロパティ Description 必須
request 一致する stdin を定義する要求オブジェクト yes
response 返す応答 を定義する Response オブジェクト yes

Request オブジェクト

各要求には、次のプロパティがあります。

プロパティ Description 必須 既定値 サンプル値
bodyFragment stdin に存在する文字列 yes tools/list
nth n 回目の要求をインターセプトした場合にのみ応答する no 2

Response オブジェクト

各応答には、次のプロパティがあります。

プロパティ Description 必須 既定値 サンプル値
stdout stdout に送信するコンテンツ no {"result": "ok"}\n
stderr stderr に送信するコンテンツ no Error: Something went wrong\n

応答の備考

ファイルから応答コンテンツを読み込む場合は、 stdout プロパティまたは stderr プロパティを、 @ で始まる文字列値に設定し、その後にモック ファイルを基準にしたファイル パスを指定します。 たとえば、 @response.json はモック ファイルと同じディレクトリ内の response.json ファイルに格納されているコンテンツを返します。

応答に stdin の値を動的に含めるには、プレースホルダー @stdin.body.* 使用します。 たとえば、 @stdin.body.id は stdin JSON から id プロパティの値を返します。

プラグインの解説

このプラグインは、ローカル実行可能ファイルとの STDIO 通信をインターセプトしてモックするためにstdio コマンドで使用するように設計されています。 これは、モデル コンテキスト プロトコル (MCP) サーバーやその他の STDIO ベースのアプリケーションのテストとデバッグに役立ちます。

blockUnmockedRequeststrue に設定されている場合、モックに一致しない stdin が使用され、子プロセスに転送されません。 ブロックされていない要求をブロックすると、実際のロジックを実行せずに実行可能ファイルの動作を完全にモックする場合に便利です。

次のステップ