import { startServer } from './server.js';
import {
createTransport,
createHTTPTransport,
type TransportType,
type HTTPTransportOptions,
} from './transport.js';
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
import { logger } from './utils/logger.js';
/**
* 服务器入口点
*/
async function main() {
logger.info('Starting Time MCP server');
logger.debug('Environment variables', {
TRANSPORT: process.env.TRANSPORT,
HOST: process.env.HOST,
PORT: process.env.PORT,
MCP_PATH: process.env.MCP_PATH,
API_PATH: process.env.API_PATH,
LOG_LEVEL: process.env.LOG_LEVEL,
});
try {
// 从环境变量读取传输方式,默认为 stdio
const transportType = (process.env.TRANSPORT || 'stdio') as TransportType;
logger.info(`Transport type: ${transportType}`);
if (transportType === 'http') {
// HTTP 模式
const options: HTTPTransportOptions = {
host: process.env.HOST || '0.0.0.0',
port: process.env.PORT ? parseInt(process.env.PORT, 10) : 3000,
path: process.env.MCP_PATH || process.env.API_PATH || '/mcp',
};
logger.info('HTTP transport options', options);
const result = await createHTTPTransport(options);
await startServer(result.transport);
// 保持 HTTP 服务器运行
// 设置优雅关闭
const shutdown = () => {
logger.info('Shutting down HTTP server...');
result.httpServer?.close(() => {
logger.info('HTTP server closed');
process.exit(0);
});
};
process.on('SIGINT', shutdown);
process.on('SIGTERM', shutdown);
} else {
// Stdio 模式(默认)
logger.info('Using stdio transport mode');
const transport = await createTransport('stdio');
await startServer(transport as Transport);
}
} catch (error) {
logger.error('Failed to start server', error);
process.exit(1);
}
}
main();