From 5cc398ee3b9919fc15e972251bcc83d1e7e98abb Mon Sep 17 00:00:00 2001 From: triepod-ai <199543909+triepod-ai@users.noreply.github.com> Date: Thu, 1 Jan 2026 10:08:23 -0600 Subject: [PATCH 1/4] feat: add MCP tool annotations to all in-memory servers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add tool annotations (title, readOnlyHint, destructiveHint, openWorldHint) to 14 in-memory MCP server files following the MCP specification. Annotated servers: - imageServer: 7 tools (image read/upload/describe/query/ocr) - artifactsServer: 1 tool (get artifact instructions) - autoPromptingServer: 3 tools (prompt template operations) - bochaSearchServer: 2 tools (web/AI search) - braveSearchServer: 2 tools (web/local search) - builtinKnowledgeServer: 1 tool (knowledge search) - conversationSearchServer: 5 tools (search/history/stats/tabs) - deepResearchServer: 5 tools (research session workflow) - difyKnowledgeServer: 1 tool (knowledge search) - fastGptKnowledgeServer: 1 tool (knowledge search) - ragflowKnowledgeServer: 1 tool (knowledge search) - meetingServer: 1 tool (start meeting) - powerpackServer: 5 tools (time/web info/shell/code execution) - appleServer: 7 tools (calendar/contacts/mail/maps/messages/notes/reminders) This improves LLM understanding of tool behaviors and enables better tool selection and safety decisions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .../inMemoryServers/appleServer.ts | 44 ++++++++++++++--- .../inMemoryServers/artifactsServer.ts | 6 ++- .../inMemoryServers/autoPromptingServer.ts | 18 +++++-- .../inMemoryServers/bochaSearchServer.ts | 14 +++++- .../inMemoryServers/braveSearchServer.ts | 14 +++++- .../inMemoryServers/builtinKnowledgeServer.ts | 6 ++- .../conversationSearchServer.ts | 30 ++++++++++-- .../inMemoryServers/deepResearchServer.ts | 31 ++++++++++-- .../inMemoryServers/difyKnowledgeServer.ts | 7 ++- .../inMemoryServers/fastGptKnowledgeServer.ts | 7 ++- .../inMemoryServers/imageServer.ts | 47 ++++++++++++++++--- .../inMemoryServers/meetingServer.ts | 6 ++- .../inMemoryServers/powerpackServer.ts | 32 +++++++++++-- .../inMemoryServers/ragflowKnowledgeServer.ts | 7 ++- 14 files changed, 227 insertions(+), 42 deletions(-) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts index 8372ec032..42cb65f60 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts @@ -1209,40 +1209,70 @@ export class AppleServer { { name: 'calendar', description: 'Search, create, and open calendar events in Apple Calendar app', - inputSchema: zodToJsonSchema(CalendarArgsSchema) + inputSchema: zodToJsonSchema(CalendarArgsSchema), + annotations: { + title: 'Apple Calendar', + destructiveHint: false, + } }, { name: 'contacts', description: 'Search and retrieve contacts from Apple Contacts app', - inputSchema: zodToJsonSchema(ContactsArgsSchema) + inputSchema: zodToJsonSchema(ContactsArgsSchema), + annotations: { + title: 'Apple Contacts', + readOnlyHint: true, + } }, { name: 'mail', description: 'Interact with Apple Mail app - read unread emails, search emails, and send emails', - inputSchema: zodToJsonSchema(MailArgsSchema) + inputSchema: zodToJsonSchema(MailArgsSchema), + annotations: { + title: 'Apple Mail', + destructiveHint: false, + openWorldHint: true, + } }, { name: 'maps', description: 'Search locations, manage guides, save favorites, and get directions using Apple Maps', - inputSchema: zodToJsonSchema(MapsArgsSchema) + inputSchema: zodToJsonSchema(MapsArgsSchema), + annotations: { + title: 'Apple Maps', + destructiveHint: false, + } }, { name: 'messages', description: 'Interact with Apple Messages app - send, read, schedule messages and check unread messages', - inputSchema: zodToJsonSchema(MessagesArgsSchema) + inputSchema: zodToJsonSchema(MessagesArgsSchema), + annotations: { + title: 'Apple Messages', + destructiveHint: false, + openWorldHint: true, + } }, { name: 'notes', description: 'Search, retrieve and create notes in Apple Notes app', - inputSchema: zodToJsonSchema(NotesArgsSchema) + inputSchema: zodToJsonSchema(NotesArgsSchema), + annotations: { + title: 'Apple Notes', + destructiveHint: false, + } }, { name: 'reminders', description: 'Search, create, and open reminders in Apple Reminders app', - inputSchema: zodToJsonSchema(RemindersArgsSchema) + inputSchema: zodToJsonSchema(RemindersArgsSchema), + annotations: { + title: 'Apple Reminders', + destructiveHint: false, + } } ] })) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts index 69fd5b6db..a18558b2f 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts @@ -580,7 +580,11 @@ export class ArtifactsServer { 'Do not call this function repeatedly if instructions or definitions for the requested artifact type are already available in the current context. ' + 'Specify the desired artifact category through the type parameter: code, documents, html, svg, mermaid, or react. ' + 'After obtaining the instructions, use them appropriately and avoid duplicate calls for the same type.', - inputSchema: zodToJsonSchema(GetArtifactInstructionsArgsSchema) + inputSchema: zodToJsonSchema(GetArtifactInstructionsArgsSchema), + annotations: { + title: 'Get Artifact Instructions', + readOnlyHint: true, + } } ] } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts index 100e77b61..704cdfc51 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts @@ -111,17 +111,29 @@ export class AutoPromptingServer { { name: 'list_all_prompt_template_names', description: '获取所有可用提示词模板的名称列表。', - inputSchema: zodToJsonSchema(z.object({})) // 无需参数 + inputSchema: zodToJsonSchema(z.object({})), // 无需参数 + annotations: { + title: 'List Prompt Template Names', + readOnlyHint: true, + } }, { name: 'get_prompt_template_parameters', description: '根据提示词模板名称获取其所需的参数列表和描述。', - inputSchema: GetTemplateParametersArgsJsonSchema + inputSchema: GetTemplateParametersArgsJsonSchema, + annotations: { + title: 'Get Template Parameters', + readOnlyHint: true, + } }, { name: 'fill_prompt_template', description: '根据提示词模板名称和参数,填充模板内容并生成最终的Prompt。', - inputSchema: FillTemplateArgsJsonSchema + inputSchema: FillTemplateArgsJsonSchema, + annotations: { + title: 'Fill Prompt Template', + readOnlyHint: true, + } } ] } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts index b42408a0b..4fafcecd9 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts @@ -131,13 +131,23 @@ export class BochaSearchServer { name: 'bocha_web_search', description: 'Search with Bocha Web Search and get enhanced search details from billions of web documents, including page titles, urls, summaries, site names, site icons, publication dates, image links, and more.', // 官方描述 - inputSchema: zodToJsonSchema(BochaWebSearchArgsSchema) + inputSchema: zodToJsonSchema(BochaWebSearchArgsSchema), + annotations: { + title: 'Bocha Web Search', + readOnlyHint: true, + openWorldHint: true, + } }, { name: 'bocha_ai_search', description: 'Search with Bocha AI Search, recognizes the semantics of search terms and additionally returns structured modal cards with content from vertical domains.', // 官方描述 - inputSchema: zodToJsonSchema(BochaAiSearchArgsSchema) + inputSchema: zodToJsonSchema(BochaAiSearchArgsSchema), + annotations: { + title: 'Bocha AI Search', + readOnlyHint: true, + openWorldHint: true, + } } ] } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts index 7f5a1c8ad..afc441dff 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts @@ -312,7 +312,12 @@ export class BraveSearchServer { 'Use this for broad information gathering, recent events, or when you need diverse web sources. ' + 'Supports pagination, content filtering, and freshness controls. ' + 'Maximum 20 results per request, with offset for pagination. ', - inputSchema: zodToJsonSchema(BraveWebSearchArgsSchema) + inputSchema: zodToJsonSchema(BraveWebSearchArgsSchema), + annotations: { + title: 'Brave Web Search', + readOnlyHint: true, + openWorldHint: true, + } }, { name: 'brave_local_search', @@ -325,7 +330,12 @@ export class BraveSearchServer { '- Phone numbers and opening hours\n' + "Use this when the query implies 'near me' or mentions specific locations. " + 'Automatically falls back to web search if no local results are found.', - inputSchema: zodToJsonSchema(BraveLocalSearchArgsSchema) + inputSchema: zodToJsonSchema(BraveLocalSearchArgsSchema), + annotations: { + title: 'Brave Local Search', + readOnlyHint: true, + openWorldHint: true, + } } ] } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts index 487cfd9d6..6335425fd 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts @@ -57,7 +57,11 @@ export class BuiltinKnowledgeServer { return { name: `builtin_knowledge_search${suffix}`, description: config.description, - inputSchema: zodToJsonSchema(BuiltinKnowledgeSearchArgsSchema) + inputSchema: zodToJsonSchema(BuiltinKnowledgeSearchArgsSchema), + annotations: { + title: 'Builtin Knowledge Search', + readOnlyHint: true, + } } }) return { tools } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts index d5c79bbf2..46d16b3e0 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts @@ -482,29 +482,49 @@ export class ConversationSearchServer { name: 'search_conversations', description: 'Search historical conversation records, supports title and content search', - inputSchema: zodToJsonSchema(SearchConversationsArgsSchema) + inputSchema: zodToJsonSchema(SearchConversationsArgsSchema), + annotations: { + title: 'Search Conversations', + readOnlyHint: true, + } }, { name: 'search_messages', description: 'Search historical message records, supports filtering by conversation ID, role and other conditions', - inputSchema: zodToJsonSchema(SearchMessagesArgsSchema) + inputSchema: zodToJsonSchema(SearchMessagesArgsSchema), + annotations: { + title: 'Search Messages', + readOnlyHint: true, + } }, { name: 'get_conversation_history', description: 'Get complete history of a specific conversation', - inputSchema: zodToJsonSchema(GetConversationHistoryArgsSchema) + inputSchema: zodToJsonSchema(GetConversationHistoryArgsSchema), + annotations: { + title: 'Get Conversation History', + readOnlyHint: true, + } }, { name: 'get_conversation_stats', description: 'Get conversation statistics including totals, recent activity and more', - inputSchema: zodToJsonSchema(GetConversationStatsArgsSchema) + inputSchema: zodToJsonSchema(GetConversationStatsArgsSchema), + annotations: { + title: 'Get Conversation Stats', + readOnlyHint: true, + } }, { name: 'create_new_tab', description: 'Creates a new tab. If userInput is provided, it also creates a new chat session and sends the input as the first message, then returns tabId and threadId.', - inputSchema: zodToJsonSchema(CreateNewTabArgsSchema) + inputSchema: zodToJsonSchema(CreateNewTabArgsSchema), + annotations: { + title: 'Create New Tab', + destructiveHint: false, + } } ] } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts index 318e8fbbd..eb05bc2bf 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts @@ -282,27 +282,48 @@ export class DeepResearchServer { { name: 'start_deep_research', description: '启动一个新的深度研究会话。返回 session_id 用于后续操作。', - inputSchema: zodToJsonSchema(StartDeepResearchArgsSchema) + inputSchema: zodToJsonSchema(StartDeepResearchArgsSchema), + annotations: { + title: 'Start Deep Research', + destructiveHint: false, + } }, { name: 'execute_single_web_search', description: '在研究会话内执行一次网页搜索。', - inputSchema: zodToJsonSchema(SingleWebSearchArgsSchema) + inputSchema: zodToJsonSchema(SingleWebSearchArgsSchema), + annotations: { + title: 'Execute Web Search', + readOnlyHint: true, + openWorldHint: true, + } }, { name: 'request_research_data', description: '请求当前会话中新增的搜索结果和研究背景,供 LLM 反思。', - inputSchema: zodToJsonSchema(RequestResearchDataArgsSchema) + inputSchema: zodToJsonSchema(RequestResearchDataArgsSchema), + annotations: { + title: 'Request Research Data', + readOnlyHint: true, + } }, { name: 'submit_reflection_results', description: 'LLM 提交其对研究数据的反思结果(如是否需更多研究、建议查询等)。', - inputSchema: zodToJsonSchema(SubmitReflectionResultsArgsSchema) + inputSchema: zodToJsonSchema(SubmitReflectionResultsArgsSchema), + annotations: { + title: 'Submit Reflection Results', + destructiveHint: false, + } }, { name: 'generate_final_answer', description: '根据累积研究生成最终答案,并清理会话数据。', - inputSchema: zodToJsonSchema(GenerateFinalAnswerArgsSchema) + inputSchema: zodToJsonSchema(GenerateFinalAnswerArgsSchema), + annotations: { + title: 'Generate Final Answer', + destructiveHint: false, + } } ] } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts index 2e44ab9e6..223a29518 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts @@ -132,7 +132,12 @@ export class DifyKnowledgeServer { return { name: `dify_knowledge_search${suffix}`, description: config.description, - inputSchema: zodToJsonSchema(DifyKnowledgeSearchArgsSchema) + inputSchema: zodToJsonSchema(DifyKnowledgeSearchArgsSchema), + annotations: { + title: 'Dify Knowledge Search', + readOnlyHint: true, + openWorldHint: true, + } } }) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts index 7038ddc11..0c8b1655d 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts @@ -121,7 +121,12 @@ export class FastGptKnowledgeServer { return { name: `fastgpt_knowledge_search${suffix}`, description: config.description, - inputSchema: zodToJsonSchema(FastGptKnowledgeSearchArgsSchema) + inputSchema: zodToJsonSchema(FastGptKnowledgeSearchArgsSchema), + annotations: { + title: 'FastGPT Knowledge Search', + readOnlyHint: true, + openWorldHint: true, + } } }) return { tools } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts index 0be93e63e..602817c16 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts @@ -196,43 +196,76 @@ export class ImageServer { name: 'read_image_base64', description: 'Reads an image file from the specified path and returns its base64 encoded content.', - inputSchema: zodToJsonSchema(ReadImageBase64ArgsSchema) + inputSchema: zodToJsonSchema(ReadImageBase64ArgsSchema), + annotations: { + title: 'Read Image Base64', + readOnlyHint: true, + } }, { name: 'upload_image', description: 'Uploads an image file from the specified path to a hosting service and returns the public URL.', - inputSchema: zodToJsonSchema(UploadImageArgsSchema) + inputSchema: zodToJsonSchema(UploadImageArgsSchema), + annotations: { + title: 'Upload Image', + destructiveHint: false, + openWorldHint: true, + } }, { name: 'read_multiple_images_base64', description: 'Reads multiple image files from the specified paths and returns their base64 encoded content.', - inputSchema: zodToJsonSchema(ReadMultipleImagesBase64ArgsSchema) + inputSchema: zodToJsonSchema(ReadMultipleImagesBase64ArgsSchema), + annotations: { + title: 'Read Multiple Images Base64', + readOnlyHint: true, + } }, { name: 'upload_multiple_images', description: 'Uploads multiple image files from the specified paths to a hosting service and returns their public URLs.', - inputSchema: zodToJsonSchema(UploadMultipleImagesArgsSchema) + inputSchema: zodToJsonSchema(UploadMultipleImagesArgsSchema), + annotations: { + title: 'Upload Multiple Images', + destructiveHint: false, + openWorldHint: true, + } }, { name: 'describe_image', description: 'Uses a multimodal model to simply describe the image at the specified path.', - inputSchema: zodToJsonSchema(DescribeImageArgsSchema) + inputSchema: zodToJsonSchema(DescribeImageArgsSchema), + annotations: { + title: 'Describe Image', + readOnlyHint: true, + openWorldHint: true, + } }, { name: 'query_image_with_prompt', description: 'Uses a multimodal model to answer a query (prompt) about the image at the specified path.', - inputSchema: zodToJsonSchema(QueryImageWithPromptArgsSchema) + inputSchema: zodToJsonSchema(QueryImageWithPromptArgsSchema), + annotations: { + title: 'Query Image with Prompt', + readOnlyHint: true, + openWorldHint: true, + } }, { name: 'ocr_image', description: 'Performs Optical Character Recognition (OCR) on the image at the specified path and returns the extracted text.', - inputSchema: zodToJsonSchema(OcrImageArgsSchema) + inputSchema: zodToJsonSchema(OcrImageArgsSchema), + annotations: { + title: 'OCR Image', + readOnlyHint: true, + openWorldHint: true, + } } ] } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts index b5b0f2a10..d6ef0df35 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts @@ -159,7 +159,11 @@ export class MeetingServer { name: 'start_meeting', description: '启动并主持一个由多个Tab(参会者)参与的关于特定主题的讨论会议。如果你当前已经是某个会议的参与者,请勿调用!', - inputSchema: zodToJsonSchema(StartMeetingArgsSchema) + inputSchema: zodToJsonSchema(StartMeetingArgsSchema), + annotations: { + title: 'Start Meeting', + destructiveHint: false, + } } ] })) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts index 9fbcc0a0c..cf59b9e17 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts @@ -439,7 +439,11 @@ export class PowerpackServer { 'Get formatted time with specified offset from current time. Calculate any time point relative to the current time. ' + "For example, get current time, yesterday's time, tomorrow's time, etc. " + 'Use the offset parameter (milliseconds) to specify the offset relative to the current time, positive for future, negative for past.', - inputSchema: zodToJsonSchema(GetTimeArgsSchema) + inputSchema: zodToJsonSchema(GetTimeArgsSchema), + annotations: { + title: 'Get Time', + readOnlyHint: true, + } }, { name: 'get_web_info', @@ -447,7 +451,12 @@ export class PowerpackServer { 'Get detailed content information from a specified webpage. Extract title, description, main content, and other information. ' + 'This tool is useful for analyzing webpage content, obtaining article summaries or details. ' + 'Just provide a valid HTTP or HTTPS URL to get complete webpage content analysis.', - inputSchema: zodToJsonSchema(GetWebInfoArgsSchema) + inputSchema: zodToJsonSchema(GetWebInfoArgsSchema), + annotations: { + title: 'Get Web Info', + readOnlyHint: true, + openWorldHint: true, + } }, { name: 'run_shell_command', @@ -455,7 +464,11 @@ export class PowerpackServer { `${this.shellEnvironment.promptHint} ` + 'Use this tool for day-to-day automation, file inspection, networking, and scripting. ' + 'Provide a full shell command string; output includes stdout and stderr. ', - inputSchema: zodToJsonSchema(RunShellCommandArgsSchema) + inputSchema: zodToJsonSchema(RunShellCommandArgsSchema), + annotations: { + title: 'Run Shell Command', + destructiveHint: true, + } } ] @@ -469,7 +482,12 @@ export class PowerpackServer { 'The code will be executed in an isolated environment with full Python ecosystem support. ' + 'This is safer than local execution as it runs in a controlled cloud sandbox. ' + 'Perfect for data analysis, calculations, visualizations, and any Python programming tasks.', - inputSchema: zodToJsonSchema(E2BRunCodeArgsSchema) + inputSchema: zodToJsonSchema(E2BRunCodeArgsSchema), + annotations: { + title: 'Run Code (E2B)', + readOnlyHint: false, + openWorldHint: true, + } }) } else { // 使用本地运行时执行代码 @@ -487,7 +505,11 @@ export class PowerpackServer { 'For security reasons, the code cannot perform file operations, modify system settings, spawn child processes, or execute external code from network. ' + 'Code execution has a timeout limit, default is 5 seconds, you can adjust it based on the estimated time of the code, generally not recommended to exceed 2 minutes. ' + 'When a problem can be solved by a simple and secure JavaScript/TypeScript code or you have generated a simple code for the user and want to execute it, please use this tool, providing more reliable information to the user.', - inputSchema: zodToJsonSchema(RunNodeCodeArgsSchema) + inputSchema: zodToJsonSchema(RunNodeCodeArgsSchema), + annotations: { + title: 'Run Node.js Code', + destructiveHint: false, + } }) } } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts index 9a7550c64..29ee2a97a 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts @@ -128,7 +128,12 @@ export class RagflowKnowledgeServer { return { name: `ragflow_knowledge_search${suffix}`, description: config.description, - inputSchema: zodToJsonSchema(RagflowKnowledgeSearchArgsSchema) + inputSchema: zodToJsonSchema(RagflowKnowledgeSearchArgsSchema), + annotations: { + title: 'RAGFlow Knowledge Search', + readOnlyHint: true, + openWorldHint: true, + } } }) return { tools } From cf364582cec72551eb9bf1e29aadae2282b4ca94 Mon Sep 17 00:00:00 2001 From: triepod-ai <199543909+triepod-ai@users.noreply.github.com> Date: Thu, 1 Jan 2026 10:16:49 -0600 Subject: [PATCH 2/4] fix: correct destructiveHint for generate_final_answer tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tool deletes the research session when cleanup occurs, so it should have destructiveHint: true to properly signal destructive behavior. Addresses CodeRabbit review feedback. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .../mcpPresenter/inMemoryServers/deepResearchServer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts index eb05bc2bf..1f501bad5 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts @@ -322,7 +322,7 @@ export class DeepResearchServer { inputSchema: zodToJsonSchema(GenerateFinalAnswerArgsSchema), annotations: { title: 'Generate Final Answer', - destructiveHint: false, + destructiveHint: true, } } ] From 7874bf9773381a9b897896d95bad26f3c9a7cabc Mon Sep 17 00:00:00 2001 From: triepod-ai <199543909+triepod-ai@users.noreply.github.com> Date: Thu, 1 Jan 2026 10:33:26 -0600 Subject: [PATCH 3/4] fix: correct readOnlyHint for execute_single_web_search tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tool modifies session state by pushing search results to session.search_results, so readOnlyHint should be false. Addresses CodeRabbit review feedback. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .../mcpPresenter/inMemoryServers/deepResearchServer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts index 1f501bad5..d395c8f10 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts @@ -294,7 +294,7 @@ export class DeepResearchServer { inputSchema: zodToJsonSchema(SingleWebSearchArgsSchema), annotations: { title: 'Execute Web Search', - readOnlyHint: true, + readOnlyHint: false, openWorldHint: true, } }, From 02ac6bff83d15122ca4b870bd0f27cf636b46ad2 Mon Sep 17 00:00:00 2001 From: zerob13 Date: Fri, 2 Jan 2026 22:23:20 +0800 Subject: [PATCH 4/4] chore: remove trailing commas in MCP tool annotations --- .../mcpPresenter/inMemoryServers/appleServer.ts | 14 +++++++------- .../inMemoryServers/artifactsServer.ts | 2 +- .../inMemoryServers/autoPromptingServer.ts | 6 +++--- .../inMemoryServers/bochaSearchServer.ts | 4 ++-- .../inMemoryServers/braveSearchServer.ts | 4 ++-- .../inMemoryServers/builtinKnowledgeServer.ts | 2 +- .../inMemoryServers/conversationSearchServer.ts | 10 +++++----- .../inMemoryServers/deepResearchServer.ts | 10 +++++----- .../inMemoryServers/difyKnowledgeServer.ts | 2 +- .../inMemoryServers/fastGptKnowledgeServer.ts | 2 +- .../mcpPresenter/inMemoryServers/imageServer.ts | 14 +++++++------- .../mcpPresenter/inMemoryServers/meetingServer.ts | 2 +- .../inMemoryServers/powerpackServer.ts | 10 +++++----- .../inMemoryServers/ragflowKnowledgeServer.ts | 2 +- 14 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts index 42cb65f60..68d7aa4da 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts @@ -1212,7 +1212,7 @@ export class AppleServer { inputSchema: zodToJsonSchema(CalendarArgsSchema), annotations: { title: 'Apple Calendar', - destructiveHint: false, + destructiveHint: false } }, { @@ -1221,7 +1221,7 @@ export class AppleServer { inputSchema: zodToJsonSchema(ContactsArgsSchema), annotations: { title: 'Apple Contacts', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -1232,7 +1232,7 @@ export class AppleServer { annotations: { title: 'Apple Mail', destructiveHint: false, - openWorldHint: true, + openWorldHint: true } }, { @@ -1242,7 +1242,7 @@ export class AppleServer { inputSchema: zodToJsonSchema(MapsArgsSchema), annotations: { title: 'Apple Maps', - destructiveHint: false, + destructiveHint: false } }, { @@ -1253,7 +1253,7 @@ export class AppleServer { annotations: { title: 'Apple Messages', destructiveHint: false, - openWorldHint: true, + openWorldHint: true } }, { @@ -1262,7 +1262,7 @@ export class AppleServer { inputSchema: zodToJsonSchema(NotesArgsSchema), annotations: { title: 'Apple Notes', - destructiveHint: false, + destructiveHint: false } }, { @@ -1271,7 +1271,7 @@ export class AppleServer { inputSchema: zodToJsonSchema(RemindersArgsSchema), annotations: { title: 'Apple Reminders', - destructiveHint: false, + destructiveHint: false } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts index a18558b2f..eae8d4cc1 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts @@ -583,7 +583,7 @@ export class ArtifactsServer { inputSchema: zodToJsonSchema(GetArtifactInstructionsArgsSchema), annotations: { title: 'Get Artifact Instructions', - readOnlyHint: true, + readOnlyHint: true } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts index 704cdfc51..390ec8a66 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts @@ -114,7 +114,7 @@ export class AutoPromptingServer { inputSchema: zodToJsonSchema(z.object({})), // 无需参数 annotations: { title: 'List Prompt Template Names', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -123,7 +123,7 @@ export class AutoPromptingServer { inputSchema: GetTemplateParametersArgsJsonSchema, annotations: { title: 'Get Template Parameters', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -132,7 +132,7 @@ export class AutoPromptingServer { inputSchema: FillTemplateArgsJsonSchema, annotations: { title: 'Fill Prompt Template', - readOnlyHint: true, + readOnlyHint: true } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts index 4fafcecd9..328080e0c 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts @@ -135,7 +135,7 @@ export class BochaSearchServer { annotations: { title: 'Bocha Web Search', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } }, { @@ -146,7 +146,7 @@ export class BochaSearchServer { annotations: { title: 'Bocha AI Search', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts index afc441dff..65ca39bf4 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts @@ -316,7 +316,7 @@ export class BraveSearchServer { annotations: { title: 'Brave Web Search', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } }, { @@ -334,7 +334,7 @@ export class BraveSearchServer { annotations: { title: 'Brave Local Search', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts index 6335425fd..89def00f2 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts @@ -60,7 +60,7 @@ export class BuiltinKnowledgeServer { inputSchema: zodToJsonSchema(BuiltinKnowledgeSearchArgsSchema), annotations: { title: 'Builtin Knowledge Search', - readOnlyHint: true, + readOnlyHint: true } } }) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts index 46d16b3e0..6d1d6316c 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts @@ -485,7 +485,7 @@ export class ConversationSearchServer { inputSchema: zodToJsonSchema(SearchConversationsArgsSchema), annotations: { title: 'Search Conversations', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -495,7 +495,7 @@ export class ConversationSearchServer { inputSchema: zodToJsonSchema(SearchMessagesArgsSchema), annotations: { title: 'Search Messages', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -504,7 +504,7 @@ export class ConversationSearchServer { inputSchema: zodToJsonSchema(GetConversationHistoryArgsSchema), annotations: { title: 'Get Conversation History', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -513,7 +513,7 @@ export class ConversationSearchServer { inputSchema: zodToJsonSchema(GetConversationStatsArgsSchema), annotations: { title: 'Get Conversation Stats', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -523,7 +523,7 @@ export class ConversationSearchServer { inputSchema: zodToJsonSchema(CreateNewTabArgsSchema), annotations: { title: 'Create New Tab', - destructiveHint: false, + destructiveHint: false } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts index d395c8f10..5db63005f 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts @@ -285,7 +285,7 @@ export class DeepResearchServer { inputSchema: zodToJsonSchema(StartDeepResearchArgsSchema), annotations: { title: 'Start Deep Research', - destructiveHint: false, + destructiveHint: false } }, { @@ -295,7 +295,7 @@ export class DeepResearchServer { annotations: { title: 'Execute Web Search', readOnlyHint: false, - openWorldHint: true, + openWorldHint: true } }, { @@ -304,7 +304,7 @@ export class DeepResearchServer { inputSchema: zodToJsonSchema(RequestResearchDataArgsSchema), annotations: { title: 'Request Research Data', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -313,7 +313,7 @@ export class DeepResearchServer { inputSchema: zodToJsonSchema(SubmitReflectionResultsArgsSchema), annotations: { title: 'Submit Reflection Results', - destructiveHint: false, + destructiveHint: false } }, { @@ -322,7 +322,7 @@ export class DeepResearchServer { inputSchema: zodToJsonSchema(GenerateFinalAnswerArgsSchema), annotations: { title: 'Generate Final Answer', - destructiveHint: true, + destructiveHint: true } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts index 223a29518..5a7632501 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts @@ -136,7 +136,7 @@ export class DifyKnowledgeServer { annotations: { title: 'Dify Knowledge Search', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } } }) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts index 0c8b1655d..06bd259df 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts @@ -125,7 +125,7 @@ export class FastGptKnowledgeServer { annotations: { title: 'FastGPT Knowledge Search', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } } }) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts index 602817c16..aaee81edb 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts @@ -199,7 +199,7 @@ export class ImageServer { inputSchema: zodToJsonSchema(ReadImageBase64ArgsSchema), annotations: { title: 'Read Image Base64', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -210,7 +210,7 @@ export class ImageServer { annotations: { title: 'Upload Image', destructiveHint: false, - openWorldHint: true, + openWorldHint: true } }, { @@ -220,7 +220,7 @@ export class ImageServer { inputSchema: zodToJsonSchema(ReadMultipleImagesBase64ArgsSchema), annotations: { title: 'Read Multiple Images Base64', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -231,7 +231,7 @@ export class ImageServer { annotations: { title: 'Upload Multiple Images', destructiveHint: false, - openWorldHint: true, + openWorldHint: true } }, { @@ -242,7 +242,7 @@ export class ImageServer { annotations: { title: 'Describe Image', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } }, { @@ -253,7 +253,7 @@ export class ImageServer { annotations: { title: 'Query Image with Prompt', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } }, { @@ -264,7 +264,7 @@ export class ImageServer { annotations: { title: 'OCR Image', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts index d6ef0df35..af8dec4f9 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts @@ -162,7 +162,7 @@ export class MeetingServer { inputSchema: zodToJsonSchema(StartMeetingArgsSchema), annotations: { title: 'Start Meeting', - destructiveHint: false, + destructiveHint: false } } ] diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts index cf59b9e17..c0ad83515 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts @@ -442,7 +442,7 @@ export class PowerpackServer { inputSchema: zodToJsonSchema(GetTimeArgsSchema), annotations: { title: 'Get Time', - readOnlyHint: true, + readOnlyHint: true } }, { @@ -455,7 +455,7 @@ export class PowerpackServer { annotations: { title: 'Get Web Info', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } }, { @@ -467,7 +467,7 @@ export class PowerpackServer { inputSchema: zodToJsonSchema(RunShellCommandArgsSchema), annotations: { title: 'Run Shell Command', - destructiveHint: true, + destructiveHint: true } } ] @@ -486,7 +486,7 @@ export class PowerpackServer { annotations: { title: 'Run Code (E2B)', readOnlyHint: false, - openWorldHint: true, + openWorldHint: true } }) } else { @@ -508,7 +508,7 @@ export class PowerpackServer { inputSchema: zodToJsonSchema(RunNodeCodeArgsSchema), annotations: { title: 'Run Node.js Code', - destructiveHint: false, + destructiveHint: false } }) } diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts index 29ee2a97a..1f07d8e2d 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts @@ -132,7 +132,7 @@ export class RagflowKnowledgeServer { annotations: { title: 'RAGFlow Knowledge Search', readOnlyHint: true, - openWorldHint: true, + openWorldHint: true } } })