[feature][ai-chat] Кнопка «Test» на каждой строке списка внешних MCP-серверов (inline-статус подключения) #170
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Мотивация
Кнопка «Test» для проверки подключения к внешнему MCP-серверу сейчас живёт только внутри формы редактирования (
AiMcpServerForm) и доступна лишь для уже сохранённого сервера. Чтобы проверить любой сервер из списка, приходится открывать модалку редактирования. Хочется быстрый inline-статус: проверить подключение прямо из строки списка одним кликом.Что уже есть
POST /workspace/ai-mcp-servers/test→McpServersService.test()→McpClientsService.testServer(). Возвращает{ ok: true, tools: string[] }(гдеtools— все инструменты, которые сервер отдаёт при подключении, с таймаутом и SSRF-защитой) либо{ ok: false, error }(короткий санитизированный текст).useTestAiMcpServerMutation(ai-mcp-server-query.ts) — без уведомлений, результат рендерит вызывающий код.ai-mcp-server-form.tsx(только edit-режим).→ Бэкенд, сервис и мутацию менять не нужно — только UI списка + строки переводов.
Предлагаемое решение
Добавить на каждую строку списка (
ai-mcp-servers.tsx) кнопку «Test», которая по результату меняет цвет и надпись. Без попапов/тостов.Состояния кнопки
default(нейтр.)TestisPendingloadingTestdata.ok === truegreen,light)OK · {n}data.ok === falsered,light)Failed{n}=data.tools.length— количество инструментов сервера. Иконки:IconPlugConnected/IconCheck/IconX. Цвет не единственный сигнал — надпись тоже меняется (ок для дальтоников/a11y). Повторный клик перезапускает проверку.Архитектурное решение
Каждой строке нужно независимое состояние проверки (загрузка + результат). Один общий
useTestAiMcpServerMutation()на весь список дал бы глобальныйisPending— спиннер и цвет «прыгали» бы на всех строках. Поэтому строку нужно вынести в отдельный компонентAiMcpServerRowс собственным инстансом мутации → изоляция состояния, можно тестировать несколько строк параллельно.i18n
По политике
en-US+ru-RUподдерживаются полностью.Testуже есть. Добавить:Failed→ ru: «Ошибка»OK · {{count}}(число без слова; слово «инструментов» — опционально в тултипе с plural-ключами)Краевые случаи
OK · 0— подключились, но сервер не отдал инструментов: зелёная,0.key = server.id), поэтому старый цвет «прилипнет» после смены URL/заголовков. Сбрасыватьmutation.reset()черезuseEffectнаserver.url/server.transport/server.hasHeaders.isPending.miwкнопки (~88px), чтобы строка не дёргалась при смене надписиTest→OK · 5→Failed.Открытые вопросы
OK · 5» (число) vs «OK · 5 tools» (со словом, нужны plural-ключи).Объём работ
ai-mcp-servers.tsx— вынести строку вAiMcpServerRow+ добавить кнопку (основной объём).en-US/translation.json+ru-RU/translation.json— 2–3 ключа.Ghost referenced this issue2026-06-25 23:50:05 +03:00
Ghost referenced this issue2026-06-25 23:50:19 +03:00
Ghost referenced this issue2026-06-26 17:39:55 +03:00