UNPKG

@toolprint/hypertool-mcp

Version:

HyperTool MCP proxy server for routing requests between clients and multiple underlying MCP servers

150 lines • 6.46 kB
/** * Show all servers in the database */ import { Command } from "commander"; import { theme } from "../../utils/theme.js"; import { output } from "../../utils/output.js"; import { getCompositeDatabaseService } from "../../db/compositeDatabaseService.js"; export function createShowServersCommand() { const servers = new Command("servers"); servers .description("Show all MCP servers stored in the database") .option("--source <source>", "Filter by config source ID") .option("--type <type>", "Filter by server type (stdio, http, sse)") .option("--group <group>", "Show only servers in a specific group") .option("--json", "Output in JSON format") .option("--format <format>", "Output format: table, list, json", "list") .option("--no-details", "Show only server names") .action(async (options) => { try { // Check if NeDB is enabled if (!false) { output.error("❌ Database features are not available when HYPERTOOL_NEDB_ENABLED is not set"); output.info("To enable database features, set: export HYPERTOOL_NEDB_ENABLED=true"); process.exit(1); } const dbService = getCompositeDatabaseService(); await dbService.init(); let servers = await dbService.servers.findAll(); // Apply filters if (options.source) { servers = servers.filter((s) => s.sourceId === options.source); } if (options.type) { servers = servers.filter((s) => s.type === options.type); } if (options.group) { const group = await dbService.groups.findByName(options.group); if (!group) { output.error(`❌ Group "${options.group}" not found`); process.exit(1); } const groupServers = await dbService.groups.findServersInGroup(group.id); servers = groupServers; } // Handle output format const format = options.json ? "json" : options.format; if (format === "json") { output.log(JSON.stringify(servers, null, 2)); } else if (format === "table") { displayServersTable(servers, options.details !== false); } else { output.displayHeader("📡 MCP Servers in Database"); output.displaySpaceBuffer(1); if (servers.length === 0) { output.warn(" No servers found"); } else { output.info(` Total: ${servers.length} server(s)`); output.displaySpaceBuffer(1); if (options.details === false) { // Simple list without details for (const server of servers) { output.info(` • ${theme.primary(server.name)} (${theme.muted(server.type)})`); } } else { // Detailed list for (const server of servers) { output.displayInstruction(` • ${theme.primary(server.name)}`); output.info(` Type: ${theme.muted(server.type)}`); if (server.sourceId) { const source = await dbService.configSources.findById(server.sourceId); if (source) { output.info(` Source: ${theme.muted(`${source.type} (${source.path})`)}`); } } if (server.type === "stdio" && "command" in server.config) { output.info(` Command: ${theme.muted(server.config.command)}`); } else if ((server.type === "http" || server.type === "sse") && "url" in server.config) { output.info(` URL: ${theme.muted(server.config.url)}`); } output.info(` Modified: ${theme.muted(new Date(server.lastModified).toLocaleString())}`); output.displaySpaceBuffer(1); } } } } } catch (error) { output.error("❌ Failed to show servers:"); output.error(error instanceof Error ? error.message : String(error)); process.exit(1); } }); return servers; } /** * Display servers in table format */ async function displayServersTable(servers, showDetails) { const dbService = getCompositeDatabaseService(); output.displayHeader("📡 MCP Servers in Database"); output.displaySpaceBuffer(1); if (servers.length === 0) { output.warn(" No servers found"); return; } // Prepare table data const tableData = []; for (const server of servers) { const row = { Name: server.name, Type: server.type, }; if (showDetails) { // Get source info if (server.sourceId) { const source = await dbService.configSources.findById(server.sourceId); row.Source = source ? `${source.type}` : "unknown"; } else { row.Source = "none"; } // Get connection info if (server.type === "stdio" && "command" in server.config) { row.Connection = server.config.command.substring(0, 30) + (server.config.command.length > 30 ? "..." : ""); } else if ((server.type === "http" || server.type === "sse") && "url" in server.config) { row.Connection = server.config.url; } else { row.Connection = "-"; } row.Modified = new Date(server.lastModified).toLocaleDateString(); } tableData.push(row); } // Display table if (tableData.length > 0) { console.table(tableData); } } //# sourceMappingURL=show-servers.js.map