feat(MCP): update auto-install server name and add server registration logic

- Changed the auto-install server name to '@cherry/mcp-auto-install' in migration logic.
- Implemented logic to register the MCP server upon tool invocation if it matches the auto-install server name.
This commit is contained in:
MyPrototypeWhat 2025-05-08 11:36:39 +08:00 committed by 亢奋猫
parent aeb8091c89
commit 875d20d34c
2 changed files with 22 additions and 1 deletions

View File

@ -1126,7 +1126,7 @@ const migrateConfig = {
'88': (state: RootState) => {
try {
if (state?.mcp?.servers) {
const hasAutoInstall = state.mcp.servers.some((server) => server.name === 'mcp-auto-install')
const hasAutoInstall = state.mcp.servers.some((server) => server.name === '@cherry/mcp-auto-install')
if (!hasAutoInstall) {
const defaultServer = mcpSlice.getInitialState().servers[0]
state.mcp.servers = [{ ...defaultServer, id: nanoid() }, ...state.mcp.servers]

View File

@ -2,14 +2,18 @@ import { ContentBlockParam, ToolUnion, ToolUseBlock } from '@anthropic-ai/sdk/re
import { MessageParam } from '@anthropic-ai/sdk/resources'
import { Content, FunctionCall, Part } from '@google/genai'
import store from '@renderer/store'
import { addMCPServer } from '@renderer/store/mcp'
import { MCPCallToolResponse, MCPServer, MCPTool, MCPToolResponse } from '@renderer/types'
import type { MCPToolCompleteChunk, MCPToolInProgressChunk } from '@renderer/types/chunk'
import { ChunkType } from '@renderer/types/chunk'
import { nanoid } from 'nanoid'
import OpenAI from 'openai'
import { ChatCompletionContentPart, ChatCompletionMessageParam, ChatCompletionMessageToolCall } from 'openai/resources'
import { CompletionsParams } from '../providers/AiProvider'
const MCP_AUTO_INSTALL_SERVER_NAME = '@cherry/mcp-auto-install'
// const ensureValidSchema = (obj: Record<string, any>) => {
// // Filter out unsupported keys for Gemini
// const filteredObj = filterUnsupportedKeys(obj)
@ -219,6 +223,23 @@ export async function callMCPTool(tool: MCPTool): Promise<MCPCallToolResponse> {
name: tool.name,
args: tool.inputSchema
})
if (tool.serverName === MCP_AUTO_INSTALL_SERVER_NAME) {
if (resp.data) {
const mcpServer: MCPServer = {
id: `f${nanoid()}`,
name: resp.data.name,
description: resp.data.description,
baseUrl: resp.data.baseUrl,
command: resp.data.command,
args: resp.data.args,
env: resp.data.env,
registryUrl: '',
isActive: false,
provider: 'CherryAI'
}
store.dispatch(addMCPServer(mcpServer))
}
}
console.log(`[MCP] Tool called: ${tool.serverName} ${tool.name}`, resp)
return resp