diff --git a/frontend/src/components/layout/Header.tsx b/frontend/src/components/layout/Header.tsx index 0e4b03a..1b12927 100644 --- a/frontend/src/components/layout/Header.tsx +++ b/frontend/src/components/layout/Header.tsx @@ -40,7 +40,11 @@ const Header: React.FC = ({ onToggleSidebar }) => { {/* Theme Switch and Version */}
- {import.meta.env.PACKAGE_VERSION} + + {import.meta.env.PACKAGE_VERSION === 'dev' + ? import.meta.env.PACKAGE_VERSION + : `v${import.meta.env.PACKAGE_VERSION}`} + { diff --git a/src/server.ts b/src/server.ts index ac6c337..c68de4b 100644 --- a/src/server.ts +++ b/src/server.ts @@ -3,7 +3,7 @@ import config from './config/index.js'; import path from 'path'; import { fileURLToPath } from 'url'; import fs from 'fs'; -import { initMcpServer } from './services/mcpService.js'; +import { initUpstreamServers } from './services/mcpService.js'; import { initMiddlewares } from './middlewares/index.js'; import { initRoutes } from './routes/index.js'; import { @@ -37,7 +37,7 @@ export class AppServer { initRoutes(this.app); console.log('Server initialized successfully'); - initMcpServer(config.mcpHubName, config.mcpHubVersion) + initUpstreamServers() .then(() => { console.log('MCP server initialized successfully'); this.app.get('/sse/:group?', (req, res) => handleSseConnection(req, res)); diff --git a/src/services/mcpService.ts b/src/services/mcpService.ts index 1d9f092..f7441c8 100644 --- a/src/services/mcpService.ts +++ b/src/services/mcpService.ts @@ -12,17 +12,18 @@ import { getServersInGroup } from './groupService.js'; const servers: { [sessionId: string]: Server } = {}; -export const initMcpServer = async (name: string, version: string): Promise => { +export const initUpstreamServers = async (): Promise => { await registerAllTools(true); }; -export const getMcpServer = (sessionId?: string): Server => { +export const getMcpServer = (sessionId?: string, group?: string): Server => { if (!sessionId) { - return createMcpServer(config.mcpHubName, config.mcpHubVersion); + return createMcpServer(config.mcpHubName, config.mcpHubVersion, group); } if (!servers[sessionId]) { - const server = createMcpServer(config.mcpHubName, config.mcpHubVersion); + const serverGroup = group || getGroup(sessionId); + const server = createMcpServer(config.mcpHubName, config.mcpHubVersion, serverGroup); servers[sessionId] = server; } else { console.log(`MCP server already exists for sessionId: ${sessionId}`); @@ -417,8 +418,24 @@ const handleCallToolRequest = async (request: any, extra: any) => { }; // Create McpServer instance -export const createMcpServer = (name: string, version: string): Server => { - const server = new Server({ name, version }, { capabilities: { tools: {} } }); +export const createMcpServer = (name: string, version: string, group?: string): Server => { + // Determine server name based on routing type + let serverName = name; + + if (group) { + // Check if it's a group or a single server + const serversInGroup = getServersInGroup(group); + if (!serversInGroup || serversInGroup.length === 0) { + // Single server routing + serverName = `${name}_${group}`; + } else { + // Group routing + serverName = `${name}_${group}_group`; + } + } + // If no group, use default name (global routing) + + const server = new Server({ name: serverName, version }, { capabilities: { tools: {} } }); server.setRequestHandler(ListToolsRequestSchema, handleListToolsRequest); server.setRequestHandler(CallToolRequestSchema, handleCallToolRequest); return server; diff --git a/src/services/sseService.ts b/src/services/sseService.ts index 4129892..6294300 100644 --- a/src/services/sseService.ts +++ b/src/services/sseService.ts @@ -70,7 +70,7 @@ export const handleSseConnection = async (req: Request, res: Response): Promise< console.log( `New SSE connection established: ${transport.sessionId} with group: ${group || 'global'}`, ); - await getMcpServer(transport.sessionId).connect(transport); + await getMcpServer(transport.sessionId, group).connect(transport); }; export const handleSseMessage = async (req: Request, res: Response): Promise => { @@ -135,7 +135,7 @@ export const handleMcpPostRequest = async (req: Request, res: Response): Promise }; console.log(`MCP connection established: ${transport.sessionId}`); - await getMcpServer(transport.sessionId).connect(transport); + await getMcpServer(transport.sessionId, group).connect(transport); } else { res.status(400).json({ jsonrpc: '2.0', diff --git a/src/utils/version.ts b/src/utils/version.ts new file mode 100644 index 0000000..cd78e06 --- /dev/null +++ b/src/utils/version.ts @@ -0,0 +1,23 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +// Get the directory name in ESM +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +/** + * Gets the package version from package.json + * @returns The version string from package.json, or 'dev' if not found + */ +export const getPackageVersion = (): string => { + try { + const packageJsonPath = path.resolve(__dirname, '../../package.json'); + const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf8'); + const packageJson = JSON.parse(packageJsonContent); + return packageJson.version || 'dev'; + } catch (error) { + console.error('Error reading package version:', error); + return 'dev'; + } +};