0.152.0
Added
- MCP: конфигурация через JSON вместо формы + расширение покрытия протокола. Настройка MCP-серверов переведена с громоздкой многопольной формы на вставку стандартного JSON-конфига (как в Claude Desktop
claude_desktop_config.json, Cursormcp.json, VS Code.vscode/mcp.json). Реализовано полное покрытие возможностей протокола MCP, которых раньше не было (раньше — только Tools). См. ADR docs/adr/2026-06-30-mcp-json-config.md и docs/adr/2026-06-30-mcp-protocol-coverage.md; инструкция — docs/mcp-config.md. - JSON-ввод/вывод. Парсер
internal/mcp/config.goпринимает оба формата (auto-detect): bulk{"mcpServers":{...}}и single-server{...}. Выводtypeпри отсутствии (естьcommand→stdio; естьurl→streamable_http или sse по path-эвристике/sse). TaigaClaw-расширения верхнего уровня (tool_timeout,oauth_*,tls_skip_verify,tls_ca,allow_local) — стандартные клиенты их игнорируют, конфиг остаётся совместимым. ЭндпоинтыPOST /api/v1/mcp-servers/import(bulk, со skipped/error построчно),GET /api/v1/mcp-servers/export(все серверы, реальные секреты, admin-only),GET /api/v1/mcp-servers/{id}/export(один сервер). Round-trip импорт→экспорт даёт стандартный JSON. - UI. Страница
/settings/mcp: кнопка «Импорт JSON» → модалка с JSON-редактором (textarea), превью распарсенных серверов, кнопки «Вставить пример: stdio/remote», компактная панель TaigaClaw-расширений (oauth/tls/timeout применяются ко всем серверам вставки), валидация на клиенте (web/src/lib/utils/mcpConfig.ts— зеркало Go-парсера). На карточке сервера — «Экспорт JSON» (в буфер, с fallback для HTTP/старых браузеров черезexecCommand); в шапке — «Экспорт всех» (скачиваниеmcp-servers.json). Старая многопольная форма удалена. - Безопасность (SSRF + TLS). SSE/streamable_http-транспорт MCP теперь использует кастомный
*http.Clientс dial-time SSRF-guard (security.NewSafeHTTPClientFromGetterWithTLS) — раньше использовался дефолтный клиент библиотеки без проверки IP. Новые поля сервера:tls_skip_verify(InsecureSkipVerify),tls_ca(PEM root CA, добавляется к системному пулу),allow_local(расширяет guard до loopback + RFC1918 + link-local + ULA, с сохранением глобального denylist; cloud-metadata блокируется всегда). SSE/HTTP fail-closed при nil guard. Санитизация:tls_caмаскируется в API-ответах (как env/headers/oauth-токен). - Покрытие протокола.
MCPSessionтеперь обнаруживает Resources/Prompts при подключении (черезclient.GetServerCapabilities(), с pagination — библиотека mcp-go сама следуетnextCursor). Resources экспонируются агенту как toolmcp_<server>_resources(с валидацией URI против enum и bounds на размер описания — защита от чatty/злонамеренного сервера), gated byAllowedTools. Listing-эндпоинтыGET /mcp-servers/{id}/resourcesи/prompts. Logging: серверныеnotifications/message→ slog (всегда Info,datatruncated до 512 байт — hostile-сервер не может эскалировать severity). Уровень логирования запрашивается черезSetLevel(info).ReadResource/GetPromptметоды сессии. - Миграция 098 (SQLite + PG, обратимая): колонки
tls_skip_verify,tls_ca,allow_localсо значениями по умолчанию (FALSE/’’/FALSE) — существующие серверы не меняют поведение. - Проверки:
go test ./internal/...— зелёно;npm run check— 0 ошибок;npm test— 549/549;make build-cross— 6 бинарников;golangci-lint— 0 замечаний; циклocr review— критические security/correctness-замечания устранены.