diff --git a/src/main.zig b/src/main.zig index ed5faa01..560a0128 100644 --- a/src/main.zig +++ b/src/main.zig @@ -150,12 +150,7 @@ fn run(allocator: Allocator, main_arena: Allocator) !void { log.opts.format = .logfmt; - var stdout = std.fs.File.stdout().writer(&.{}); - - var mcp_server: *lp.mcp.Server = try .init(allocator, app, &stdout.interface); - defer mcp_server.deinit(); - - var worker_thread = try std.Thread.spawn(.{}, mcpThread, .{ mcp_server, app }); + var worker_thread = try std.Thread.spawn(.{}, mcpThread, .{ allocator, app }); defer worker_thread.join(); app.network.run(); @@ -171,8 +166,16 @@ fn fetchThread(app: *App, url: [:0]const u8, fetch_opts: lp.FetchOpts) void { }; } -fn mcpThread(mcp_server: *lp.mcp.Server, app: *App) void { +fn mcpThread(allocator: std.mem.Allocator, app: *App) void { defer app.network.stop(); + + var stdout = std.fs.File.stdout().writer(&.{}); + var mcp_server: *lp.mcp.Server = lp.mcp.Server.init(allocator, app, &stdout.interface) catch |err| { + log.fatal(.mcp, "mcp init error", .{ .err = err }); + return; + }; + defer mcp_server.deinit(); + var stdin_buf: [64 * 1024]u8 = undefined; var stdin = std.fs.File.stdin().reader(&stdin_buf); lp.mcp.router.processRequests(mcp_server, &stdin.interface) catch |err| {