hkipo-mcp
Version:
港股打新信息MCP服务 - 提供实时的香港新股信息查询能力
105 lines • 4.08 kB
JavaScript
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
import { tools } from './tools/index.js';
import { ToolHandlers } from './handlers/toolHandlers.js';
import { NetworkLogger } from './utils/logger.js';
class HKIPOMCPServer {
server;
toolHandlers;
constructor() {
this.server = new Server({
name: 'hkipo-mcp-server',
version: '1.0.0',
description: '港股新股信息MCP服务',
}, {
capabilities: {
tools: {},
},
});
this.toolHandlers = new ToolHandlers();
this.setupHandlers();
}
setupHandlers() {
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
return { tools: tools };
});
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
try {
switch (name) {
case 'list_active_ipos':
return await this.toolHandlers.listActiveIPOs(args);
case 'get_ipo_details':
return await this.toolHandlers.getIPODetails(args);
case 'get_grey_market_data':
return await this.toolHandlers.getGreyMarketData(args);
case 'get_first_day_performance':
return await this.toolHandlers.getFirstDayPerformance(args);
case 'search_ipo_by_name':
return await this.toolHandlers.searchIPOByName(args);
case 'get_market_overview':
return await this.toolHandlers.getMarketOverview(args);
case 'get_placing_result':
return await this.toolHandlers.getPlacingResult(args);
default:
throw new Error(`未知的工具: ${name}`);
}
}
catch (error) {
console.error(`执行工具 ${name} 失败:`, error);
return {
content: [{
type: 'text',
text: JSON.stringify({
success: false,
error: error.message || '未知错误',
message: `执行工具 ${name} 失败`,
timestamp: new Date().toISOString()
}, null, 2)
}]
};
}
});
this.server.onerror = (error) => {
console.error('[MCP服务器错误]', error);
};
process.on('SIGINT', () => this.gracefulShutdown('SIGINT'));
process.on('SIGTERM', () => this.gracefulShutdown('SIGTERM'));
}
async gracefulShutdown(signal) {
console.error(`收到 ${signal} 信号,正在关闭服务...`);
try {
NetworkLogger.logServerStop();
await this.server.close();
process.exit(0);
}
catch (error) {
console.error('关闭服务时出错:', error);
process.exit(1);
}
}
async start() {
const transport = new StdioServerTransport();
await this.server.connect(transport);
NetworkLogger.logServerStart();
console.error('港股新股信息MCP服务已启动,等待连接...');
process.stdin.resume();
}
}
async function main() {
try {
const server = new HKIPOMCPServer();
await server.start();
}
catch (error) {
console.error('启动MCP服务器失败:', error);
process.exit(1);
}
}
main().catch((error) => {
console.error('启动失败:', error);
process.exit(1);
});
//# sourceMappingURL=index.js.map