Фича: инструкция по работе с MCP-сервером в системном промпте агента #180
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?
Что
Дать администратору возможность задать для каждого внешнего MCP-сервера свободный текст-инструкцию («как и когда пользоваться инструментами этого сервера»), который агент получает в системном промпте — рядом с описаниями инструментов.
Это перенос уже существующей в кодовой базе идеи
SERVER_INSTRUCTIONS(встроенный MCP-пакет отдаёт её внешним клиентам приinitialize, см.packages/mcp/src/index.ts) на внешние MCP-серверы, настраиваемые внутри приложения.Зачем
Сейчас агент видит только per-tool
.descriptionиз AI-SDKTool. Серверного гайда «как пользоваться набором инструментов» в системном промпте нет вообще. Для нетривиальных серверов (выбор инструмента по интенту, порядок вызовов, краевые случаи) этого недостаточно.Принятые решения
client.instructionsиз хендшейка сервера НЕ берём — это недоверенный внешний контент и риск prompt-injection.SERVER_INSTRUCTIONS).Архитектура (сквозной срез)
Новое поле — обычный несекретный текст, поэтому, в отличие от
headersEnc, оно возвращается во view и форму.instructions textвai_mcp_servers.apps/server/src/database/types/ai-mcp-servers.types.ts:instructions: string | null.ai-mcp-server.repo.ts: insert/update обрабатываютinstructions(пустое/пробельное →null).@IsOptional() @IsString() @MaxLength(4000) instructions?: string(кап на объём промпта/токены; встроенный гайд ~1.5KB).mcp-servers.service.ts:instructionsвMcpServerView/toView, проброс в create/update с нормализацией blank→null.mcp-clients.service.ts: новый типMcpServerInstruction { serverName, toolPrefix, instructions }, проброс черезExternalToolset/CacheEntry/buildEntry/toolsFor. Инструкция добавляется только для серверов, которые подключились И дали ≥1 инструмент (после аллоулиста).ai-chat.prompt.ts: новый параметрmcpInstructions+ рендер блока<mcp_tooling>внутри сэндвича безопасности (послеcontext, перед завершающимSAFETY_FRAMEWORK). Заголовок секции указывает неймспейс-префикс инструментов сервера (например,tavily_*).ai-chat.service.ts: важно — переставить порядок: сейчасbuildSystemPromptвызывается раньшеtoolsFor. Нужно сначала собрать внешний тулсет, потом строить промпт и проброситьexternal.instructions. В дефолтныйexternalдобавитьinstructions: [].instructionsв типах (ai-mcp-server-service.ts),Textareaв форме (ai-mcp-server-form.tsx) с подсказкой про неймспейс-префикс; i18n-ключи (en/ru).Безопасность и краевые случаи
SAFETY_FRAMEWORK) не затрагивается.sanitizeName(name); при редких коллизиях отдельные тулы получают суффиксы — гайд остаётся ориентировочным (это руководство, не контракт).buildShareSystemPromptбез внешних MCP — вне области изменений.Тесты
ai-chat.prompt.spec.ts: блок рендерится при наличии инструкций (имя/префикс/текст); не рендерится при пустом списке/тексте; стоит междуcontextи завершающимSAFETY; обе копииSAFETYна месте.mcp-servers-to-view.spec.ts:instructionsво view; blank→null.mcp-clients:buildEntryсобирает инструкцию только для подключённого сервера с непустым текстом и ≥1 тулом.MaxLength.ai-chat.servicespec: системный промпт содержит внешние инструкции; порядок toolsFor→buildSystemPrompt не сломан.Чек-лист реализации
instructionsai-mcp-servers.types.tsMaxLength(4000)McpServerView/toView+ нормализация blank→nullmcp-clients:McpServerInstruction+ проброс через тулсетai-chat.prompt:mcpInstructions+buildMcpToolingBlockai-chat.service: переставить порядок (тулсет → промпт), пробросить инструкцииTextarea+ i18n (en/ru)Ghost referenced this issue2026-06-25 11:11:27 +03:00
Ghost referenced this issue2026-06-25 11:38:57 +03:00
Ghost referenced this issue2026-06-25 12:00:53 +03:00