Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Simula respuestas para aplicaciones basadas en STDIO, como servidores de Protocolo de contexto de modelo (MCP).
Definición de instancia del complemento
{
"name": "MockStdioResponsePlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "mockStdioResponsePlugin"
}
Ejemplo de configuración
{
"$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"
}
}
Propiedades de configuración
| Propiedad | Description | Predeterminado |
|---|---|---|
mocksFile |
Ruta de acceso al archivo que contiene respuestas ficticias STDIO | stdio-mocks.json |
blockUnmockedRequests |
Cuando true, impide que stdin sin coincidencia llegue al proceso secundario. |
false |
Opciones de línea de comandos
| Nombre | Description | Predeterminado |
|---|---|---|
--no-stdio-mocks |
Deshabilitar la carga de respuestas ficticias de STDIO | false |
--stdio-mocks-file |
Ruta de acceso al archivo que contiene respuestas ficticias STDIO | - |
Ejemplos de archivos ficticios
A continuación se muestran ejemplos de objetos ficticios de STDIO.
Responder con stdout
Responda a stdin que contiene un texto específico con una respuesta stdout.
Archivo: 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"
}
}
]
}
Responder con stderr
Responda a stdin con un mensaje de error en stderr.
Archivo: 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"
}
}
]
}
Uso de marcadores de posición de stdin
Use @stdin.body.* marcadores de posición para incluir dinámicamente valores de stdin en la respuesta.
Archivo: 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"
}
}
]
}
Los siguientes marcadores de posición están disponibles:
| Placeholder | Description |
|---|---|
@stdin.body.id |
id. de solicitud de JSON-RPC |
@stdin.body.method |
nombre del método JSON-RPC |
@stdin.body.params.name |
Acceso a propiedades anidadas |
Carga de la respuesta desde el archivo
Cargue el contenido de respuesta ficticio desde un archivo externo mediante @filename la sintaxis.
Archivo: 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"
}
}
]
}
Archivo: initialize-response.json
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"Mock MCP Server","version":"1.0.0"}}}
Coincidencia de solicitud mediante una expresión regular
Use bodyRegex para buscar coincidencias con stdin mediante una expresión regular. Esto resulta útil cuando necesita coincidencias precisas para evitar la ambigüedad con bodyFragment la coincidencia de subcadenas.
Archivo: stdio-mocks.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/mockstdioresponseplugin.schema.json",
"mocks": [
{
"request": {
"bodyRegex": "\"method\":\"tools/list\""
},
"response": {
"stdout": "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[]}}\n"
}
}
]
}
Responder en la nésima repetición
Responda solo después de interceptar el stdin coincidente por primera vez.
Archivo: 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"
}
}
]
}
Propiedades de archivo simuladas
| Propiedad | Description | Obligatorio |
|---|---|---|
request |
Objeto de solicitud que define el stdin que debe coincidir | Sí |
response |
Objeto response que define la respuesta que se va a devolver | Sí |
Request (objeto)
Cada solicitud tiene las siguientes propiedades:
| Propiedad | Description | Obligatorio | Valor predeterminado | Valor de ejemplo |
|---|---|---|---|---|
bodyFragment |
Cadena que debe estar presente en stdin | no | tools/list |
|
bodyRegex |
Expresión regular que se va a comparar con stdin. Tiene prioridad sobre bodyFragment cuándo se especifican ambos. |
no | ^tools/ |
|
nth |
Responder solo al interceptar la solicitud de la nª vez | no | 2 |
Nota:
Se bodyFragment requiere o bodyRegex para que coincida con una solicitud. Cuando se especifican ambos, bodyRegex tiene prioridad.
Objeto Response
Cada respuesta tiene las siguientes propiedades:
| Propiedad | Description | Obligatorio | Valor predeterminado | Valor de ejemplo |
|---|---|---|---|---|
stdout |
Contenido que se va a enviar a stdout | no | vacío | {"result": "ok"}\n |
stderr |
Contenido que se va a enviar a stderr | no | vacío | Error: Something went wrong\n |
Comentarios de respuesta
Si desea cargar contenido de respuesta desde un archivo, establezca la stdout propiedad o stderr en un valor de cadena que comience con @ seguido de la ruta de acceso del archivo en relación con el archivo ficticio. Por ejemplo, @response.json devuelve el contenido almacenado en el archivo en el response.json mismo directorio que el archivo ficticio.
Para incluir dinámicamente valores de stdin en la respuesta, use @stdin.body.* marcadores de posición. Por ejemplo, @stdin.body.id devuelve el valor de la id propiedad del json stdin.
Comentarios del complemento
Este complemento está diseñado para su uso con el stdio comando para interceptar y simular la comunicación STDIO con ejecutables locales. Resulta útil para probar y depurar servidores del Protocolo de contexto de modelo (MCP) y otras aplicaciones basadas en STDIO.
Cuando blockUnmockedRequests se establece trueen , cualquier stdin que no coincida con un simulacro se consume y no se reenvía al proceso secundario. Bloquear las solicitudes no habilitadas es útil cuando se quiere simular completamente el comportamiento de un archivo ejecutable sin ejecutar su lógica real.