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.
Lo sviluppo di intelligenza artificiale moderna si basa sempre più su strumenti locali che comunicano tramite STDIO, in particolare i server MCP (Model Context Protocol). Questi server ricevono JSON-RPC richieste tramite stdin e inviano risposte JSON-RPC tramite stdout. Usando Dev Proxy, è possibile intercettare e simulare la comunicazione STDIO per testare le applicazioni client di intelligenza artificiale senza eseguire la logica effettiva del server.
Prerequisiti
Simulare le risposte del server MCP
Per simulare le risposte del server MCP, usare il stdio comando con .MockStdioResponsePlugin Il plug-in intercetta stdin e restituisce risposte fittizie tramite stdout o stderr.
1. Creare un file di configurazione del proxy di sviluppo
Creare un file devproxyrc.json con i contenuti seguenti:
{
"$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. Creare un file fittizio
Creare un stdio-mocks.json file con risposte fittizie per il server MCP:
{
"$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. Avviare il proxy di sviluppo
Eseguire Dev Proxy con il STDIO comando , specificando il comando da eseguire:
devproxy stdio npx -y @modelcontextprotocol/server-filesystem
Dev Proxy avvia il server MCP come processo figlio e intercetta tutte le comunicazioni stdin/stdout. Quando stdin contiene testo corrispondente a un fittizio bodyFragment, Dev Proxy restituisce la risposta fittizia anziché inoltrare la richiesta al server effettivo.
Utilizzare segnaposto per le risposte dinamiche
Per creare risposte dinamiche che includono valori dalla richiesta, usare @stdin.body.* i segnaposto:
{
"mocks": [
{
"request": {
"bodyFragment": "echo"
},
"response": {
"stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"message\":\"You said: @stdin.body.params.text\"}}\n"
}
}
]
}
Segnaposto disponibili:
| Placeholder | Description |
|---|---|
@stdin.body.id |
Richiesta ID JSON-RPC |
@stdin.body.method |
JSON-RPC nome del metodo |
@stdin.body.params.* |
Accesso ai parametri della richiesta |
Bloccare le richieste non rilevate
Per impedire che le richieste non simulate raggiungano il processo figlio, impostare blockUnmockedRequests su true:
{
"mockStdioResponsePlugin": {
"mocksFile": "stdio-mocks.json",
"blockUnmockedRequests": true
}
}
Il blocco delle richieste non rilevate è utile quando si vuole simulare completamente il server MCP senza eseguire la logica effettiva.
Caricare risposte fittizie dai file
Per risposte complesse, caricare il contenuto da file esterni:
{
"mocks": [
{
"request": {
"bodyFragment": "initialize"
},
"response": {
"stdout": "@initialize-response.json"
}
}
]
}
Creare il 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"}}}
Esaminare il traffico STDIO in DevTools
Quando si abilita DevToolsPlugin, Dev Proxy apre Chrome DevTools in cui è possibile esaminare tutte le comunicazioni STDIO:
- Scheda Rete: visualizza tutti i messaggi stdin/stdout/stderr
-
URL: i messaggi vengono visualizzati come
stdio://command-name -
Metodi: le richieste vengono visualizzate come
stdin -
Codici di stato:
stdoutviene visualizzato come 200,stderrcome 500 - Intervallo: vedere per quanto tempo sono stati impiegato ogni richiesta/risposta
L'uso di DevToolsPlugin è estremamente utile per il debug dei problemi di comunicazione tra il client di intelligenza artificiale e i server MCP.
Simulare la latenza
Per testare il modo in cui l'applicazione gestisce le risposte lente del server MCP, aggiungere :LatencyPlugin
{
"$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"
}
}
Passo successivo
Altre informazioni sulla funzionalità proxy STDIO: