(config: ExecutorMcpServerConfig)
| 330 | // --------------------------------------------------------------------------- |
| 331 | |
| 332 | export const runMcpStdioServer = async (config: ExecutorMcpServerConfig): Promise<void> => { |
| 333 | startIntegrationsRefresh(); |
| 334 | |
| 335 | const server = await Effect.runPromise(createExecutorMcpServer(config)); |
| 336 | const transport = new StdioServerTransport(); |
| 337 | |
| 338 | const waitForExit = () => |
| 339 | new Promise<void>((resolve) => { |
| 340 | const finish = () => { |
| 341 | process.off("SIGINT", finish); |
| 342 | process.off("SIGTERM", finish); |
| 343 | process.stdin.off("end", finish); |
| 344 | process.stdin.off("close", finish); |
| 345 | resolve(); |
| 346 | }; |
| 347 | process.once("SIGINT", finish); |
| 348 | process.once("SIGTERM", finish); |
| 349 | process.stdin.once("end", finish); |
| 350 | process.stdin.once("close", finish); |
| 351 | }); |
| 352 | |
| 353 | // oxlint-disable-next-line executor/no-try-catch-or-throw -- boundary: stdio server lifetime uses Promise-based SDK/process APIs and always closes resources |
| 354 | try { |
| 355 | await server.connect(transport); |
| 356 | await waitForExit(); |
| 357 | } finally { |
| 358 | await ignoreClose(() => transport.close()); |
| 359 | await ignoreClose(() => server.close()); |
| 360 | } |
| 361 | }; |
nothing calls this directly
no test coverage detected