Bagikan melalui


MockStdioResponsePlugin

Mensimulasikan respons untuk aplikasi berbasis STDIO, seperti server Model Context Protocol (MCP).

Definisi instans plugin

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

Contoh konfigurasi

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

Properti konfigurasi

Harta benda Description Bawaan
mocksFile Jalur ke file yang berisi respons tiruan STDIO stdio-mocks.json
blockUnmockedRequests Ketika true, mencegah stdin yang tidak cocok mencapai proses anak false

Opsi Baris Perintah

Nama Description Bawaan
--no-stdio-mocks Menonaktifkan pemuatan respons tiruan STDIO false
--stdio-mocks-file Jalur ke file yang berisi respons tiruan STDIO -

Contoh file tiruan

Berikut ini adalah contoh objek tiruan STDIO.

Merespons dengan stdout

Tanggapi stdin yang berisi teks tertentu dengan respons stdout.

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

Merespons dengan stderr

Tanggapi stdin dengan pesan kesalahan di stderr.

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

Menggunakan tempat penampung dari stdin

Gunakan @stdin.body.* tempat penampung untuk menyertakan nilai dari stdin secara dinamis dalam respons.

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

Tempat penampung berikut tersedia:

Placeholder Description
@stdin.body.id ID permintaan JSON-RPC
@stdin.body.method nama metode JSON-RPC
@stdin.body.params.name Akses properti berlapis

Memuat respons dari file

Muat konten respons tiruan dari file eksternal menggunakan @filename sintaksis.

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

File: initialize-response.json

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

Merespons kemunculan ke-n

Merespons hanya setelah mencegat stdin yang cocok untuk ke-n kalinya.

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

Properti file tiruan

Harta benda Description Diperlukan
request Objek permintaan yang mendefinisikan stdin agar cocok yes
response Objek respons yang menentukan respons untuk dikembalikan yes

Objek permintaan

Setiap permintaan memiliki properti berikut:

Harta benda Description Diperlukan Nilai standar Nilai sampel
bodyFragment String yang harus ada di stdin yes tools/list
nth Merespons hanya saat mencegat permintaan untuk ke-n kalinya no 2

Objek respons

Setiap respons memiliki properti berikut:

Harta benda Description Diperlukan Nilai standar Nilai sampel
stdout Konten untuk dikirim ke stdout no empty {"result": "ok"}\n
stderr Konten yang akan dikirim ke stderr no empty Error: Something went wrong\n

Komentar respons

Jika Anda ingin memuat konten respons dari file, atur stdout properti atau stderr ke nilai string yang dimulai dengan diikuti dengan @ jalur file relatif terhadap file tiruan. Misalnya, @response.json mengembalikan konten yang disimpan dalam response.json file dalam direktori yang sama dengan file tiruan.

Untuk menyertakan nilai secara dinamis dari stdin dalam respons, gunakan @stdin.body.* tempat penampung. Misalnya, @stdin.body.id mengembalikan nilai id properti dari stdin JSON.

Komentar plugin

Plugin ini dirancang untuk digunakan dengan stdio perintah untuk mencegat dan meniru komunikasi STDIO dengan executable lokal. Ini berguna untuk menguji dan men-debug server Model Context Protocol (MCP) dan aplikasi berbasis STDIO lainnya.

Ketika blockUnmockedRequests diatur ke true, stdin apa pun yang tidak cocok dengan tiruan dikonsumsi dan tidak diteruskan ke proses anak. Memblokir permintaan yang tidak dimock berguna ketika Anda ingin sepenuhnya meniru perilaku yang dapat dieksekusi tanpa menjalankan logika aktualnya.

Langkah selanjutnya