Files
claude_mcp_bundle/flake.nix

144 lines
4.1 KiB
Nix

{
description = "Flake that contains an overlay with some mcp servers";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
treefmt-nix.url = "github:numtide/treefmt-nix";
pyproject-nix.url = "github:pyproject-nix/pyproject.nix";
pyproject-nix.inputs.nixpkgs.follows = "nixpkgs";
uv2nix = {
url = "github:pyproject-nix/uv2nix";
inputs.pyproject-nix.follows = "pyproject-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
pyproject-build-systems = {
url = "github:pyproject-nix/build-system-pkgs";
inputs.pyproject-nix.follows = "pyproject-nix";
inputs.uv2nix.follows = "uv2nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# Uncomment and set correct URL when available
# mcp-servers = {
# url = "github:your-org/mcp-servers";
# flake = false;
# };
};
outputs =
{ self, nixpkgs, ... }@inputs:
let
supportedSystems = [ "x86_64-linux" ];
pkgsFor =
system:
nixpkgs.legacyPackages.${system}.extend (
nixpkgs.lib.composeManyExtensions ([ ] ++ builtins.attrValues self.overlays)
);
eachSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f (pkgsFor system));
buildUvServers = (
pkgs:
let
inherit (pkgs.callPackage inputs.pyproject-nix.build.util { }) mkApplication;
workspace = inputs.uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; };
overlay = workspace.mkPyprojectOverlay {
sourcePreference = "wheel";
};
python = pkgs.python313;
pyprojectOverrides = final: prev: {
sgmllib3k = prev.sgmllib3k.overrideAttrs (old: {
nativeBuildInputs =
old.nativeBuildInputs or [ ]
++ (final.resolveBuildSystem {
setuptools-scm = [ ];
setuptools = [ ];
});
});
};
pythonSet =
(pkgs.callPackage inputs.pyproject-nix.build.packages {
inherit python;
}).overrideScope
(
nixpkgs.lib.composeManyExtensions [
inputs.pyproject-build-systems.overlays.default
overlay
pyprojectOverrides
]
);
venv = (pythonSet.mkVirtualEnv "uv-mcp-envs" workspace.deps.default).overrideAttrs (_old: {
venvIgnoreCollisions = [ "*" ];
});
in
{
arxiv-mcp-server = mkApplication {
inherit venv;
package = pythonSet.arxiv-mcp-server;
};
basic-memory-server = mkApplication {
inherit venv;
package = pythonSet.basic-memory;
};
mcp-text-editor = mkApplication {
inherit venv;
package = pythonSet.mcp-text-editor;
};
}
);
# Build function for MCP servers
treefmtEval = eachSystem (pkgs: inputs.treefmt-nix.lib.evalModule pkgs ./treefmt.nix);
in
{
# Formatting
# formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixpkgs-fmt);
formatter = eachSystem (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper);
# for `nix flake check`
checks = eachSystem (pkgs: {
formatting = treefmtEval.${pkgs.system}.config.build.check self;
});
# Overlays
overlays.default = _final: prev: {
custom-servers = buildUvServers prev;
};
# Packages
# packages = forAllSystems (system:
# let
# pkgs = pkgsFor system;
# in buildUvServers {
# pkgs = pkgs;
# }
#);
# Development shell
devShells = eachSystem (
pkgs:
let
uv-servers = buildUvServers pkgs;
in
{
default = pkgs.mkShell {
packages = [
pkgs.python313
pkgs.uv
pkgs.nodejs
pkgs.node2nix
uv-servers.arxiv-mcp-server
uv-servers.mcp-text-editor
uv-servers.basic-memory-server
];
};
}
);
};
}