Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le développement d’IA moderne s’appuie de plus en plus sur les outils locaux qui communiquent via STDIO, en particulier les serveurs MCP (Model Context Protocol). Ces serveurs reçoivent JSON-RPC demandes via stdin et envoient des réponses JSON-RPC via stdout. À l’aide du proxy de développement, vous pouvez intercepter et simuler la communication STDIO pour tester vos applications clientes IA sans exécuter de logique serveur réelle.
Prerequisites
Simuler les réponses du serveur MCP
Pour simuler les réponses du serveur MCP, vous utilisez la stdio commande avec le MockStdioResponsePlugin. Le plug-in intercepte stdin et retourne des réponses fictifs via stdout ou stderr.
1. Créer un fichier de configuration du proxy de développement
Créez un fichier devproxyrc.json avec le contenu suivant :
{
"$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. Créer un fichier fictif
Créez un stdio-mocks.json fichier avec des réponses fictifs pour le serveur 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. Démarrer le proxy de développement
Exécutez le proxy de développement avec la STDIO commande, en spécifiant la commande à exécuter :
devproxy stdio npx -y @modelcontextprotocol/server-filesystem
Le proxy de développement démarre le serveur MCP en tant que processus enfant et intercepte toutes les communications stdin/stdout. Lorsque stdin contient du texte correspondant à un mock bodyFragment, le proxy de développement retourne la réponse mock au lieu de transférer la requête au serveur réel.
Utilisez des espaces réservés pour les réponses dynamiques
Pour créer des réponses dynamiques qui incluent des valeurs à partir de la requête, utilisez les espaces réservés @stdin.body.*.
{
"mocks": [
{
"request": {
"bodyFragment": "echo"
},
"response": {
"stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"message\":\"You said: @stdin.body.params.text\"}}\n"
}
}
]
}
Espaces réservés disponibles :
| Placeholder | Descriptif |
|---|---|
@stdin.body.id |
ID de requête JSON-RPC |
@stdin.body.method |
nom de la méthode JSON-RPC |
@stdin.body.params.* |
Accès aux paramètres de requête |
Bloquer les demandes non bloquées
Définissez blockUnmockedRequests à true pour empêcher les requêtes non simulées d’atteindre le processus enfant :
{
"mockStdioResponsePlugin": {
"mocksFile": "stdio-mocks.json",
"blockUnmockedRequests": true
}
}
Le blocage des requêtes non bloquées est utile lorsque vous souhaitez simuler complètement le serveur MCP sans exécuter sa logique réelle.
Charger des réponses fictives à partir de fichiers
Pour les réponses complexes, chargez le contenu à partir de fichiers externes :
{
"mocks": [
{
"request": {
"bodyFragment": "initialize"
},
"response": {
"stdout": "@initialize-response.json"
}
}
]
}
Créez le fichier initialize-response.json :
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"Mock MCP Server","version":"1.0.0"}}}
Inspecter le trafic STDIO dans DevTools
Lorsque vous activez le DevToolsPlugin, le proxy de développement ouvre Chrome DevTools, où vous pouvez inspecter toutes les communications STDIO :
- Onglet Réseau : Afficher tous les messages stdin/stdout/stderr
-
URL : les messages s’affichent en tant que
stdio://command-name -
Méthodes : Les demandes s’affichent en tant que
stdin -
Codes d’état :
stdoutapparaît comme 200,stderrcomme 500 - Minutage : voir combien de temps chaque demande/réponse a pris
L'utilisation de DevToolsPlugin est inestimable pour le débogage des problèmes de communication entre votre client IA et les serveurs MCP.
Simuler la latence
Pour tester la façon dont votre application gère les réponses lentes du serveur MCP, ajoutez les LatencyPluginpoints suivants :
{
"$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"
}
}
Étape suivante
En savoir plus sur la fonctionnalité de proxy STDIO :