次の方法で共有


MCP サーバーの STDIO 応答を模擬する

最新の AI 開発では、STDIO 、特にモデル コンテキスト プロトコル (MCP) サーバーを介して通信するローカル ツールにますます依存しています。 これらのサーバーは、stdin 経由で JSON-RPC 要求を受信し、stdout 経由で JSON-RPC 応答を送信します。 開発プロキシを使用すると、実際のサーバー ロジックを実行せずに、STDIO 通信をインターセプトしてモックし、AI クライアント アプリケーションをテストできます。

[前提条件]

MCP サーバーの応答をモックする

MCP サーバーの応答をモックするには、stdioMockStdioResponsePlugin コマンドを使用します。 プラグインは stdin をインターセプトし、stdout または stderr を介してモック応答を返します。

1. 開発プロキシ構成ファイルを作成する

次の内容を含む devproxyrc.json ファイルを作成します。

{
  "$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"
    },
    {
      "name": "DevToolsPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "devTools"
    }
  ],
  "devTools": {
    "preferredBrowser": "Edge"
  },
  "mockStdioResponsePlugin": {
    "mocksFile": "stdio-mocks.json"
  }
}

2. モック ファイルを作成する

MCP サーバーのモック応答を含む 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": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{\"tools\":{}},\"serverInfo\":{\"name\":\"Mock MCP Server\",\"version\":\"1.0.0\"}}}\n"
      }
    },
    {
      "request": {
        "bodyFragment": "tools/list"
      },
      "response": {
        "stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"tools\":[{\"name\":\"get_weather\",\"description\":\"Get current weather for a location\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"location\":{\"type\":\"string\",\"description\":\"City name\"}},\"required\":[\"location\"]}}]}}\n"
      }
    },
    {
      "request": {
        "bodyFragment": "tools/call"
      },
      "response": {
        "stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Mock response from the tool\"}]}}\n"
      }
    }
  ]
}

3. 開発プロキシを起動する

STDIO コマンドを使用して開発プロキシを実行し、実行するコマンドを指定します。

devproxy stdio npx -y @modelcontextprotocol/server-filesystem

開発プロキシは、MCP サーバーを子プロセスとして起動し、すべての stdin/stdout 通信をインターセプトします。 stdin にモックの bodyFragmentに一致するテキストが含まれている場合、Dev Proxy は実際のサーバーに要求を転送するのではなく、モック応答を返します。

動的応答にプレースホルダーを使用する

要求からの値を含む動的応答を作成するには、 @stdin.body.* プレースホルダーを使用します。

{
  "mocks": [
    {
      "request": {
        "bodyFragment": "echo"
      },
      "response": {
        "stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"message\":\"You said: @stdin.body.params.text\"}}\n"
      }
    }
  ]
}

使用可能なプレースホルダー:

Placeholder Description
@stdin.body.id JSON-RPC 要求 ID
@stdin.body.method JSON-RPC メソッド名
@stdin.body.params.* 要求パラメーターへのアクセス

モックされていない要求をブロックする

ロックされていない要求が子プロセスに到達するのを防ぐには、 blockUnmockedRequeststrue に設定します。

{
  "mockStdioResponsePlugin": {
    "mocksFile": "stdio-mocks.json",
    "blockUnmockedRequests": true
  }
}

モックされていない要求をブロックすることは、実際のロジックを実行せずに MCP サーバーを完全にモックする場合に便利です。

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

複雑な応答の場合は、外部ファイルからコンテンツを読み込みます。

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

DevTools で STDIO トラフィックを検査する

DevToolsPluginを有効にすると、Dev Proxy によって Chrome DevTools が開き、すべての STDIO 通信を検査できます。

  • [ネットワーク] タブ: すべての stdin/stdout/stderr メッセージを表示する
  • URL: メッセージは次のように表示されます。 stdio://command-name
  • メソッド: 要求は次のように表示されます。 stdin
  • 状態コード: stdout は 200、 stderr は 500 として表示されます
  • タイミング: 各要求/応答にかかった時間を確認する

DevToolsPluginを使用することは、AI クライアントと MCP サーバー間の通信の問題をデバッグする上で非常に重要です。

待機時間をシミュレートする

アプリケーションが低速の MCP サーバー応答を処理する方法をテストするには、 LatencyPluginを追加します。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/rc.schema.json",
  "plugins": [
    {
      "name": "LatencyPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "latencyPlugin"
    },
    {
      "name": "MockStdioResponsePlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "mockStdioResponsePlugin"
    }
  ],
  "latencyPlugin": {
    "minMs": 100,
    "maxMs": 500
  },
  "mockStdioResponsePlugin": {
    "mocksFile": "stdio-mocks.json"
  }
}

次のステップ

STDIO プロキシ機能の詳細については、以下をご覧ください。