# MCPService.serve(_:write:)

- **Module:** MCPService
- **Package:** libtmux-swift
- **Language:** Swift
- **Kind:** method
- **Source:** https://github.com/libtmux/libtmux-swift/blob/f02a4668570e1cc5198c941413750e021f42c214/Sources/LibTmuxMCP/Serve.swift#L39
- **Page:** https://libtmux.org/reference/swift/mcpservice-serve(_-write-)/

```
MCPService.serve(_:write:)(lines: AsyncStream<String>, write: @escaping (String) async -> Void) -> ()
```

Reads requests from `lines` and writes each answer through `write`.

Returns once `lines` has ended *and* every request it carried has been
answered. The end of input means no more requests, not abandon the ones
in hand: a client that sent a batch and closed its end is still owed the
replies, and cancelling them would drop answers that were already
computed.
Cancelling this call cancels active requests and queued output. The
`write` closure must return cooperatively when its task is cancelled.
`AsyncStream` concretely, rather than any non-throwing `AsyncSequence`:
naming the failure type is what makes a sequence non-throwing, and that
spelling needs macOS 15 where this package supports 13. Package-only
transports share the generic request loop below.
