Condividi tramite


MockStdioResponsePlugin

Simula le risposte per applicazioni basate su STDIO, ad esempio server MCP (Model Context Protocol).

Definizione dell'istanza del plug-in

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

Esempio di configurazione

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

Proprietà di configurazione

Proprietà Description Impostazione predefinita
mocksFile Percorso del file contenente risposte fittizie STDIO stdio-mocks.json
blockUnmockedRequests Quando true, impedisce a stdin senza corrispondenza di raggiungere il processo figlio false

Opzioni della riga di comando

Nome Description Impostazione predefinita
--no-stdio-mocks Disabilitare il caricamento di risposte fittizie STDIO false
--stdio-mocks-file Percorso del file contenente risposte fittizie STDIO -

Esempi di file fittizi

Di seguito sono riportati esempi di oggetti fittizi STDIO.

Rispondere con stdout

Rispondere a stdin contenente un testo specifico con una risposta 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"
      }
    }
  ]
}

Rispondere con stderr

Rispondere a stdin con un messaggio di errore in 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"
      }
    }
  ]
}

Usare segnaposto da stdin

Usare @stdin.body.* i segnaposto per includere in modo dinamico i valori di stdin nella risposta.

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

Sono disponibili i segnaposto seguenti:

Placeholder Description
@stdin.body.id ID richiesta JSON-RPC
@stdin.body.method JSON-RPC nome del metodo
@stdin.body.params.name Accesso alle proprietà annidate

Caricare la risposta dal file

Caricare il contenuto della risposta fittizia da un file esterno usando @filename la sintassi.

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

Rispondere all'ennesima occorrenza

Rispondere solo dopo aver intercettato il stdin corrispondente per l'ennesima volta.

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

Simula le proprietà del file

Proprietà Description Obbligatorio
request Oggetto Request che definisce il stdin in modo che corrisponda yes
response Oggetto risposta che definisce la risposta da restituire yes

Oggetto della richiesta

Ogni richiesta ha le proprietà seguenti:

Proprietà Description Obbligatorio Valore predefinito Valore di esempio
bodyFragment Stringa che deve essere presente in stdin yes tools/list
nth Rispondere solo quando si intercetta la richiesta per l'ennesima volta no 2

Oggetto Response

Ogni risposta ha le proprietà seguenti:

Proprietà Description Obbligatorio Valore predefinito Valore di esempio
stdout Contenuto da inviare a stdout no empty {"result": "ok"}\n
stderr Contenuto da inviare a stderr no empty Error: Something went wrong\n

Osservazioni sulla risposta

Se si desidera caricare il contenuto della risposta da un file, impostare la stdout proprietà o stderr su un valore stringa che inizia con @ seguito dal percorso del file relativo al file fittizio. Ad esempio, restituisce @response.json il contenuto archiviato nel response.json file nella stessa directory del file fittizio.

Per includere in modo dinamico i valori di stdin nella risposta, usare @stdin.body.* segnaposto. Ad esempio, restituisce @stdin.body.id il valore della id proprietà dal codice JSON stdin.

Osservazioni sul plug-in

Questo plug-in è progettato per l'uso con il stdio comando per intercettare e simulare la comunicazione STDIO con eseguibili locali. È utile per testare e eseguire il debug di server MCP (Model Context Protocol) e altre applicazioni basate su STDIO.

Quando blockUnmockedRequests è impostato su true, qualsiasi stdin che non corrisponde a una simulazione viene utilizzata e non inoltrata al processo figlio. Il blocco delle richieste non rilevate è utile quando si vuole simulare completamente il comportamento di un eseguibile senza eseguire la logica effettiva.

Passo successivo