🕒 feat: Add Configurable MCP Server Timeouts (#6199)

This commit is contained in:
Kaushik Iska 2025-03-06 11:02:43 -06:00 committed by GitHub
parent c8f7588164
commit 780fdf743a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 8 additions and 2 deletions

View file

@ -113,12 +113,14 @@ mcpServers:
everything:
# type: sse # type can optionally be omitted
url: http://localhost:3001/sse
timeout: 60000 # 1 minute timeout for this server, this is the default timeout for MCP servers.
puppeteer:
type: stdio
command: npx
args:
- -y
- "@modelcontextprotocol/server-puppeteer"
timeout: 300000 # 5 minutes timeout for this server
filesystem:
# type: stdio
command: npx

View file

@ -3,6 +3,7 @@ import { extractEnvVariable } from './utils';
const BaseOptionsSchema = z.object({
iconPath: z.string().optional(),
timeout: z.number().optional(),
});
export const StdioOptionsSchema = BaseOptionsSchema.extend({

View file

@ -43,12 +43,14 @@ export class MCPConnection extends EventEmitter {
private isInitializing = false;
private reconnectAttempts = 0;
iconPath?: string;
timeout?: number;
constructor(serverName: string, private readonly options: t.MCPOptions, private logger?: Logger) {
super();
this.serverName = serverName;
this.logger = logger;
this.iconPath = options.iconPath;
this.timeout = options.timeout;
this.client = new Client(
{
name: 'librechat-mcp-client',

View file

@ -159,7 +159,7 @@ export class MCPManager {
};
}
} catch (error) {
this.logger.warn(`[MCP][${serverName}] Not connected, skipping tool fetch`);
this.logger.warn(`[MCP][${serverName}] Error fetching tools:`, error);
}
}
}
@ -183,7 +183,7 @@ export class MCPManager {
});
}
} catch (error) {
this.logger.error(`[MCP][${serverName}] Error fetching tools`, error);
this.logger.error(`[MCP][${serverName}] Error fetching tools:`, error);
}
}
}
@ -209,6 +209,7 @@ export class MCPManager {
},
},
CallToolResultSchema,
{ timeout: connection.timeout },
);
return formatToolContent(result, provider);
}