mirror of
https://github.com/samanhappy/mcphub.git
synced 2026-01-01 04:08:52 -05:00
fix: reinitialize mcp server connection on update (#263)
This commit is contained in:
@@ -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',
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user