Add MCP server packages: annas, bitwarden, email, namecheap, navidrome, ovhcloud, slskd
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 9s
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 9s
Packages MCP servers currently used by Hermes that were not yet in this repo. Real hashes computed via nix build on wilkes; nix flake check passes. - annas-mcp: Go, buildGoModule (re-added, previously dropped as broken) - bitwarden-mcp: npm @bitwarden/mcp-server - mcp-email-server: Python, buildPythonApplication - namecheap-mcp: npm namecheap-api-mcp - navidrome-mcp: npm navidrome-mcp - ovhcloud-mcp: npm from GitHub, tsc build step - slskd-mcp: Python, fastmcp wrapper
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
Generated
+10011
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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 { };
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
Generated
+1252
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
};
|
||||
}
|
||||
Generated
+5900
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
};
|
||||
}
|
||||
Generated
+5642
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user