#!/usr/bin/env node
// Import MCP server components
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// Import our configuration and server components
import { SERVER_CONFIG } from "./config.js";
import { setupToolHandlers } from "./handlers.js";
import { SupabaseEmojikeyService } from "./service.supabase.js";
// Main server class that coordinates everything
class EmojikeyServer {
private server: Server;
private emojikeyService: SupabaseEmojikeyService;
constructor() {
this.server = new Server(
{
name: SERVER_CONFIG.NAME,
version: SERVER_CONFIG.VERSION,
},
{
capabilities: { tools: {} },
},
);
// Create our Supabase storage service instance
this.emojikeyService = new SupabaseEmojikeyService();
// Set up error handling and handlers
this.setup();
}
private setup(): void {
this.setupErrorHandling();
setupToolHandlers(this.server, this.emojikeyService);
}
private setupErrorHandling(): void {
// Log MCP-specific errors
this.server.onerror = (error) => {
console.error("[MCP Error]", error);
};
// Handle graceful shutdown
process.on("SIGINT", async () => {
await this.server.close();
process.exit(0);
});
}
async run(): Promise<void> {
const transport = new StdioServerTransport();
await this.server.connect(transport);
console.error("Emojikey MCP server running on stdio");
}
}
// Create and start the server
const server = new EmojikeyServer();
server.run().catch(console.error);