#!/usr/bin/env node
/**
* Main entry point for HN MCP Server
*/
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { HNClient } from './lib/hn-client.js';
import { logger } from './lib/logger.js';
import { server } from './server.js';
// import { registerGetAskHN } from './tools/get-ask-hn.js';
import { registerGetAskHN } from './tools/get-ask-hn.js';
import { registerGetFrontPage } from './tools/get-front-page.js';
import { registerGetLatestStories } from './tools/get-latest-stories.js';
import { registerGetShowHN } from './tools/get-show-hn.js';
import { registerGetStory } from './tools/get-story.js';
import { registerGetUser } from './tools/get-user.js';
import { registerSearchByDate } from './tools/search-by-date.js';
import { registerSearchComments } from './tools/search-comments.js';
// Import tool registration functions
import { registerSearchStories } from './tools/search-stories.js';
async function main() {
try {
// Create HN API client
const hnClient = new HNClient();
// Register all tools
registerSearchStories(server, hnClient);
registerSearchByDate(server, hnClient);
registerSearchComments(server, hnClient);
registerGetFrontPage(server, hnClient);
registerGetLatestStories(server, hnClient);
registerGetAskHN(server, hnClient);
registerGetShowHN(server, hnClient);
registerGetStory(server, hnClient);
registerGetUser(server, hnClient);
// Setup stdio transport
const transport = new StdioServerTransport();
// Connect server to transport
await server.connect(transport);
logger.info('HN MCP Server started successfully');
} catch (error) {
logger.error({ error }, 'Failed to start server');
process.exit(1);
}
}
// Handle graceful shutdown
process.on('SIGINT', () => {
logger.info('Received SIGINT, shutting down');
process.exit(0);
});
process.on('SIGTERM', () => {
logger.info('Received SIGTERM, shutting down');
process.exit(0);
});
// Start server
main();