fix: reinitialize mcp server connection on update (#263)

This commit is contained in:
samanhappy
2025-08-10 16:20:36 +08:00
committed by GitHub
parent 35012f99fc
commit 0b4dc453a5
2 changed files with 10 additions and 8 deletions

View File

@@ -280,7 +280,7 @@ export const updateServer = async (req: Request, res: Response): Promise<void> =
const result = await addOrUpdateServer(name, config, true); // Allow override for updates const result = await addOrUpdateServer(name, config, true); // Allow override for updates
if (result.success) { if (result.success) {
notifyToolChanged(); notifyToolChanged(name);
res.json({ res.json({
success: true, success: true,
message: 'Server updated successfully', message: 'Server updated successfully',

View File

@@ -70,8 +70,8 @@ export const deleteMcpServer = (sessionId: string): void => {
delete servers[sessionId]; delete servers[sessionId];
}; };
export const notifyToolChanged = async () => { export const notifyToolChanged = async (name?: string) => {
await registerAllTools(false); await registerAllTools(false, name);
Object.values(servers).forEach((server) => { Object.values(servers).forEach((server) => {
server server
.sendToolListChanged() .sendToolListChanged()
@@ -323,7 +323,10 @@ const callToolWithReconnect = async (
}; };
// Initialize MCP server clients // Initialize MCP server clients
export const initializeClientsFromSettings = async (isInit: boolean): Promise<ServerInfo[]> => { export const initializeClientsFromSettings = async (
isInit: boolean,
serverName?: string,
): Promise<ServerInfo[]> => {
const settings = loadSettings(); const settings = loadSettings();
const existingServerInfos = serverInfos; const existingServerInfos = serverInfos;
serverInfos = []; serverInfos = [];
@@ -348,7 +351,7 @@ export const initializeClientsFromSettings = async (isInit: boolean): Promise<Se
const existingServer = existingServerInfos.find( const existingServer = existingServerInfos.find(
(s) => s.name === name && s.status === 'connected', (s) => s.name === name && s.status === 'connected',
); );
if (existingServer) { if (existingServer && (!serverName || serverName !== name)) {
serverInfos.push({ serverInfos.push({
...existingServer, ...existingServer,
enabled: conf.enabled === undefined ? true : conf.enabled, enabled: conf.enabled === undefined ? true : conf.enabled,
@@ -359,7 +362,6 @@ export const initializeClientsFromSettings = async (isInit: boolean): Promise<Se
let transport; let transport;
let openApiClient; let openApiClient;
if (conf.type === 'openapi') { if (conf.type === 'openapi') {
// Handle OpenAPI type servers // Handle OpenAPI type servers
if (!conf.openapi?.url && !conf.openapi?.schema) { if (!conf.openapi?.url && !conf.openapi?.schema) {
@@ -517,8 +519,8 @@ export const initializeClientsFromSettings = async (isInit: boolean): Promise<Se
}; };
// Register all MCP tools // Register all MCP tools
export const registerAllTools = async (isInit: boolean): Promise<void> => { export const registerAllTools = async (isInit: boolean, serverName?: string): Promise<void> => {
await initializeClientsFromSettings(isInit); await initializeClientsFromSettings(isInit, serverName);
}; };
// Get all server information // Get all server information