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.
Simule des réponses pour les applications BASÉEs sur STDIO, telles que les serveurs MCP (Model Context Protocol).
Définition de l’instance de plug-in
{
"name": "MockStdioResponsePlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "mockStdioResponsePlugin"
}
Exemple de configuration
{
"$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"
}
}
Propriétés de configuration
| Propriété | Descriptif | Par défaut |
|---|---|---|
mocksFile |
Chemin d’accès au fichier contenant des réponses fictives STDIO | stdio-mocks.json |
blockUnmockedRequests |
Quand true, empêche la stdin sans correspondance d’atteindre le processus enfant |
false |
Options de ligne de commande
| Nom | Descriptif | Par défaut |
|---|---|---|
--no-stdio-mocks |
Désactiver le chargement des réponses fictives STDIO | false |
--stdio-mocks-file |
Chemin d’accès au fichier contenant des réponses fictives STDIO | - |
Exemples de fichiers fictifs
Voici des exemples d’objets fictifs STDIO.
Répondre avec stdout
Répondez à stdin contenant un texte spécifique avec une réponse stdout.
Fichier : 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"
}
}
]
}
Répondre avec stderr
Répondez à stdin avec un message d’erreur sur stderr.
Fichier : 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"
}
}
]
}
Utiliser des espaces réservés à partir de stdin
Utilisez @stdin.body.* des espaces réservés pour inclure dynamiquement des valeurs de stdin dans la réponse.
Fichier : 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"
}
}
]
}
Les espaces réservés suivants sont 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.name |
Accès à la propriété imbriquée |
Charger la réponse à partir d’un fichier
Chargez le contenu de réponse fictif à partir d’un fichier externe à l’aide @filename de la syntaxe.
Fichier : 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"
}
}
]
}
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"}}}
Répondre à la nième occurrence
Répondez uniquement après avoir intercepté la stdin correspondante pour la nième fois.
Fichier : 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"
}
}
]
}
Propriétés de fichier fictifs
| Propriété | Descriptif | Obligatoire |
|---|---|---|
request |
Objet de requête qui définit la stdin à mettre en correspondance | oui |
response |
Objet response qui définit la réponse à retourner | oui |
Objet de Requête
Chaque requête a les propriétés suivantes :
| Propriété | Descriptif | Obligatoire | Valeur par défaut | Valeur d'échantillon |
|---|---|---|---|---|
bodyFragment |
Chaîne qui doit être présente dans stdin | oui | tools/list |
|
nth |
Répondre uniquement lors de l’interception de la demande pour la nième fois | Non | 2 |
Objet Response
Chaque réponse a les propriétés suivantes :
| Propriété | Descriptif | Obligatoire | Valeur par défaut | Valeur d'échantillon |
|---|---|---|---|---|
stdout |
Contenu à envoyer à stdout | Non | empty | {"result": "ok"}\n |
stderr |
Contenu à envoyer à stderr | Non | empty | Error: Something went wrong\n |
Remarques de réponse
Si vous souhaitez charger le contenu de réponse à partir d’un fichier, définissez la ou stderr la stdout propriété sur une valeur de chaîne qui commence par @ suivi du chemin d’accès du fichier par rapport au fichier fictif. Par exemple, @response.json retourne le contenu stocké dans le response.json fichier dans le même répertoire que le fichier fictif.
Pour inclure dynamiquement des valeurs de stdin dans la réponse, utilisez @stdin.body.* des espaces réservés. Par exemple, @stdin.body.id retourne la valeur de la id propriété à partir du code JSON stdin.
Remarques sur le plug-in
Ce plug-in est conçu pour être utilisé avec la stdio commande pour intercepter et simuler la communication STDIO avec des exécutables locaux. Il est utile pour tester et déboguer des serveurs MCP (Model Context Protocol) et d’autres applications STDIO.
Quand blockUnmockedRequests est défini truesur , toute stdin qui ne correspond pas à une simulation est consommée et n’est pas transférée au processus enfant. Le blocage des requêtes non bloquées est utile lorsque vous souhaitez simuler complètement le comportement d’un exécutable sans exécuter sa logique réelle.