pub fn render(
base: BaseImage,
toolchains: &[Toolchain],
mcps: &[McpServer],
) -> StringExpand description
Stitch the header, toolchain fragments, MCP block, and footer into a final Dockerfile string.
toolchains and mcps are deduped + sorted into canonical order so
output is byte-stable regardless of multi-select input order.
Toolchain::None in the toolchain set is treated as “no toolchain
section” (skipped silently).