UNPKG

@1mcp/agent

Version:

One MCP server to aggregate them all - A unified Model Context Protocol server implementation

47 lines (46 loc) 2.21 kB
import logger from '../logger/logger.js'; import { setupClientToServerNotifications, setupServerToClientNotifications, } from '../handlers/notificationHandlers.js'; import { registerRequestHandlers } from '../handlers/requestHandlers.js'; /** * Collects capabilities from all clients and registers them with the server * @param clients Record of client instances * @param server The MCP server instance * @param tags Array of tags to filter clients by * @returns The combined server capabilities */ export async function setupCapabilities(clients, serverInfo) { // Collect capabilities from all clients const capabilities = collectCapabilities(clients); // Set up notification handlers setupClientToServerNotifications(clients, serverInfo); setupServerToClientNotifications(clients, serverInfo); // Register request handlers based on capabilities registerRequestHandlers(clients, serverInfo); return capabilities; } /** * Collects capabilities from all clients * @param clients Record of client instances * @returns The combined server capabilities */ function collectCapabilities(clients) { const capabilities = {}; for (const [name, clientInfo] of Object.entries(clients)) { try { const serverCapabilities = clientInfo.client.getServerCapabilities() || {}; logger.debug(`Capabilities from ${name}: ${JSON.stringify(serverCapabilities)}`); // Store capabilities per client clientInfo.capabilities = serverCapabilities; // Aggregate capabilities capabilities.resources = { ...capabilities.resources, ...serverCapabilities.resources }; capabilities.tools = { ...capabilities.tools, ...serverCapabilities.tools }; capabilities.prompts = { ...capabilities.prompts, ...serverCapabilities.prompts }; capabilities.experimental = { ...capabilities.experimental, ...serverCapabilities.experimental }; capabilities.logging = { ...capabilities.logging, ...serverCapabilities.logging }; } catch (error) { logger.error(`Failed to get capabilities from ${name}: ${error}`); } } return capabilities; }