import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { readFileSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { registerAll } from "./tools/index.js";
const PACKAGE_VERSION: string = (() => {
try {
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const pkgPath = path.resolve(__dirname, "..", "package.json");
const raw = readFileSync(pkgPath, "utf8");
const parsed = JSON.parse(raw) as { version?: unknown };
return typeof parsed.version === "string" ? parsed.version : "0.0.0";
} catch {
return "0.0.0";
}
})();
export function createServer(): McpServer {
const server = new McpServer({
name: "sde-mcp",
version: PACKAGE_VERSION,
});
registerAll(server);
return server;
}
export function setupSignalHandlers(cleanup: () => Promise<void>): void {
process.on("SIGINT", async () => {
await cleanup();
process.exit(0);
});
process.on("SIGTERM", async () => {
await cleanup();
process.exit(0);
});
}
export async function main(): Promise<void> {
// STDIO-only server
const server = createServer();
setupSignalHandlers(async () => server.close());
const stdioTransport = new StdioServerTransport();
await server.connect(stdioTransport);
console.error("MCP server running on stdio");
}