UNPKG

@21st-dev/magic

Version:

Magic MCP UI builder by 21st.dev

67 lines (66 loc) 2.27 kB
#!/usr/bin/env node import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { setupJsonConsole } from "./utils/console.js"; import { CreateUiTool } from "./tools/create-ui.js"; import { LogoSearchTool } from "./tools/logo-search.js"; import { FetchUiTool } from "./tools/fetch-ui.js"; import { RefineUiTool } from "./tools/refine-ui.js"; setupJsonConsole(); const VERSION = "0.0.41"; const server = new McpServer({ name: "21st-magic", version: VERSION, }); // Register tools new CreateUiTool().register(server); new LogoSearchTool().register(server); new FetchUiTool().register(server); new RefineUiTool().register(server); async function runServer() { const transport = new StdioServerTransport(); console.log(`Starting server v${VERSION} (PID: ${process.pid})`); let isShuttingDown = false; const cleanup = () => { if (isShuttingDown) return; isShuttingDown = true; console.log(`Shutting down server (PID: ${process.pid})...`); try { transport.close(); } catch (error) { console.error(`Error closing transport (PID: ${process.pid}):`, error); } console.log(`Server closed (PID: ${process.pid})`); process.exit(0); }; transport.onerror = (error) => { console.error(`Transport error (PID: ${process.pid}):`, error); cleanup(); }; transport.onclose = () => { console.log(`Transport closed unexpectedly (PID: ${process.pid})`); cleanup(); }; process.on("SIGTERM", () => { console.log(`Received SIGTERM (PID: ${process.pid})`); cleanup(); }); process.on("SIGINT", () => { console.log(`Received SIGINT (PID: ${process.pid})`); cleanup(); }); process.on("beforeExit", () => { console.log(`Received beforeExit (PID: ${process.pid})`); cleanup(); }); await server.connect(transport); console.log(`Server started (PID: ${process.pid})`); } runServer().catch((error) => { console.error(`Fatal error running server (PID: ${process.pid}):`, error); if (!process.exitCode) { process.exit(1); } });