最新の AI 開発では、STDIO 、特にモデル コンテキスト プロトコル (MCP) サーバーを介して通信するローカル ツールにますます依存しています。 これらのサーバーは、stdin 経由で JSON-RPC 要求を受信し、stdout 経由で JSON-RPC 応答を送信します。 開発プロキシを使用すると、実際のサーバー ロジックを実行せずに、STDIO 通信をインターセプトしてモックし、AI クライアント アプリケーションをテストできます。
[前提条件]
MCP サーバーの応答をモックする
MCP サーバーの応答をモックするには、stdioで MockStdioResponsePlugin コマンドを使用します。 プラグインは 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.* |
要求パラメーターへのアクセス |
モックされていない要求をブロックする
ロックされていない要求が子プロセスに到達するのを防ぐには、 blockUnmockedRequests を true に設定します。
{
"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 プロキシ機能の詳細については、以下をご覧ください。
Dev Proxy