import { getAppState } from '@features/app-state/getAppState';
import { initializeAppState } from '@features/app-state/initializeAppState';
import { updateAppState } from '@features/app-state/updateAppState';
import { parseCliArgs } from '@features/cli-args/parseCliArgs';
import { createMcpServer } from '@features/mcp-server/createMcpServer';
import { setupMcpServerGracefulShutdown } from '@features/mcp-server/setupMcpServerGracefulShutdown';
import { setupMcpTransports } from '@features/mcp-server/setupMcpTransports';
import { registerTools } from '@features/mcp-tool-request-handler/registerTools';
import { setupRestServer } from '@features/rest-server/setupRestServer';
import { createGenerateUniqueIdMcpTool } from '@features/tool-generate-unique-id/createGenerateUniqueIdMcpTool';
import { createIsoDateMcpTool } from '@features/tool-iso-date/createIsoDateMcpTool';
/**
* Main entry point for the application
* Initializes and configures the MCP server and related components
*/
export async function main() {
try {
// 1. Parse CLI arguments
const cliArgs = parseCliArgs();
// 2. Initialize AppState with CLI arguments
// The full state will be built progressively.
initializeAppState({
...cliArgs,
tools: [], // Start with an empty tool list
mode: 'mcpAct', // Default mode
});
// 4. Create static tools
const staticTools = [...createGenerateUniqueIdMcpTool(), ...createIsoDateMcpTool()];
updateAppState({ tools: staticTools });
// 5. Create and configure servers
const server = createMcpServer(getAppState());
registerTools(server); // Attaches request handlers to the server
await setupMcpTransports(server);
setupMcpServerGracefulShutdown(server);
// 6. Start REST server if enabled
if (getAppState().enableRestServer) {
setupRestServer();
}
} catch (error) {
console.error('Fatal error during application startup:', error);
process.exit(1);
}
}