Aracılığıyla paylaş


MockStdioResponsePlugin

Model Bağlam Protokolü (MCP) sunucuları gibi STDIO tabanlı uygulamalar için yanıtları simüle eder.

Eklenti örneği tanımı

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

Yapılandırma örneği

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

Yapılandırma özellikleri

Mülkiyet Description Varsayılan
mocksFile STDIO sahte yanıtlarını içeren dosyanın yolu stdio-mocks.json
blockUnmockedRequests olduğunda true, eşleşmeyen stdin'in alt işleme ulaşmasını engeller false

Komut satırı seçenekleri

İsim Description Varsayılan
--no-stdio-mocks STDIO sahte yanıtlarını yüklemeyi devre dışı bırakma false
--stdio-mocks-file STDIO sahte yanıtlarını içeren dosyanın yolu -

Sahte dosya örnekleri

Aşağıda STDIO sahte nesnelerine örnekler verilmiştir.

stdout ile yanıt verme

Stdout yanıtıyla belirli bir metin içeren stdin'e yanıt verin.

Dosya: 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 ile yanıt verme

stderr'da bir hata iletisiyle stdin'e yanıt verin.

Dosya: 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'den yer tutucuları kullanma

Yanıta stdin değerlerini dinamik olarak eklemek için yer tutucuları kullanın @stdin.body.* .

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

Aşağıdaki yer tutucular kullanılabilir:

Placeholder Description
@stdin.body.id İstek kimliğini JSON-RPC
@stdin.body.method JSON-RPC yöntem adı
@stdin.body.params.name İç içe özellik erişimi

Dosyadan yanıt yükleme

Söz dizimini kullanarak @filename bir dış dosyadan sahte yanıt içeriğini yükleyin.

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

Dosya: 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. oluşumda yanıtla

Yalnızca n. kez eşleşen stdin'i kestikten sonra yanıt verin.

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

Sahte dosya özellikleri

Mülkiyet Description Gerekli
request Eşleşecek stdin'i tanımlayan request nesnesi yes
response Döndürülecek yanıtı tanımlayan yanıt nesnesi yes

İstek nesnesi

Her istek aşağıdaki özelliklere sahiptir:

Mülkiyet Description Gerekli Varsayılan değer Örnek değer
bodyFragment stdin içinde mevcut olması gereken bir dize yes tools/list
nth Yalnızca isteğin n. kez araya girilmesiyle yanıt verme no 2

Yanıt nesnesi

Her yanıt aşağıdaki özelliklere sahiptir:

Mülkiyet Description Gerekli Varsayılan değer Örnek değer
stdout stdout'a gönderilecek içerik no boş {"result": "ok"}\n
stderr Stderr'a gönderilecek içerik no boş Error: Something went wrong\n

Yanıt açıklamaları

Bir dosyadan yanıt içeriği yüklemek istiyorsanız, or stderr özelliğini sahte dosyaya göre dosya yolu ile @ başlayan bir dize değeri olarak ayarlayınstdout. Örneğin, @response.json sahte dosyayla response.json aynı dizindeki dosyada depolanan içeriği döndürür.

Stdin değerlerini yanıta dinamik olarak eklemek için yer tutucuları kullanın @stdin.body.* . Örneğin, @stdin.body.id stdin JSON'dan özelliğinin değerini id döndürür.

Eklenti açıklamaları

Bu eklenti, yerel yürütülebilir dosyalarla STDIO iletişimini kesmek ve taklit etmek için komutuyla kullanılmak üzere tasarlanmıştır.stdio Model Bağlam Protokolü (MCP) sunucularını ve diğer STDIO tabanlı uygulamaları test edip hata ayıklamak için kullanışlıdır.

blockUnmockedRequests olarak ayarlandığındatrue, sahte ile eşleşmeyen tüm stdinler kullanılır ve alt işleme iletilmez. Gerçek mantığını çalıştırmadan yürütülebilir dosyanın davranışıyla tam olarak alay etmek istediğinizde, kırpılmamış isteklerin engellenmesi yararlıdır.

Sonraki adım