Skip to main content
Glama
index.ts2.78 kB
import { isPortFree } from "@/helpers/checkPort"; import { createSpinner } from "nanospinner"; import { createServer, setPort, setTransportType, isServerRunning, } from "@/aggregator/server/manager"; export async function startMCPAggregatorServer( transportType: "sse" | "stdio" = "sse", port: number = 9338 ) { const spinner = createSpinner("Starting MCP Aggregator server").start(); try { // Validate port number if (isNaN(port) || !Number.isInteger(port) || port < 1 || port > 65535) { spinner.error({ text: `Invalid port number '${port}'. Must be an integer between 1 and 65535.`, }); return; } // Check if a server is already running try { const serverRunning = await isServerRunning(); if (serverRunning) { spinner.warn({ text: "MCP Aggregator is already running\n To restart, use: \x1b[2mfuri meta restart\x1b[0m", }); return; } } catch (checkError) { spinner.warn({ text: `Unable to determine if server is running: ${ checkError instanceof Error ? checkError.message : String(checkError) }\n Will attempt to start anyway.`, }); } // Check if the port is already in use try { const portInUse = await isPortFree(port); if (!portInUse) { spinner.error({ text: `Port ${port} is already in use. Please choose a different port.`, }); return; } } catch (portCheckError) { spinner.warn({ text: `Unable to check port availability: ${ portCheckError instanceof Error ? portCheckError.message : String(portCheckError) }\n Will attempt to start anyway.`, }); } // Set configuration try { setPort(port); setTransportType(transportType); } catch (configError) { spinner.error({ text: `Failed to set server configuration: ${ configError instanceof Error ? configError.message : String(configError) }`, }); return; } // Start the server with PM2 try { await createServer(); } catch (startError) { spinner.error({ text: `Failed to start MCP Aggregator server: ${ startError instanceof Error ? startError.message : String(startError) }`, }); return; } spinner.success({ text: "MCP Aggregator server started" }); console.log( ` \x1b[2mAggregator running on http://127.0.0.1:${port}/sse (persistent MCP connections)` ); } catch (error: any) { spinner.error({ text: `Failed to start MCP Aggregator server: ${ error.message || "Unknown error" }`, }); return null; } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ashwwwin/furi'

If you have feedback or need assistance with the MCP directory API, please join our Discord server