Aracılığıyla paylaş


MCP sunucuları için taklit STDIO yanıtları

Modern yapay zeka geliştirme, stdio aracılığıyla iletişim kuran yerel araçlara, özellikle Model Bağlam Protokolü (MCP) sunucularına giderek daha fazla bağımlıdır. Bu sunucular stdin aracılığıyla JSON-RPC istekleri alır ve stdout aracılığıyla JSON-RPC yanıtlar gönderir. Dev Proxy kullanarak, gerçek sunucu mantığını çalıştırmadan yapay zeka istemci uygulamalarınızı test etmek için STDIO iletişimini kesebilir ve sahte yapabilirsiniz.

Önkoşullar

Sahte MCP sunucu yanıtları

MCP sunucu yanıtlarını test etmek için stdio komutunu MCP ile birlikte kullanırsınız MockStdioResponsePlugin. Eklenti stdin'i durdurur ve stdout veya stderr aracılığıyla sahte yanıtlar döndürür.

1. Dev Proxy yapılandırma dosyası oluşturma

Aşağıdaki içeriğe sahip bir devproxyrc.json dosya oluşturun:

{
  "$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. Mocks dosyası oluşturma

MCP sunucusu için sahte yanıtlar içeren bir stdio-mocks.json dosya oluşturun:

{
  "$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. Geliştirme Proxy'si başlatma

Dev Proxy'yi STDIO komutuyla çalıştırın ve çalıştırılacak komutu belirtin:

devproxy stdio npx -y @modelcontextprotocol/server-filesystem

Dev Proxy, MCP sunucusunu bir alt işlem olarak başlatır ve tüm stdin/stdout iletişimini durdurur. Stdin, bir mock'ın bodyFragment ile eşleşen metin içerdiğinde, Dev Proxy isteği gerçek sunucuya iletmek yerine mock yanıtını geri gönderir.

Dinamik yanıtlar için yer tutucuları kullanma

İstekten değerler içeren dinamik yanıtlar oluşturmak için yer tutucuları kullanın @stdin.body.* :

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

Kullanılabilir yer tutucular:

Placeholder Description
@stdin.body.id JSON-RPC istek kimliği
@stdin.body.method JSON-RPC yöntem adı
@stdin.body.params.* İstek parametrelerine erişim

Kırpılmamış istekleri engelleme

Moklanmamış isteklerin alt işleme ulaşmasını önlemek için blockUnmockedRequests olarak ayarlayın true:

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

MCP sunucusunu asıl işlevini çalıştırmadan tamamen mocklamak istediğinizde, mocklanmamış isteklerin engellenmesi yararlıdır.

Dosyalardan sahte yanıtları yükleme

Karmaşık yanıtlar için dış dosyalardan içeriği yükleyin:

{
  "mocks": [
    {
      "request": {
        "bodyFragment": "initialize"
      },
      "response": {
        "stdout": "@initialize-response.json"
      }
    }
  ]
}

initialize-response.json dosyasını oluşturun:

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

DevTools'ta STDIO trafiğini inceleme

'yi DevToolsPluginetkinleştirdiğinizde, Geliştirme Proxy'si tüm STDIO iletişimini inceleyebileceğiniz Chrome Geliştirici Araçları'nı açar:

  • Ağ sekmesi: Tüm stdin/stdout/stderr iletilerini görüntüleme
  • URL'ler: İletiler şu şekilde görünür: stdio://command-name
  • Yöntemler: İstekler şu şekilde gösterilir: stdin
  • Durum kodları: stdout 200, stderr 500 olarak görünür
  • Zamanlama: Her isteğin/yanıtın ne kadar sürdüğünü görün

DevToolsPlugin kullanarak yapay zeka istemciniz ile MCP sunucuları arasındaki iletişim sorunlarının hatalarını ayıklamak için çok değerlidir.

Gecikme süresi simülasyonu

Uygulamanızın yavaş MCP sunucu yanıtlarını nasıl işlediğini LatencyPlugintest etmek için ekleyin:

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

Sonraki adım

STDIO proxy özelliği hakkında daha fazla bilgi edinin: