Add MCP server packages: annas, bitwarden, email, namecheap, navidrome, ovhcloud, slskd #9

Merged
luis merged 1 commits from feat/package-all-inuse into main 2026-08-13 18:01:25 +02:00
13 changed files with 23093 additions and 0 deletions
+7
View File
@@ -26,6 +26,13 @@ This repository provides Nix derivations for MCP (Model Context Protocol) server
| sabnzbd-mcp | MCP server for SABnzbd download management | Python |
| jellyfin-mcp | MCP server for Jellyfin — search, playback, metadata, admin | Go |
| zotero-mcp | Connect Zotero research library with AI assistants | Python |
| annas-mcp | Search/download documents from Anna's Archive | Go |
| bitwarden-mcp | Official Bitwarden vault, login, Send, org management | TypeScript |
| mcp-email-server | Send, receive, search email over IMAP/SMTP | Python |
| namecheap-mcp | Namecheap DNS, domains, contacts, registrar lock | TypeScript |
| navidrome-mcp | Navidrome music library search, playlists, radio, playback | TypeScript |
| ovhcloud-mcp | OVHcloud VPS, domains, DNS, billing, SSH, API explorer | TypeScript |
| slskd-mcp | slskd (Soulseek) search, download, peer browsing, private messages | Python |
| mcp-score | AI-driven music score generation and MuseScore live control | Python |
## Usage
+36
View File
@@ -0,0 +1,36 @@
{
lib,
buildGoModule,
fetchFromGitHub,
makeWrapper,
}:
buildGoModule rec {
pname = "annas-mcp";
version = "0.1.0-unstable-2026-06-26";
src = fetchFromGitHub {
owner = "iosifache";
repo = "annas-mcp";
rev = "c095963ad5d10d33da3c614495246b6ec7f680d4";
hash = "sha256-4gH5175yA9YYPVifXX3n9WCTRug0gOOfpQBLaGbvBcU=";
};
vendorHash = "sha256-2NdG5p2XfrhVgi388dRDBUSGwg6ybnzfn9495TWNGsA=";
nativeBuildInputs = [ makeWrapper ];
# The MCP server mode is invoked with "mcp" subcommand
postInstall = ''
wrapProgram $out/bin/annas-mcp \
--add-flags "mcp"
'';
meta = with lib; {
description = "MCP server and CLI tool for searching and downloading documents from Anna's Archive";
homepage = "https://github.com/iosifache/annas-mcp";
license = licenses.mit;
mainProgram = "annas-mcp";
platforms = platforms.linux;
};
}
File diff suppressed because it is too large Load Diff
+33
View File
@@ -0,0 +1,33 @@
{
lib,
buildNpmPackage,
fetchzip,
makeWrapper,
}:
buildNpmPackage rec {
pname = "bitwarden-mcp";
version = "2026.7.0";
src = fetchzip {
url = "https://registry.npmjs.org/@bitwarden/mcp-server/-/mcp-server-${version}.tgz";
hash = "sha256-uvytqAXW0G9HCshJ987j0U3a+c0p8xUG1m0BsU9Q7AQ=";
};
npmDepsHash = "sha256-X3mXupbs2Sx6E3mYRvtuWyT+FhfGmYyQZAK1iPAStM0=";
postPatch = ''
cp ${./package-lock.json} package-lock.json
'';
# dist/ is already built in the npm tarball
dontNpmBuild = true;
meta = with lib; {
description = "Official Bitwarden MCP server - vault, login, folder, Send, and organization management";
homepage = "https://github.com/bitwarden/mcp-server";
license = licenses.bsd3;
mainProgram = "bitwarden-mcp";
platforms = platforms.all;
};
}
+7
View File
@@ -21,5 +21,12 @@
applemusic-mcp = pkgs.callPackage ./applemusic-mcp/package.nix { };
pinchflat-mcp = pkgs.callPackage ./pinchflat-mcp/package.nix { };
audiobookshelf-mcp = pkgs.callPackage ./audiobookshelf-mcp/package.nix { };
annas-mcp = pkgs.callPackage ./annas-mcp/package.nix { };
bitwarden-mcp = pkgs.callPackage ./bitwarden-mcp/package.nix { };
mcp-email-server = pkgs.callPackage ./mcp-email-server/package.nix { };
namecheap-mcp = pkgs.callPackage ./namecheap-mcp/package.nix { };
navidrome-mcp = pkgs.callPackage ./navidrome-mcp/package.nix { };
ovhcloud-mcp = pkgs.callPackage ./ovhcloud-mcp/package.nix { };
slskd-mcp = pkgs.callPackage ./slskd-mcp/package.nix { };
# example-mcp-server = pkgs.callPackage ./example-mcp-server/package.nix { };
}
+57
View File
@@ -0,0 +1,57 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication rec {
pname = "mcp-email-server";
version = "1.4.1";
pyproject = true;
src = fetchFromGitHub {
owner = "Wh1isper";
repo = "mcp-email-server";
rev = "a1668a912db08373cc109b7482363129c75fd646";
hash = "sha256-Zt+198bQMthp6Mxmmsd7eTh9iybqOXWuVqLylzfUiIg=";
};
build-system = with python3Packages; [
hatchling
];
dependencies = with python3Packages; [
aioimaplib
aiosmtplib
anyio
beautifulsoup4
click
jinja2
keyring
loguru
mcp
pydantic
pydantic-settings
starlette
tomli-w
typer
email-validator
filelock
uvicorn
];
doCheck = false;
# mcp transitively requires filelock>=3.32.2 but nixpkgs ships 3.29.7;
# the runtime-deps check is too strict, so skip it (same as nextcloud-mcp-server).
dontCheckRuntimeDeps = true;
pythonImportsCheck = [ "mcp_email_server" ];
meta = with lib; {
description = "MCP server for email - send, receive, search, and manage mail over IMAP/SMTP";
homepage = "https://github.com/Wh1isper/mcp-email-server";
license = licenses.mit;
mainProgram = "mcp-email-server";
platforms = platforms.all;
};
}
File diff suppressed because it is too large Load Diff
+33
View File
@@ -0,0 +1,33 @@
{
lib,
buildNpmPackage,
fetchzip,
}:
buildNpmPackage rec {
pname = "namecheap-mcp";
version = "1.0.1";
src = fetchzip {
# npm package is "namecheap-api-mcp"; pname is the Nix attr name.
url = "https://registry.npmjs.org/namecheap-api-mcp/-/namecheap-api-mcp-${version}.tgz";
hash = "sha256-+/MwPgrxJiWmObkLF30YqXWGwesbp98qzGiv/W86WYw=";
};
npmDepsHash = "sha256-l0i/zzy3I29ilF8vZMBrTlBQdvrISC9Vr/iQJXDVKmw=";
postPatch = ''
cp ${./package-lock.json} package-lock.json
'';
# dist/ is already built in the npm tarball
dontNpmBuild = true;
meta = with lib; {
description = "Namecheap API MCP server - DNS, domains, contacts, and registrar lock management";
homepage = "https://github.com/lanternrow/namecheap-api-mcp";
license = licenses.mit;
mainProgram = "namecheap-api-mcp";
platforms = platforms.all;
};
}
File diff suppressed because it is too large Load Diff
+32
View File
@@ -0,0 +1,32 @@
{
lib,
buildNpmPackage,
fetchzip,
}:
buildNpmPackage rec {
pname = "navidrome-mcp";
version = "2.2.0";
src = fetchzip {
url = "https://registry.npmjs.org/${pname}/-/${pname}-${version}.tgz";
hash = "sha256-1wZyM0GJUrQfzBK1tWqqIcVk90KUv/9wt2ZpRobQp/A=";
};
npmDepsHash = "sha256-58OZ4qVfeN+0LVzcSJQHQqiY66gPSGWI6ht/4fMp0oQ=";
postPatch = ''
cp ${./package-lock.json} package-lock.json
'';
# dist/ is already built in the npm tarball
dontNpmBuild = true;
meta = with lib; {
description = "MCP server for Navidrome - search music library, playlists, radio stations, and playback control";
homepage = "https://github.com/Blakeem/Navidrome-MCP";
license = licenses.mit;
mainProgram = "navidrome-mcp";
platforms = platforms.all;
};
}
File diff suppressed because it is too large Load Diff
+34
View File
@@ -0,0 +1,34 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
}:
buildNpmPackage rec {
pname = "ovhcloud-mcp";
version = "2.0.1";
src = fetchFromGitHub {
owner = "hlebtkachenko";
repo = "ovhcloud-mcp";
rev = "ccadc85bd4aab35434a24732bc77ef2b6f100b4c";
hash = "sha256-FYJSKOU/lCutGCUJhaAtKWBLJOBUyWvdkSnMWbxwhI4=";
};
npmDepsHash = "sha256-myeqksb3mjJ1GJej/4D7iuyOOTsGJBdkka9zUpH+flY=";
postPatch = ''
cp ${./package-lock.json} package-lock.json
'';
# dist/ is NOT committed to the repo; buildNpmPackage runs "npm run build"
# (tsc) by default, which emits dist/index.js.
meta = with lib; {
description = "OVHcloud MCP server - VPS, domains, DNS, billing, SSH, and API explorer";
homepage = "https://github.com/hlebtkachenko/ovhcloud-mcp";
license = licenses.mit;
mainProgram = "ovhcloud-mcp";
platforms = platforms.all;
};
}
+49
View File
@@ -0,0 +1,49 @@
{
lib,
stdenv,
fetchFromGitHub,
makeWrapper,
python3,
}:
let
python = python3.withPackages (
ps: with ps; [
fastmcp
httpx
]
);
in
stdenv.mkDerivation rec {
pname = "slskd-mcp";
version = "0.1.0-unstable-2026-07-28";
src = fetchFromGitHub {
owner = "abl030";
repo = "slskd-mcp";
rev = "08e4373f41fddcceff8ea3240323e0c6258a373e";
hash = "sha256-ELUoAOOWmNoxoTjPxxAY00exN56lngSPs4wtn/GadQU=";
};
nativeBuildInputs = [ makeWrapper ];
# generated/server.py is tracked in git; no build step needed.
dontBuild = true;
installPhase = ''
runHook preInstall
mkdir -p $out/lib/slskd-mcp $out/bin
cp -r $src/generated $out/lib/slskd-mcp/
makeWrapper ${python}/bin/fastmcp $out/bin/slskd-mcp \
--add-flags "run $out/lib/slskd-mcp/generated/server.py"
runHook postInstall
'';
meta = with lib; {
description = "MCP server for slskd (Soulseek daemon) - search, download, browse peers, private messages";
homepage = "https://github.com/abl030/slskd-mcp";
license = licenses.mit;
mainProgram = "slskd-mcp";
platforms = platforms.all;
};
}