Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Современная разработка ИИ все чаще использует локальные средства, взаимодействующие через STDIO, особенно серверы протокола MCP. Эти серверы получают запросы JSON-RPC через stdin и отправляют JSON-RPC ответы через stdout. С помощью прокси-сервера разработки можно перехватывать и макетировать взаимодействие STDIO для тестирования клиентских приложений ИИ без выполнения фактической логики сервера.
Предпосылки
Ответы сервера Mock MCP
Чтобы имитировать ответы сервера MCP, используйте команду stdio вместе с MockStdioResponsePlugin. Плагин перехватывает stdin и возвращает тестовые ответы через stdout или stderr.
1. Создание файла конфигурации прокси-сервера разработки
devproxyrc.json Создайте файл со следующим содержимым:
{
"$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. Создание файла макетов
stdio-mocks.json Создайте файл с макетными ответами на сервер 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. Запуск прокси-сервера разработки
Запустите прокси-сервер разработки STDIO с помощью команды, указав команду для выполнения:
devproxy stdio npx -y @modelcontextprotocol/server-filesystem
Сервер Dev Proxy запускает сервер MCP в качестве дочернего процесса и перехватывает все связи stdin/stdout. Если stdin содержит текст, соответствующий макету bodyFragment, dev Proxy возвращает макет ответа вместо перенаправления запроса на фактический сервер.
Использование заполнителей для динамических ответов
Чтобы создать динамические ответы, содержащие значения из запроса, используйте @stdin.body.* заполнители:
{
"mocks": [
{
"request": {
"bodyFragment": "echo"
},
"response": {
"stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"message\":\"You said: @stdin.body.params.text\"}}\n"
}
}
]
}
Доступные заполнители:
| Placeholder | Description |
|---|---|
@stdin.body.id |
идентификатор запроса JSON-RPC |
@stdin.body.method |
имя метода JSON-RPC |
@stdin.body.params.* |
Доступ к параметрам запроса |
Блокировать незапрошенные запросы
Чтобы предотвратить передачу немоделируемых запросов в дочерний процесс, установите значение blockUnmockedRequeststrue:
{
"mockStdioResponsePlugin": {
"mocksFile": "stdio-mocks.json",
"blockUnmockedRequests": true
}
}
Блокировка немокированных запросов полезна, если вы хотите полностью эмулировать сервер MCP без выполнения реальной логики.
Загрузка макетных ответов из файлов
Для сложных ответов загрузите содержимое из внешних файлов:
{
"mocks": [
{
"request": {
"bodyFragment": "initialize"
},
"response": {
"stdout": "@initialize-response.json"
}
}
]
}
Создайте файл initialize-response.json:
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"Mock MCP Server","version":"1.0.0"}}}
Проверка трафика STDIO в DevTools
При включении DevToolsPlugin Dev Proxy откроется Chrome DevTools, где можно проверить весь обмен данными по STDIO:
- Сетевая вкладка: просмотр всех сообщений stdin/stdout/stderr
-
URL-адреса: сообщения отображаются как
stdio://command-name -
Методы: запросы отображаются как
stdin -
Коды состояния:
stdoutотображается как 200,stderrкак 500 - Время: узнайте, сколько времени занимает каждый запрос или ответ
Использование DevToolsPlugin неоценимо для отладки проблем коммуникации между клиентом ИИ и серверами MCP.
Имитация задержки
Чтобы проверить, как приложение обрабатывает медленные ответы сервера MCP, добавьте следующее 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"
}
}
Следующий шаг
Дополнительные сведения о функции прокси-сервера STDIO: