trying arxiv server

This commit is contained in:
2025-03-15 15:33:06 -05:00
parent 293ff7f97d
commit d07b0ff1a1
2 changed files with 210 additions and 41 deletions

92
flake.lock generated
View File

@@ -1,19 +1,19 @@
{
"nodes": {
"mcp-servers": {
"arxiv-mcp-server": {
"flake": false,
"locked": {
"lastModified": 1741967586,
"narHash": "sha256-MLfU7VgGmYid0bgK9RPfRTnTRIA8UHAUbbVg94Nmyv4=",
"owner": "modelcontextprotocol",
"repo": "servers",
"rev": "8963861c75c69f09d2890eedb0ef25b23c6253c6",
"lastModified": 1741745018,
"narHash": "sha256-3eLEoc10b8zi68Y7er4mPPNHQOghtHqq95YpRnrVIcI=",
"owner": "blazickjp",
"repo": "arxiv-mcp-server",
"rev": "b46928a15a6e12354409703a8f700a75ae6c4c23",
"type": "github"
},
"original": {
"owner": "modelcontextprotocol",
"owner": "blazickjp",
"ref": "main",
"repo": "servers",
"repo": "arxiv-mcp-server",
"type": "github"
}
},
@@ -33,10 +33,82 @@
"type": "github"
}
},
"pyproject-build-systems": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"pyproject-nix": [
"pyproject-nix"
],
"uv2nix": [
"uv2nix"
]
},
"locked": {
"lastModified": 1741647088,
"narHash": "sha256-y/Aj21rMGdE23dcFfD4lRhNMgkhIRucp+uuWLWUXv0M=",
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"rev": "6d7eced86469cf89ed4d19d91b870163deb0dca2",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"type": "github"
}
},
"pyproject-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1741648141,
"narHash": "sha256-jQEZCSCgm60NGmBg3JPu290DDhNVI1GVVEd0P8VCnME=",
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"rev": "7747e5a058245c7abe033a798f818f0572d8e155",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"type": "github"
}
},
"root": {
"inputs": {
"mcp-servers": "mcp-servers",
"nixpkgs": "nixpkgs"
"arxiv-mcp-server": "arxiv-mcp-server",
"nixpkgs": "nixpkgs",
"pyproject-build-systems": "pyproject-build-systems",
"pyproject-nix": "pyproject-nix",
"uv2nix": "uv2nix"
}
},
"uv2nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"pyproject-nix": [
"pyproject-nix"
]
},
"locked": {
"lastModified": 1741780535,
"narHash": "sha256-B4seqoWl9HlKZ7m+nDosVtmDw9i6KbhvfonQlYhRrJg=",
"owner": "pyproject-nix",
"repo": "uv2nix",
"rev": "7de0e836e005f971a252e20b478d12b8b64909d8",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "uv2nix",
"type": "github"
}
}
},

159
flake.nix
View File

@@ -3,50 +3,147 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
mcp-servers = {
url = "github:modelcontextprotocol/servers/main";
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";
};
arxiv-mcp-server = {
url = "github:blazickjp/arxiv-mcp-server/main";
flake = false;
};
# Uncomment and set correct URL when available
# mcp-servers = {
# url = "github:your-org/mcp-servers";
# flake = false;
# };
};
outputs = { self, nixpkgs, ... }@inputs:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system}.extend(
nixpkgs.lib.composeManyExtensions([
] ++ builtins.attrValues self.overlays)
supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
pkgsFor = system: nixpkgs.legacyPackages.${system}.extend(
nixpkgs.lib.composeManyExtensions (
[] ++ builtins.attrValues self.overlays
)
);
mcp-servers-pkg = pkgs.stdenv.mkDerivation {
name = "mcp-servers";
src = inputs.mcp-servers;
buildInputs = [ pkgs.nodejs pkgs.nodePackages.npm pkgs.makeWrapper ];
buildPhase = ''
npm ci
'';
installPhase = ''
mkdir -p $out/lib $out/bin
cp -r . $out/lib
makeWrapper ${pkgs.nodejs}/bin/node $out/bin/mcp-servers \
--add-flags "$out/lib/index.js" \
--prefix NODE_PATH : $out/lib/node_modules
'';
};
buildUvServer = { src, pkgs }:
let
workspace = inputs.uv2nix.lib.workspace.loadWorkspace { workspaceRoot = src; };
overlay = workspace.mkPyprojectOverlay {
sourcePreference = "wheel";
};
python = pkgs.python312;
pyprojectOverrides = final: prev: {
jaconv = prev.jaconv.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
]
);
in
pythonSet.mkVirtualEnv "arxiv-mcp-env" workspace.deps.default;
# Build function for MCP servers
buildMcpServer = { pkgs }:
pkgs.stdenv.mkDerivation {
pname = "mcp-servers";
version = "0.1.0";
src = inputs.mcp-servers;
nativeBuildInputs = [ pkgs.nodejs pkgs.makeWrapper ];
buildPhase = ''
export HOME=$(mktemp -d)
ls -alhR
echo "starting to build..."
npm ci --no-audit --no-fund --loglevel verbose
'';
installPhase = ''
mkdir -p $out/lib $out/bin
cp -r . $out/lib
cp -r node_modules/bin $out/bin
'';
};
in {
# Formatting
formatter.${system} = nixpkgs.legacyPackages.${system}.nixpkgs-fmt;
formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixpkgs-fmt);
# Overlays
overlays.default = final: prev: {
mcp-servers = mcp-servers-pkg;
custom-servers = {
arxiv-mcp-server = buildUvServer {
pkgs = prev;
src = inputs.arxiv-mcp-server;
};
};
mcp-servers = buildMcpServer {
pkgs = prev;
};
};
# Packages
packages = forAllSystems (system:
let
pkgs = pkgsFor system;
custom-servers = {
arxiv-mcp-server = buildUvServer {
pkgs = pkgs;
src = inputs.arxiv-mcp-server;
};
};
in {
inherit custom-servers;
}
);
# Development shell
devShells.${system}.default = pkgs.mkShell {
packages = [
pkgs.uv
pkgs.nodejs
mcp-servers-pkg
];
};
devShells = forAllSystems (system:
let pkgs = pkgsFor system;
custom-servers = {
arxiv-mcp-server = buildUvServer {
pkgs = pkgs;
src = inputs.arxiv-mcp-server;
};
};
in {
default = pkgs.mkShell {
packages = [
# pkgs.uv
# pkgs.nodejs
custom-servers
];
};
}
);
};
}