Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.