claude-code: omit unsupported mcp enabled field

This commit is contained in:
Austin Horstman
2026-06-10 08:38:54 -05:00
parent 1ffdc28076
commit cadadbc6f4
2 changed files with 32 additions and 15 deletions
+25 -11
View File
@@ -19,17 +19,29 @@ let
upstreamConfigDir = "${config.home.homeDirectory}/.claude";
isMcpServerEnabled =
server:
let
enabled = server.enabled or null;
disabled = (server.disabled or false) == true;
in
enabled != false && !disabled;
transformMcpServer =
name: server:
lib.hm.mcp.transformMcpServer {
inherit server;
exclude = [ "enabled" ];
extraTransforms = [
lib.hm.mcp.addType
(lib.hm.mcp.wrapEnvFilesCommand { inherit pkgs name; }) # envFiles currently still need wrapping https://github.com/anthropics/claude-code/issues/28942
];
};
transformedMcpServers = lib.optionalAttrs (cfg.enableMcpIntegration && config.programs.mcp.enable) (
lib.mapAttrs (
name: server:
lib.hm.mcp.transformMcpServer {
inherit server;
extraTransforms = [
lib.hm.mcp.addType
(lib.hm.mcp.wrapEnvFilesCommand { inherit pkgs name; }) # envFiles currently still need wrapping https://github.com/anthropics/claude-code/issues/28942
];
}
) config.programs.mcp.servers
lib.mapAttrs transformMcpServer (
lib.filterAttrs (_: isMcpServerEnabled) config.programs.mcp.servers
)
);
mkContentOption =
@@ -632,7 +644,9 @@ in
programs.claude-code.finalPackage =
let
mergedMcpServers = transformedMcpServers // lib.mapAttrs (_: lib.hm.mcp.addType) cfg.mcpServers;
mergedMcpServers =
transformedMcpServers
// lib.mapAttrs (_: server: removeAttrs (lib.hm.mcp.addType server) [ "enabled" ]) cfg.mcpServers;
pluginFiles =
lib.optional (mergedMcpServers != { }) {
name = ".mcp.json";
@@ -19,6 +19,7 @@
github = {
type = "http";
url = "https://api.githubcopilot.com/mcp/";
enabled = true;
};
filesystem = {
type = "stdio";
@@ -61,6 +62,11 @@
customOption = "value";
timeout = 5000;
};
disabled-server = {
command = "echo";
args = [ "test" ];
disabled = true;
};
};
};
};
@@ -73,10 +79,7 @@
pluginDir=$(grep -o -- '--plugin-dir /nix/store/[^ ]*' "$wrapperPath")
pluginDir="''${pluginDir#--plugin-dir }"
assertFileContent "$pluginDir/.claude-plugin/plugin.json" ${./expected-plugin-manifest.json}
assertFileRegex "$pluginDir/.mcp.json" '"github"'
assertFileRegex "$pluginDir/.mcp.json" '"database"'
assertFileRegex "$pluginDir/.mcp.json" '"/tmp"'
(! grep -q -- '/other-tmp' "$pluginDir/.mcp.json")
assertFileContent "$pluginDir/.mcp.json" ${./expected-mcp-plugin.json}
assertPathNotExists "$pluginDir/.lsp.json"
'';
}