From 05a56dbf24f195c62286e3273a2671d3b4904b00 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Thu, 4 Dec 2025 12:13:20 -0600 Subject: [PATCH] claude-code: fix wrapper to inject --mcp-config after subcommands Manually wrap program to maintain options called from cli. Signed-off-by: Austin Horstman --- modules/programs/claude-code.nix | 23 +++++++++---------- .../programs/claude-code/expected-mcp-wrapper | 5 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/modules/programs/claude-code.nix b/modules/programs/claude-code.nix index f5b16ac74..f4ac43069 100644 --- a/modules/programs/claude-code.nix +++ b/modules/programs/claude-code.nix @@ -345,24 +345,23 @@ in programs.claude-code.finalPackage = let - makeWrapperArgs = lib.flatten ( - lib.filter (x: x != [ ]) [ - (lib.optional (cfg.mcpServers != { }) [ - "--add-flags" - "--mcp-config ${jsonFormat.generate "claude-code-mcp-config.json" { inherit (cfg) mcpServers; }}" - ]) - ] - ); + mcpConfigFile = jsonFormat.generate "claude-code-mcp-config.json" { + inherit (cfg) mcpServers; + }; - hasWrapperArgs = makeWrapperArgs != [ ]; + needsWrapper = cfg.mcpServers != { }; + + wrapperScript = pkgs.writeShellScriptBin "claude" '' + exec "${lib.getExe cfg.package}" "$@" --mcp-config "${mcpConfigFile}" + ''; in - if hasWrapperArgs then + if needsWrapper then pkgs.symlinkJoin { name = "claude-code"; paths = [ cfg.package ]; - nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' - wrapProgram $out/bin/claude ${lib.escapeShellArgs makeWrapperArgs} + rm $out/bin/claude + ln -s ${wrapperScript}/bin/claude $out/bin/claude ''; inherit (cfg.package) meta; } diff --git a/tests/modules/programs/claude-code/expected-mcp-wrapper b/tests/modules/programs/claude-code/expected-mcp-wrapper index 636f0ff9a..312d51ef2 100644 --- a/tests/modules/programs/claude-code/expected-mcp-wrapper +++ b/tests/modules/programs/claude-code/expected-mcp-wrapper @@ -1,2 +1,3 @@ -#! /nix/store/00000000000000000000000000000000-bash/bin/bash -e -exec -a "$0" "/nix/store/00000000000000000000000000000000-claude-code/bin/.claude-wrapped" --mcp-config /nix/store/00000000000000000000000000000000-claude-code-mcp-config.json "$@" +#!/nix/store/00000000000000000000000000000000-bash/bin/bash +exec "/nix/store/00000000000000000000000000000000-claude-code/bin/claude-code" "$@" --mcp-config "/nix/store/00000000000000000000000000000000-claude-code-mcp-config.json" +