Author SHA1 Message Date
hermes-agent a525c2a1d0 Register python-ssh-mcp in package aggregator 2026-09-29 23:43:24 +02:00
hermes-agent bd75822e2d Add python-ssh-mcp package 2026-09-29 23:43:14 +02:00
luis 23da3cf87f msg
NixOS Configuration CI / Nix Flake Check (push) Successful in 2m46s
2026-09-29 12:17:23 +02:00
luis 55fdf722e4 add libgen-mcp package
NixOS Configuration CI / Nix Flake Check (push) Successful in 10s
Library Genesis MCP server (jmrplens/libgen-mcp v2.0.1): federated book/paper search, download and read across LibGen and open-access sources. No account, API key or cookie required, unlike annas-mcp.

The flake's pinned nixpkgs only ships Go 1.26 and upstream needs Go 1.27, so package the prebuilt static release binaries (same approach as yarr).
2026-09-25 18:32:00 +02:00
luis 67c7e829f3 annas-mcp: repoint to SokolskyNikita fork v0.0.14
NixOS Configuration CI / Nix Flake Check (push) Successful in 8s
Upstream iosifache/annas-mcp is unmaintained since 2026-06-26 and returns HTTP 403 on all requests because Anna's Archive added a DDoS-Guard browser check. The fork is 24 commits ahead, passes DDoS-Guard via ANNAS_ACCOUNT_COOKIE, fixes pagination/filters, and updates the MCP SDK.
2026-09-25 18:06:13 +02:00
luis 66e3a17aa1 Revert "msg"
NixOS Configuration CI / Nix Flake Check (push) Successful in 30s
This reverts commit bc7e34472e.
2026-09-25 12:03:52 +02:00
luis 058a009f65 Revert "msg"
NixOS Configuration CI / Nix Flake Check (push) Successful in 2m14s
This reverts commit 30717f8021.
2026-09-25 12:01:03 +02:00
luis bc7e34472e msg
NixOS Configuration CI / Nix Flake Check (push) Successful in 11s
2026-09-25 11:47:02 +02:00
luis 30717f8021 msg
NixOS Configuration CI / Nix Flake Check (push) Successful in 11s
2026-09-23 12:52:51 +02:00
luis f23109857b msg
NixOS Configuration CI / Nix Flake Check (push) Successful in 26s
2026-09-23 12:25:32 +02:00
luis 471a7b4fbf update
NixOS Configuration CI / Nix Flake Check (push) Successful in 8s
2026-09-23 12:04:12 +02:00
hermes-agent eab27798b2 pdf-mcp: use fetchFromGitea for hermes-agent fork
NixOS Configuration CI / Nix Flake Check (push) Successful in 11s
2026-09-09 15:06:05 +00:00
hermes-agent b732981049 pdf-mcp: point at hermes-agent fork with bbox crop param
NixOS Configuration CI / Nix Flake Check (push) Failing after 17s
Use the hermes-agent/pdf-mcp fork (commit 356e476) which adds a bbox
crop parameter to get_page_image so it can render just a figure region
as a small PNG.
2026-09-09 15:00:29 +00:00
hermes-agent 32dd8e8d2f Fix pdf-mcp source hash (unpacked tree hash)
NixOS Configuration CI / Nix Flake Check (push) Successful in 38s
2026-09-09 14:02:27 +00:00
hermes-agent 58eb312a77 Add pdf-mcp package (I-CAN-hack/pdf-mcp)
NixOS Configuration CI / Nix Flake Check (push) Failing after 1m9s
MCP server for reading, rendering, and searching PDF files using PyMuPDF.
Exposes get_page_text, get_page_image (render page as PNG), search_text.
Python, so it spawns reliably under the mcp-gateway stdio backend.
2026-09-09 13:59:41 +00:00
luis 9e26156949 Merge pull request 'yarr: use pre-built binary instead of building from source' (#14) from fix/yarr-prebuilt into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 12s
Reviewed-on: #14
2026-08-18 08:48:23 +02:00
hermes-agent 279b4e5caf yarr: set correct fetchzip hash for pre-built binary
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 14s
2026-08-18 06:12:47 +00:00
hermes-agent 0d0ca4aa8e yarr: use pre-built binary instead of building from source
NixOS Configuration CI / Nix Flake Check (pull_request) Failing after 19s
Building yarr from source (Rust) takes ~5+ min and times out the
config-nixos CI runner (3h limit) when combined with the full
perlis+wilkes+relay flake check. Use the pre-built x86_64-linux binary
from GitHub releases instead — fast fetch, no Rust toolchain needed.

Removes the rust-nixpkgs flake input (no longer needed).
2026-08-18 06:11:19 +00:00
luis de417511c7 Merge pull request 'overlay: include yarr (consuming nixpkgs has rustc 1.97.1)' (#13) from fix/yarr-overlay into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 14s
Reviewed-on: #13
2026-08-17 14:10:04 +02:00
hermes-agent 1a06666b77 overlay: include yarr (consuming nixpkgs has rustc 1.97.1)
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 13s
yarr needs rustc 1.97.1. The mcp-servers flake's own nixpkgs has 1.95,
but consuming flakes (config-nixos) pin a newer nixpkgs with 1.97.1.
Since rustPkgs defaults to the consuming pkgs, yarr builds fine in the
overlay there. Remove the removeAttrs exclusion.
2026-08-17 12:05:47 +00:00
luis e9c4ae7273 Merge pull request 'Add yarr: Rust MCP server for media automation fleets' (#12) from feat/yarr into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 13s
2026-08-17 14:03:39 +02:00
hermes-agent 9cf77387fd yarr: skip cargo test phase (hangs on network)
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 6m46s
The cargo test phase hangs at 0% CPU with no rustc processes — likely a
test blocking on network. Skip tests; we only need the binary.
2026-08-17 10:26:07 +00:00
hermes-agent e2b5eac582 flake.lock: add rust-nixpkgs input for yarr
NixOS Configuration CI / Nix Flake Check (pull_request) Failing after 3h1m3s
2026-08-17 09:54:30 +00:00
hermes-agent 98ba683632 yarr: add flake input for rustc 1.97.1, exclude from overlay
NixOS Configuration CI / Nix Flake Check (pull_request) Failing after 3h7m5s
yarr needs rustc 1.97.1 but the main nixpkgs input (pinned by flake.lock)
has rustc 1.95.0. Bumping the main input breaks aioimaplib (email server
dep), so add a separate rust-nixpkgs input pinned to a newer rev.

yarr is excluded from the overlay (which uses the main nixpkgs) — build
it via 'nix build .#yarr' on the flake directly.
2026-08-15 09:17:05 +00:00
hermes-agent e5db294f18 Add yarr: Rust MCP server for media automation fleets (Sonarr, Radarr, Prowlarr, Jellyfin, SABnzbd, qBittorrent, Plex)
NixOS Configuration CI / Nix Flake Check (pull_request) Failing after 1m0s
Replaces the Node.js-based mcp-arr-server and jellyfin-mcp backends
in the gateway with a single Rust binary that covers both *arr and
Jellyfin. Rust binaries work through the gateway's stdio spawn
(where Node.js ones fail with 401).
2026-08-15 08:42:53 +00:00
luis 9bcb95b262 Merge pull request 'ovhcloud-mcp: add bin wrapper (upstream has no bin field)' (#11) from fix/ovhcloud-bin-wrapper into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 9s
2026-08-13 22:13:44 +02:00
hermes-agent 017683f9e2 ovhcloud-mcp: add bin wrapper (upstream has no bin field)
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 9s
The upstream package.json has no 'bin' field, so buildNpmPackage produced
no executable and the gateway could not spawn it ('No such file or
directory'). Add a makeWrapper that runs node dist/index.js.
2026-08-13 20:09:14 +00:00
luis 377d7534ff Merge pull request 'Bump applemusic, zotero, nextcloud MCP servers to latest' (#10) from feat/bump-stale-mcps into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 8s
2026-08-13 18:31:11 +02:00
hermes-agent fcd3f6d0f0 Bump applemusic, zotero, nextcloud MCP servers to latest
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 25s
- applemusic-mcp: 0.15.1 -> 0.18.3 (adds keyring dep)
- zotero-mcp: 0.5.0 -> 0.9.1 (pyzotero 1.13.5, vendored pdf-inspector,
  updated dep set per pyproject)
- nextcloud-mcp-server: 0.121.3 -> 0.173.0 (adds anyio, uvicorn,
  cryptography, lxml, botocore, numpy, packaging, pypdfium2; updated
  postPatch for new uv_build/icalendar constraints)

All hashes computed via nix build on wilkes; nix flake check passes.
2026-08-13 16:28:47 +00:00
luis b4b26c6ef2 Merge pull request 'Add MCP server packages: annas, bitwarden, email, namecheap, navidrome, ovhcloud, slskd' (#9) from feat/package-all-inuse into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 1m10s
2026-08-13 18:01:24 +02:00
hermes-agent 80035de8f3 Add MCP server packages: annas, bitwarden, email, namecheap, navidrome, ovhcloud, slskd
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
2026-08-13 15:50:38 +00:00
luis fd19b3519f Merge pull request 'feat(mcp-arr-server): bump to 1.7.3 for HTTP transport' (#8) from feat/arr-http-transport into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 8m32s
Reviewed-on: #8
2026-08-12 12:01:56 +02:00
hermes-agent 633dc74563 set npmDepsHash for 1.7.3
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 11m44s
2026-08-12 09:36:46 +00:00
hermes-agent 483e87b0a8 set src hash for 1.7.3 2026-08-12 09:35:57 +00:00
hermes-agent 9383fe1d8d feat(mcp-arr-server): bump to 1.7.3 for HTTP transport support 2026-08-12 09:34:50 +00:00
hermes-agent 2d7dedd1a2 Merge pull request 'fix: repoint sabnzbd-mcp to jasonpaulso fork, drop broken annas-mcp' (#7) from fix/sabnzbd-mcp-source into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 13s
2026-08-04 16:13:04 +02:00
hermes-agent 7af3d89e5d fix: repoint sabnzbd-mcp to jasonpaulso fork, drop broken annas-mcp
NixOS Configuration CI / Nix Flake Check (pull_request) Successful in 15s
- sabnzbd-mcp: original upstream (jmagar/sabnzbd-mcp) was deleted from
  GitHub (404). Repoint to jasonpaulso/sabnzbd-mcp fork, which preserves
  the same file layout and the /sabnzbd/api string postPatch rewrites.
- annas-mcp: remove package that was never completed (lib.fakeHash
  placeholders) and is not referenced anywhere in config-nixos. It was
  breaking 'nix flake check'.
2026-08-04 14:10:54 +00:00
luis 84bb4f4425 docx
NixOS Configuration CI / Nix Flake Check (push) Failing after 18s
2026-07-13 12:37:11 +02:00
luis 9f9001299c Merge pull request 'add: annas-mcp package for Anna's Archive search/download' (#6) from add/annas-mcp into main
NixOS Configuration CI / Nix Flake Check (push) Failing after 13s
Reviewed-on: #6
2026-07-12 21:02:10 +02:00
luis d276fe1ef0 Merge pull request 'pinchflat-mcp: add pagination, downloaded filter, and delete_media tool' (#5) from fix/pinchflat-mcp-pagination into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 13s
Reviewed-on: #5
2026-07-12 13:19:27 +02:00
luis fa32b4a941 Merge pull request 'Add pinchflat-mcp package' (#4) from feat/pinchflat-mcp into main
NixOS Configuration CI / Nix Flake Check (push) Successful in 12s
Reviewed-on: #4
2026-07-05 00:10:25 +02:00
38 changed files with 56867 additions and 1764 deletions
+9 -1
View File
@@ -9,10 +9,10 @@ This repository provides Nix derivations for MCP (Model Context Protocol) server
| Package | Description | Language |
| -------------------------------- | -------------------------------------------------------------------- | ---------- |
| academic-search-mcp-server | Search academic papers via Semantic Scholar and Crossref | Python |
| annas-mcp | Anna's Archive MCP server | Python |
| applemusic-mcp | Apple Music — manage playlists, search catalog, browse library | Python |
| duckduckgo-mcp-server | Web search and content fetching via DuckDuckGo | Python |
| jellyfin-mcp | MCP server for Jellyfin media server | Python |
| libgen-mcp | Library Genesis + open-access search/download/read (no account needed) | Go |
| kindly-web-search-mcp-server | Web search + content retrieval via SearxNG, Tavily, or SearXNG | Python |
| manim-mcp-server | Execute Manim animation code and return videos | Python |
| mcp-arr-server | MCP server for *arr suite — Sonarr, Radarr, Lidarr, Prowlarr | TypeScript |
@@ -22,10 +22,18 @@ This repository provides Nix derivations for MCP (Model Context Protocol) server
| pdf-reader-mcp | Production‑ready PDF processing with parallel processing | TypeScript |
| rust-research-mcp | Accumulate and organize academic knowledge | Rust |
| simple-web-search-mcp | Zero-config web search and page reading for LLMs | TypeScript |
| mcp-searxng | Privacy-respecting web search and URL reading via SearXNG | TypeScript |
| transmission-mcp | MCP server for the Transmission BitTorrent client | Python |
| 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 | Anna's Archive search/download (SokolskyNikita fork); needs cookie/API key | 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
+1
View File
@@ -60,6 +60,7 @@
packages = builtins.attrValues mcpPackages ++ [ pkgs.mcp-nixos pkgs.git ];
shellHook = ''
export SEARXNG_BASE_URL="https://search.bueso.eu"
export SEARXNG_URL="https://search.bueso.eu"
'';
};
}
+13
View File
@@ -39,6 +39,14 @@
"command": ["simple-web-search-mcp"],
"enabled": true
},
"mcp-searxng": {
"type": "local",
"command": ["mcp-searxng"],
"enabled": true,
"environment": {
"SEARXNG_URL": "https://search.bueso.eu"
}
},
"rust-research": {
"type": "local",
"command": ["rust-research-mcp"],
@@ -96,6 +104,11 @@
"type": "local",
"command": ["mcp-score", "serve"],
"enabled": true
},
"docx": {
"type": "local",
"command": ["docx-mcp"],
"enabled": true
}
}
}
+1 -2
View File
@@ -15,9 +15,8 @@
# # Now pkgs.manim-mcp-server is available
# };
# }
#
final: prev:
let
mcpPackages = import ../packages { pkgs = final; };
in
mcpPackages
mcpPackages
+8 -9
View File
@@ -7,16 +7,16 @@
buildGoModule rec {
pname = "annas-mcp";
version = "0.1.0-unstable-2026-06-26";
version = "0.0.14";
src = fetchFromGitHub {
owner = "iosifache";
owner = "SokolskyNikita";
repo = "annas-mcp";
rev = "c095963ad5d10d33da3c614495246b6ec7f680d4";
hash = lib.fakeHash;
rev = "9e720ad93df0fdfb25d4de6afcba11a920b34af4";
hash = "sha256-LcnWYpvSpSHYo1zMcLGTZgxZgo7JOXF4dESD4l+qVhI=";
};
vendorHash = lib.fakeHash;
vendorHash = "sha256-SCTznvZ8DvDN+iPDcTxiqpNYJwRLS8zIomz7f8S1eD0=";
nativeBuildInputs = [ makeWrapper ];
@@ -28,9 +28,8 @@ buildGoModule rec {
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;
homepage = "https://github.com/SokolskyNikita/annas-mcp";
mainProgram = "annas-mcp";
platforms = platforms.linux;
platforms = platforms.all;
};
}
}
+3 -2
View File
@@ -6,14 +6,14 @@
python3Packages.buildPythonApplication rec {
pname = "applemusic-mcp";
version = "0.15.1";
version = "0.20.1";
pyproject = true;
src = fetchFromGitHub {
owner = "epheterson";
repo = "applemusic-mcp";
rev = "v${version}";
hash = "sha256-N97bZyT8TWOrt1WS7W31OJaICwoUxFfcDDuRs+TweTQ=";
hash = "sha256-T956sblq/4TrAXkY4cwIFDPW6a2bjzyeyRyejYB4ARc=";
};
build-system = with python3Packages; [
@@ -26,6 +26,7 @@ python3Packages.buildPythonApplication rec {
requests
cryptography
playwright
keyring
];
pythonImportsCheck = [ "applemusic_mcp" ];
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;
};
}
+14 -2
View File
@@ -8,6 +8,7 @@
zotero-mcp = pkgs.callPackage ./zotero-mcp/package.nix { };
pdf-reader-mcp = pkgs.callPackage ./pdf-reader-mcp/package.nix { };
kindly-web-search-mcp-server = pkgs.callPackage ./kindly-web-search-mcp-server/package.nix { };
docx-mcp = pkgs.callPackage ./docx-mcp/package.nix { };
duckduckgo-mcp-server = pkgs.callPackage ./duckduckgo-mcp-server/package.nix { };
n8n-mcp = pkgs.callPackage ./n8n-mcp/package.nix { };
simple-web-search-mcp = pkgs.callPackage ./simple-web-search-mcp/package.nix { };
@@ -16,10 +17,21 @@
sabnzbd-mcp = pkgs.callPackage ./sabnzbd-mcp/package.nix { };
jellyfin-mcp = pkgs.callPackage ./jellyfin-mcp/package.nix { };
nextcloud-mcp-server = pkgs.callPackage ./nextcloud-mcp-server/package.nix { };
annas-mcp = pkgs.callPackage ./annas-mcp/package.nix { };
mcp-score = pkgs.callPackage ./mcp-score/package.nix { };
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 { };
libgen-mcp = pkgs.callPackage ./libgen-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 { };
yarr = pkgs.callPackage ./yarr/package.nix { };
pdf-mcp = pkgs.callPackage ./pdf-mcp/package.nix { };
mcp-searxng = pkgs.callPackage ./mcp-searxng/package.nix { };
python-ssh-mcp = pkgs.callPackage ./python-ssh-mcp/package.nix { };
# example-mcp-server = pkgs.callPackage ./example-mcp-server/package.nix { };
}
}
+39
View File
@@ -0,0 +1,39 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication rec {
pname = "docx-mcp";
version = "2.0.0-unstable-2026-07-13";
src = fetchFromGitHub {
owner = "Rookie0x80";
repo = "docx-mcp";
rev = "b6188eaa57d2694b8f70217e8f6a15980b22ec16";
hash = "sha256-JjcQjwTiJvO6f0f+iiLgm24Rjms8+xehXHsAD6L+TEY=";
};
pyproject = true;
build-system = with python3Packages; [ setuptools ];
dependencies = with python3Packages; [
python-docx
fastmcp
typing-extensions
];
doCheck = false;
pythonImportsCheck = [ "docx_mcp" ];
meta = with lib; {
description = "MCP server for Microsoft Word .docx operations using python-docx (table-focused)";
homepage = "https://github.com/Rookie0x80/docx-mcp";
license = licenses.mit;
mainProgram = "docx-mcp";
platforms = platforms.all;
maintainers = [ ];
};
}
+15 -3
View File
@@ -2,18 +2,28 @@
lib,
python3Packages,
fetchFromGitHub,
fetchurl,
}:
let
# Upstream 0.7.0 was ported to the MCP SDK 2.x API
# (`mcp.server.mcpserver.MCPServer`). nixpkgs pins the SDK at 1.x, so use the
# per-package 2.x stack from packages/lib/mcp2.nix.
mcp2 = import ../lib/mcp2.nix {
inherit lib fetchurl;
pythonPackages = python3Packages;
};
in
python3Packages.buildPythonApplication rec {
pname = "duckduckgo-mcp-server";
version = "0.4.0";
version = "0.7.0";
pyproject = true;
src = fetchFromGitHub {
owner = "nickclyde";
repo = "duckduckgo-mcp-server";
rev = "v${version}";
hash = "sha256-g1mpBrhuCt3g/XnUfHoY8lJDMizINypikj8Lqk2LVuE=";
hash = "sha256-wI6Q4lBZYzU4VORLwGZowv8D5UfhKaMeqBIQ7u6eRxc=";
};
build-system = [ python3Packages.hatchling ];
@@ -21,10 +31,12 @@ python3Packages.buildPythonApplication rec {
dependencies = with python3Packages; [
beautifulsoup4
httpx
mcp
httpcore
mcp2.mcp
];
doCheck = false;
dontCheckRuntimeDeps = true;
pythonImportsCheck = [ "duckduckgo_mcp_server" ];
@@ -71,14 +71,14 @@ let
in
python313Packages.buildPythonApplication rec {
pname = "kindly-web-search-mcp-server";
version = "0.1.8-unstable";
version = "0.1.9-unstable";
pyproject = true;
src = fetchFromGitHub {
owner = "Shelpuk-AI-Technology-Consulting";
repo = "kindly-web-search-mcp-server";
rev = "2b76afb37bf311facbde6750d0a0c0cbdfb8fec2";
hash = "sha256-90QHr2FPiMSwKXmjlZ2W9NIQvj3LDXzYIq6m/Z+sJMw=";
rev = "52a4e480d8041f8d4f388cee1ddecbd8e1ab01c7";
hash = "sha256-Mf3PMUic3XiNkiABRy6DrEhoGwcqq/xThU4ROO4S8dY=";
};
build-system = with python313Packages; [
@@ -95,10 +95,18 @@ python313Packages.buildPythonApplication rec {
pymupdf
fastmcp
trafilatura
starlette
uvicorn
];
nativeBuildInputs = [ makeWrapper ];
# Upstream pins floors newer than nixpkgs currently ships (starlette 1.6,
# pydantic 2.13, beautifulsoup4 4.15, trafilatura 2.2, ...). The APIs this
# server actually uses are present in the nixpkgs versions, so the strict
# runtime-deps floor check is skipped here.
dontCheckRuntimeDeps = true;
# Wrap with Chromium path for headless browser content extraction
postInstall = ''
wrapProgram $out/bin/kindly-web-search-mcp-server \
+98
View File
@@ -0,0 +1,98 @@
# mcp 2.x Python SDK stack
#
# nixpkgs pins the MCP Python SDK at 1.x, whose server class is
# `mcp.server.fastmcp.FastMCP`. SDK 2.x renamed it to
# `mcp.server.mcpserver.MCPServer` and dropped the old module, so packages that
# upstream has ported to the 2.x API need their own copy of the SDK rather than
# the nixpkgs attribute. Derivations are isolated, so this stack coexists with
# the 1.x packages in the same repository without affecting them.
#
# The three pure-Python wheels below (`mcp-types`, `httpx2`, `httpcore2`) are
# not in nixpkgs; everything else resolves from the pinned nixpkgs.
{
lib,
pythonPackages,
fetchurl,
}:
let
ps = pythonPackages;
mk = { pname, version, url, hash, deps ? [ ] }:
ps.buildPythonPackage {
inherit pname version;
format = "wheel";
src = fetchurl { inherit url hash; };
propagatedBuildInputs = deps;
doCheck = false;
# Upstream floors track the latest releases, which routinely sit ahead of
# nixpkgs. The build is pure-Python and import-checked below, so the
# strict floor check is not useful here.
dontCheckRuntimeDeps = true;
pythonImportsCheck = [ (builtins.replaceStrings [ "-" ] [ "_" ] pname) ];
meta = with lib; {
description = "MCP Python SDK ${version} dependency: ${pname}";
homepage = "https://github.com/modelcontextprotocol/python-sdk";
license = licenses.mit;
};
};
mcp-types = mk {
pname = "mcp-types";
version = "2.1.1";
url = "https://files.pythonhosted.org/packages/71/d0/242e63c510f4a17381f55b1549a3f94f5687a0595984febd2b6f87a687a0/mcp_types-2.1.1-py3-none-any.whl";
hash = "sha256-Jvn38D8qVzBxeluY4qt+tkCsNS0FoAzcclwxGGR3gpU=";
deps = with ps; [ pydantic typing-extensions ];
};
httpcore2 = mk {
pname = "httpcore2";
version = "2.5.0";
url = "https://files.pythonhosted.org/packages/c9/a1/7564199d1a8728fe737b0a72e5b3f8d92dfe085a74ddf7cdd83bce5f206d/httpcore2-2.5.0-py3-none-any.whl";
hash = "sha256-XONRiN5GHTHo0AC/uO+L8ixsFlh6IR5Vcd6qXpvfhCo=";
deps = with ps; [ h11 truststore ];
};
httpx2 = mk {
pname = "httpx2";
version = "2.5.0";
url = "https://files.pythonhosted.org/packages/31/22/859d8252dad9bc9adee34b52e62cde621ece07b042ccb2ab4da1be46695f/httpx2-2.5.0-py3-none-any.whl";
hash = "sha256-PS1NnPS2HxofRqlZR8/bR+gMtWovkcYlasj1jkiR30E=";
deps = with ps; [
anyio
httpcore2
idna
truststore
];
};
in
{
inherit mcp-types httpcore2 httpx2;
mcp = mk {
pname = "mcp";
version = "2.1.1";
url = "https://files.pythonhosted.org/packages/50/af/8644cc5fa26a59afd2df2e98eeb19e72926887fa4b7441aba4ff661140db/mcp-2.1.1-py3-none-any.whl";
hash = "sha256-HGwxxdZHHFjbdq86+K9n9G0R0B8KWQd9CjCMvbPT6RU=";
deps = with ps; [
anyio
httpx2
jsonschema
mcp-types
opentelemetry-api
pydantic
pyjwt
python-multipart
sse-starlette
starlette
typing-extensions
typing-inspection
uvicorn
] ++ (with ps; [
# mcp[cli] console entry point
python-dotenv
rich
typer
]);
};
}
+54
View File
@@ -0,0 +1,54 @@
{
lib,
stdenv,
fetchurl,
}:
stdenv.mkDerivation rec {
pname = "libgen-mcp";
version = "2.0.1";
src = fetchurl (
{
x86_64-linux = {
url = "https://github.com/jmrplens/libgen-mcp/releases/download/v${version}/libgen-mcp-linux-amd64";
hash = "sha256-MN6DQ76AmGfaz/Xsyuk6EgFbHxf4TEcg5HXyVomn8G8=";
};
aarch64-linux = {
url = "https://github.com/jmrplens/libgen-mcp/releases/download/v${version}/libgen-mcp-linux-arm64";
hash = "sha256-qIkFGqEaohEnL99vbjM86JjFaHbV+A7vKNVSZg0G5Cg=";
};
x86_64-darwin = {
url = "https://github.com/jmrplens/libgen-mcp/releases/download/v${version}/libgen-mcp-darwin-amd64";
hash = "sha256-eeLfugTMCbvuyT3NzVQmBovarz0tOtOMsbNzAVKUTco=";
};
aarch64-darwin = {
url = "https://github.com/jmrplens/libgen-mcp/releases/download/v${version}/libgen-mcp-darwin-arm64";
hash = "sha256-xmKMeMJtOrqZwgTv7CvXiLEMib/XLvkQ3rCFTOyGU/Y=";
};
}
.${stdenv.hostPlatform.system} or (throw "libgen-mcp: unsupported system ${stdenv.hostPlatform.system}")
);
dontUnpack = true;
installPhase = ''
runHook preInstall
mkdir -p $out/bin
install -m755 $src $out/bin/${pname}
runHook postInstall
'';
meta = with lib; {
description = "MCP server for federated search, download and reading of books, papers, comics and standards across Library Genesis and open-access sources";
homepage = "https://github.com/jmrplens/libgen-mcp";
license = licenses.mit;
mainProgram = pname;
platforms = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
};
}
+127 -87
View File
@@ -1,15 +1,15 @@
{
"name": "mcp-arr-server",
"version": "1.5.4",
"version": "1.7.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "mcp-arr-server",
"version": "1.5.4",
"version": "1.7.3",
"license": "MIT",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.25.2"
"@modelcontextprotocol/sdk": "^1.30.0"
},
"bin": {
"mcp-arr": "dist/index.js"
@@ -23,24 +23,24 @@
}
},
"node_modules/@hono/node-server": {
"version": "1.19.11",
"resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz",
"integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.0.tgz",
"integrity": "sha512-XovyyCCnBzW+zKu+z/zq8hwNs4KOR5rEMAOxo2f40Q5xoOI37IMm6MIg2COOUtUApo0i6850MTBKH2u4QLGIqg==",
"license": "MIT",
"engines": {
"node": ">=18.14.1"
"node": ">=20"
},
"peerDependencies": {
"hono": "^4"
}
},
"node_modules/@modelcontextprotocol/sdk": {
"version": "1.28.0",
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.28.0.tgz",
"integrity": "sha512-gmloF+i+flI8ouQK7MWW4mOwuMh4RePBuPFAEPC6+pdqyWOUMDOixb6qZ69owLJpz6XmyllCouc4t8YWO+E2Nw==",
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz",
"integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==",
"license": "MIT",
"dependencies": {
"@hono/node-server": "^1.19.9",
"@hono/node-server": "^1.19.9 || ^2.0.5",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"content-type": "^1.0.5",
@@ -75,9 +75,9 @@
}
},
"node_modules/@types/node": {
"version": "20.19.37",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
"integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
"version": "20.19.43",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz",
"integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -98,9 +98,9 @@
}
},
"node_modules/ajv": {
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
"integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"version": "8.20.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
"integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
@@ -131,20 +131,20 @@
}
},
"node_modules/body-parser": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
"integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz",
"integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==",
"license": "MIT",
"dependencies": {
"bytes": "^3.1.2",
"content-type": "^1.0.5",
"content-type": "^2.0.0",
"debug": "^4.4.3",
"http-errors": "^2.0.0",
"iconv-lite": "^0.7.0",
"http-errors": "^2.0.1",
"iconv-lite": "^0.7.2",
"on-finished": "^2.4.1",
"qs": "^6.14.1",
"raw-body": "^3.0.1",
"type-is": "^2.0.1"
"qs": "^6.15.2",
"raw-body": "^3.0.2",
"type-is": "^2.1.0"
},
"engines": {
"node": ">=18"
@@ -154,6 +154,19 @@
"url": "https://opencollective.com/express"
}
},
"node_modules/body-parser/node_modules/content-type": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
"integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -193,9 +206,9 @@
}
},
"node_modules/content-disposition": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz",
"integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz",
"integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -337,9 +350,9 @@
}
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
"integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
@@ -376,9 +389,9 @@
}
},
"node_modules/eventsource-parser": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz",
"integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==",
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz",
"integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==",
"license": "MIT",
"engines": {
"node": ">=18.0.0"
@@ -428,12 +441,13 @@
}
},
"node_modules/express-rate-limit": {
"version": "8.3.1",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz",
"integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==",
"version": "8.6.2",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.2.tgz",
"integrity": "sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==",
"license": "MIT",
"dependencies": {
"ip-address": "10.1.0"
"debug": "^4.4.3",
"ip-address": "^10.2.0"
},
"engines": {
"node": ">= 16"
@@ -452,9 +466,9 @@
"license": "MIT"
},
"node_modules/fast-uri": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
"integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz",
"integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==",
"funding": [
{
"type": "github",
@@ -577,9 +591,9 @@
}
},
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
"integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -589,9 +603,9 @@
}
},
"node_modules/hono": {
"version": "4.12.9",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz",
"integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==",
"version": "4.13.1",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.13.1.tgz",
"integrity": "sha512-kdJoFVv2xmayw6cY09H7AbMJMt8Jn5jdlEdXsP7AGBdF2DIptVlKlOLKXP41yPip4/a3yQPv9gVcJYI8YY04dw==",
"license": "MIT",
"engines": {
"node": ">=16.9.0"
@@ -618,9 +632,9 @@
}
},
"node_modules/iconv-lite": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
"integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",
"integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
@@ -640,9 +654,9 @@
"license": "ISC"
},
"node_modules/ip-address": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz",
"integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
"version": "10.5.0",
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz",
"integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==",
"license": "MIT",
"engines": {
"node": ">= 12"
@@ -670,9 +684,9 @@
"license": "ISC"
},
"node_modules/jose": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz",
"integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==",
"version": "6.2.8",
"resolved": "https://registry.npmjs.org/jose/-/jose-6.2.8.tgz",
"integrity": "sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/panva"
@@ -700,12 +714,16 @@
}
},
"node_modules/media-typer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
"integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz",
"integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/merge-descriptors": {
@@ -821,9 +839,9 @@
}
},
"node_modules/path-to-regexp": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.0.tgz",
"integrity": "sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==",
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",
"integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==",
"license": "MIT",
"funding": {
"type": "opencollective",
@@ -853,12 +871,13 @@
}
},
"node_modules/qs": {
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
"integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
"version": "6.15.3",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
"integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.1.0"
"es-define-property": "^1.0.1",
"side-channel": "^1.1.1"
},
"engines": {
"node": ">=0.6"
@@ -868,12 +887,16 @@
}
},
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz",
"integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/raw-body": {
@@ -995,14 +1018,14 @@
}
},
"node_modules/side-channel": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
"integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3",
"side-channel-list": "^1.0.0",
"object-inspect": "^1.13.4",
"side-channel-list": "^1.0.1",
"side-channel-map": "^1.0.1",
"side-channel-weakmap": "^1.0.2"
},
@@ -1014,13 +1037,13 @@
}
},
"node_modules/side-channel-list": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
"integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3"
"object-inspect": "^1.13.4"
},
"engines": {
"node": ">= 0.4"
@@ -1085,17 +1108,34 @@
}
},
"node_modules/type-is": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
"integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",
"integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",
"license": "MIT",
"dependencies": {
"content-type": "^1.0.5",
"content-type": "^2.0.0",
"media-typer": "^1.1.0",
"mime-types": "^3.0.0"
},
"engines": {
"node": ">= 0.6"
"node": ">= 18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/type-is/node_modules/content-type": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
"integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/typescript": {
@@ -1159,9 +1199,9 @@
"license": "ISC"
},
"node_modules/zod": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
"integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
"integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
+3 -3
View File
@@ -6,14 +6,14 @@
buildNpmPackage rec {
pname = "mcp-arr-server";
version = "1.5.4";
version = "1.7.3";
src = fetchzip {
url = "https://registry.npmjs.org/mcp-arr-server/-/mcp-arr-server-${version}.tgz";
hash = "sha256-4eSL1eQmPfm5XlQuxykRDotTHvq9oScJOdXOZrYs6sU=";
hash = "sha256-n2wbAvkssh1OuxAZDcixOYkc2fdmhRkKJWsb+zoEEmY=";
};
npmDepsHash = "sha256-s3/NbuHGqp+wAs7ysKcdBk6X0DNcvfMce+RbsB8Nt14=";
npmDepsHash = "sha256-fG9reQSzNb3QvqvrHKhtOjijTKNEKH7I27rpr0t2gio=";
postPatch = ''
cp ${./package-lock.json} package-lock.json
+57
View File
@@ -0,0 +1,57 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication rec {
pname = "mcp-email-server";
version = "1.9.1";
pyproject = true;
src = fetchFromGitHub {
owner = "Wh1isper";
repo = "mcp-email-server";
rev = "1.9.1";
hash = "sha256-FGjpRkVOFLkqY45Wl1lBuSWZvUnkyESZPeAB+d+1KYw=";
};
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;
};
}
+5 -5
View File
@@ -6,10 +6,10 @@
}:
let
# music21 is not in nixpkgs; vendor it (upstream mcp-score pins >=9.0,<10)
# music21 is not in nixpkgs; vendor it (upstream mcp-score pins >=10.5,<11)
music21 = python313Packages.buildPythonPackage rec {
pname = "music21";
version = "9.9.2";
version = "10.5.0";
format = "wheel";
src = fetchPypi {
@@ -17,7 +17,7 @@ let
format = "wheel";
dist = "py3";
python = "py3";
hash = "sha256-ZIAQq40TKNCxB0bO8UV+hLEidM0xYkgifpbSHielGMo=";
hash = "sha256-mSTv9fv1hJDmfL87eKWLpTBA53woGTDTVK8yp0fpRgY=";
};
propagatedBuildInputs = with python313Packages; [
@@ -50,8 +50,8 @@ python313Packages.buildPythonApplication rec {
src = fetchFromGitHub {
owner = "tskovlund";
repo = "mcp-score";
rev = "3ff9d4b6504fcee5032c44fdcf7dc1d7a21a4b5d";
hash = "sha256-zrpvzxi8AbF5/etuvMZLni4HSFBYGRe55rpKJJEAg60=";
rev = "b2155a59119103c39a37f14166d0d6920e564c76";
hash = "sha256-XYZjGa7pWaVmZ4dF/vOLkrYjSjNXP/148DQjujMdvIU=";
};
build-system = with python313Packages; [
File diff suppressed because it is too large Load Diff
+32
View File
@@ -0,0 +1,32 @@
{
lib,
buildNpmPackage,
fetchzip,
}:
buildNpmPackage rec {
pname = "mcp-searxng";
version = "2.4.0";
src = fetchzip {
url = "https://registry.npmjs.org/mcp-searxng/-/mcp-searxng-${version}.tgz";
hash = "sha256-WB1p3+IDPpRzXh1WSFbWA3ezX8Ih2FsZlV3D3od/v1A=";
};
npmDepsHash = "sha256-srchzmiehwh4wOzhXfDbHiT7t4i8FPRSlakdUGIF/Ks=";
postPatch = ''
cp ${./package-lock.json} package-lock.json
'';
# dist/ is already built in the npm tarball
dontNpmBuild = true;
meta = with lib; {
description = "MCP server integrating SearXNG for privacy-respecting web search and URL reading";
homepage = "https://github.com/ihor-sokoliuk/mcp-searxng";
license = licenses.mit;
mainProgram = pname;
platforms = platforms.all;
};
}
+24788 -230
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -8,14 +8,14 @@
buildNpmPackage rec {
pname = "n8n-mcp";
version = "2.35.1";
version = "2.87.0";
src = fetchzip {
url = "https://registry.npmjs.org/${pname}/-/${pname}-${version}.tgz";
hash = "sha256-CWHH1ACcMCWkLahV5fTO0/k5OtfVUKNldHseDP8EfEk=";
hash = "sha256-YEINthnVgy5nc0KPPHWhXBiiA5vR/ThKqie9lJ6d3co=";
};
npmDepsHash = "sha256-x9ziuYxZPQMqkB2HA4HmGkpge7NGp9t4t4aNTi0XXn4=";
npmDepsHash = "sha256-oy3aR16bTuyztbY3rgTo2z66/4kCk2BNE4BLZjhtki8=";
postPatch = ''
cp ${./package-lock.json} package-lock.json
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.3.0";
src = fetchzip {
url = "https://registry.npmjs.org/${pname}/-/${pname}-${version}.tgz";
hash = "sha256-npUgzJpB0DaFuzU/1SuOIOVvd2gqZtb1Kos7NC8/Pd4=";
};
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;
};
}
+23 -9
View File
@@ -3,9 +3,18 @@
python3Packages,
fetchFromGitHub,
fetchPypi,
fetchurl,
}:
let
# Upstream >=0.185.0 was ported to the MCP SDK 2.x API
# (`mcp.server.mcpserver.MCPServer`). nixpkgs pins the SDK at 1.x, so use the
# per-package 2.x stack from packages/lib/mcp2.nix.
mcp2 = import ../lib/mcp2.nix {
inherit lib fetchurl;
pythonPackages = python3Packages;
};
# Helper: buildPythonPackage for a wheel fetched from PyPI
# CRITICAL: pname MUST use underscores, not hyphens, for PyPI wheel filenames
fetchWheel = { pname, version, hash, propagatedBuildInputs ? [ ], meta ? { } }:
@@ -132,22 +141,24 @@ let
in
python3Packages.buildPythonApplication rec {
pname = "nextcloud-mcp-server";
version = "0.121.3";
version = "0.195.0";
pyproject = true;
src = fetchFromGitHub {
owner = "cbcoutinho";
repo = "nextcloud-mcp-server";
rev = "v${version}";
hash = "sha256-U6BG5anTEllNnJzta4VV6QOfn86+N15q6v/SfLGM7mc=";
hash = "sha256-k8WeVe1ScWN7Lh+trowzn+UVuQBgfgI1Klfz4w5F8do=";
};
build-system = [ python3Packages.uv-build ];
dependencies = with python3Packages; [
mcp httpx pillow icalendar pydantic click pyjwt
mcp2.mcp httpx pillow icalendar pydantic click pyjwt
aiosqlite alembic authlib fastembed anthropic boto3 starlette
jinja2 markdownify pymupdf pymupdf4llm openai dynaconf sqlalchemy
anyio uvicorn cryptography lxml botocore numpy packaging pypdfium2
olefile openpyxl python-docx python-pptx
pythonvcard4 prometheus-client python-json-logger importlib-metadata
googleapis-common-protos opentelemetry-api opentelemetry-proto
@@ -161,14 +172,11 @@ python3Packages.buildPythonApplication rec {
postPatch = ''
substituteInPlace pyproject.toml \
--replace-quiet '"uv_build>=0.11.5,<0.12.0"' '"uv_build"' \
--replace-quiet '" (>=1.27,<1.28)"' '""' \
--replace-quiet '"uv_build>=0.12.1,<0.13.0"' '"uv_build"' \
--replace-quiet '" (>=2.1,<3)"' '""' \
--replace-quiet '" (>=0.28.1,<0.29.0)"' '""' \
--replace-quiet '" (>=10.3.0,<12.0.0)"' '""' \
--replace-quiet '" (>=7.1.0,<7.2.0)"' '""' \
--replace-quiet '" (>=3.0.1,<4.0)"' '""' \
--replace-quiet '" (>=1.28.2,<2.0.0)"' '""' \
--replace-quiet '" (>=2.0.0,<3.0.0)"' '""' \
--replace-quiet '" (>=7.3.0,<7.4.0)"' '""' \
--replace-quiet '">=3.0.1,<4.0"' '""' \
--replace-quiet '">=3.8.0,<4.0"' '""' \
--replace-quiet '">=3.2.13,<4.0"' '""' \
@@ -188,6 +196,12 @@ python3Packages.buildPythonApplication rec {
dontCheckRuntimeDeps = true;
catchConflicts = false;
pythonImportsCheck = [
"nextcloud_mcp_server"
"mcp"
"pymupdf"
];
meta = with lib; {
description = "MCP server for Nextcloud — files, calendar, contacts, notes, deck, talk, sharing";
homepage = "https://github.com/cbcoutinho/nextcloud-mcp-server";
File diff suppressed because it is too large Load Diff
+46
View File
@@ -0,0 +1,46 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
makeWrapper,
nodejs,
}:
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=";
nativeBuildInputs = [ makeWrapper ];
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.
#
# The upstream package.json has NO "bin" field, so buildNpmPackage produces
# no executable. Create a wrapper that runs node dist/index.js.
postInstall = ''
mkdir -p $out/bin
makeWrapper ${nodejs}/bin/node $out/bin/ovhcloud-mcp \
--add-flags "$out/lib/node_modules/ovhcloud-mcp/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;
};
}
+40
View File
@@ -0,0 +1,40 @@
{
lib,
python3Packages,
fetchFromGitea,
}:
python3Packages.buildPythonApplication rec {
pname = "pdf-mcp";
version = "0.1.1-unstable-2026-07-30";
src = fetchFromGitea {
domain = "gitea.bueso.eu";
owner = "hermes-agent";
repo = "pdf-mcp";
rev = "356e476d1dd0d2d9eb866df7c6f82a21018351c8";
hash = "sha256-whfXjMQIUt94VEeo6Fdvdr96WV3HNNNVuL1gtkt4g7M=";
};
pyproject = true;
build-system = with python3Packages; [ hatchling ];
dependencies = with python3Packages; [
mcp
pymupdf
pymupdf4llm
];
doCheck = false;
pythonImportsCheck = [ "pdf_mcp" ];
meta = with lib; {
description = "MCP server for reading, rendering, and searching PDF files (PyMuPDF)";
homepage = "https://gitea.bueso.eu/hermes-agent/pdf-mcp";
license = licenses.mit;
mainProgram = "pdf-mcp";
platforms = platforms.all;
maintainers = [ ];
};
}
+3740 -1379
View File
File diff suppressed because it is too large Load Diff
+13 -4
View File
@@ -2,24 +2,33 @@
lib,
buildNpmPackage,
fetchzip,
autoPatchelfHook,
stdenv,
}:
buildNpmPackage rec {
pname = "pdf-reader-mcp";
version = "2.3.0";
version = "4.1.3";
src = fetchzip {
url = "https://registry.npmjs.org/@sylphx/pdf-reader-mcp/-/pdf-reader-mcp-${version}.tgz";
hash = "sha256-nLtTYE5pSLigAQqsWx3TvntOign30vUJ4jaCDScm9oY=";
hash = "sha256-oxEL7lwEJdhPoA4p/HiQeMp9TP7al1z2KpiPTUPqn6c=";
};
npmDepsHash = "sha256-Z+C1pGJb1gCUR4qlM9ZSjhevqWPdCOVhL631GFaehbc=";
npmDepsHash = "sha256-3XohzskNUMGkIgZvQie9DA8DfHxJZGD86n+uVZPxMdg=";
# The runtime launcher spawns a prebuilt Rust binary shipped in the matching
# optional platform package. On Linux it is dynamically linked against glibc,
# so its interpreter and RPATH must be patched for NixOS.
nativeBuildInputs = lib.optional stdenv.isLinux autoPatchelfHook;
buildInputs = lib.optional stdenv.isLinux stdenv.cc.cc.lib;
postPatch = ''
cp ${./package-lock.json} package-lock.json
'';
# dist/ is already built in the npm tarball
# dist/ and the native Rust binary ship prebuilt; there is no build step.
dontNpmBuild = true;
meta = with lib; {
+86
View File
@@ -0,0 +1,86 @@
{
lib,
python313Packages,
fetchFromGitHub,
fetchPypi,
}:
# Upstream pins `requires-python = ">=3.11,<3.14"`, so this must NOT be built
# with the default `python3Packages` (which is 3.14.x on nixos-unstable and
# would be rejected by the build backend's requires-python check). Pin the
# 3.13 package set explicitly.
#
# `fastmcp[tasks]` is a HARD runtime dependency: `src/ssh_mcp/tools/exec_tools.py`
# does `from fastmcp.server.tasks import TaskConfig` at import time, and the
# decorator validates at import. nixpkgs' `fastmcp` installs only the
# client+server extras (optional-dependencies are passthru-only in nix and
# install nothing), so the `tasks` extra's backend -- pydocket -- has to be
# listed explicitly or the server crashes at startup.
let
# Internal dependency: upstream pins `unidiff>=0.7.5,<0.8.0`, but nixpkgs only
# carries 1.0.0. The 0.7.x API surface used by the ssh_edit tool
# (`PatchSet.from_string` and hunk iteration) is unchanged in 1.0.0, but
# buildPythonApplication's runtime-dep check enforces the specifier, so the
# pinned version still has to be provided. 0.7.5 is sdist-only on PyPI
# (no wheel), so this is a source build.
unidiff = python313Packages.buildPythonPackage rec {
pname = "unidiff";
version = "0.7.5";
pyproject = true;
build-system = [ python313Packages.setuptools ];
src = fetchPypi {
inherit pname version;
hash = "sha256-Ll8BYgUiSJRrnwlwpA6eEkI2v4bIK3CCEUOm/B3qJXQ=";
};
doCheck = false;
pythonImportsCheck = [ "unidiff" ];
meta = with lib; {
description = "Unified diff parsing and application";
homepage = "https://github.com/matiasb/python-unidiff";
license = licenses.mit;
};
};
in
python313Packages.buildPythonApplication rec {
pname = "python-ssh-mcp";
version = "1.5.2";
pyproject = true;
src = fetchFromGitHub {
owner = "Nightreaver";
repo = "python-ssh-mcp";
rev = "73c00c9b0d26add59798bc7b39dff88ac547b15a"; # v1.5.2
hash = "sha256-OfwOiBan5sqGEs/zzHHC4vJdcALOLWaIr8uENCbQ4FU=";
};
build-system = [ python313Packages.hatchling ];
dependencies = with python313Packages; [
fastmcp
pydocket # the fastmcp[tasks] extra
asyncssh
pydantic
pydantic-settings
unidiff
];
# Upstream ships no importable test suite in the sdist workflow used here
# (its 1649 tests need the dockerized sshd fixtures); skip and rely on the
# import check + the smoke test below.
doCheck = false;
pythonImportsCheck = [ "ssh_mcp" ];
meta = with lib; {
description = "SSH MCP server for multi-host systemd/docker/apt administration (read-only by default, tiered)";
homepage = "https://github.com/Nightreaver/python-ssh-mcp";
license = licenses.gpl3Only;
mainProgram = "ssh-mcp";
platforms = platforms.all;
maintainers = [ ];
};
}
+7 -3
View File
@@ -21,10 +21,14 @@ stdenv.mkDerivation {
version = "0.1.0-unstable";
src = fetchFromGitHub {
owner = "jmagar";
# Original upstream (jmagar/sabnzbd-mcp) was deleted from GitHub.
# Using jasonpaulso's fork, which preserves the same file layout
# (client.py + sabnzbd-mcp-server.py at repo root) and the
# /sabnzbd/api string that postPatch below rewrites.
owner = "jasonpaulso";
repo = "sabnzbd-mcp";
rev = "9d691ed70b72397fddec03ca4ec68c81b30c79c3";
hash = "sha256-1sEnHH40cDVT5oiZD2Xywl7S9vJThii/ce+6r+XmpSw=";
rev = "8755e70e2634c02c24471f32962224833877dc81";
hash = "sha256-y46jTXBsOXMoFnnwyv0n+8uq2Z/kw2HbnZC85knWpUw=";
};
nativeBuildInputs = [ makeWrapper ];
+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;
};
}
+3 -3
View File
@@ -6,13 +6,13 @@
let
wheel = fetchurl {
url = "https://files.pythonhosted.org/packages/6b/9c/dc73804f0f62208d59794080d009fb86b7ac6e9d4b5ad452791355dcfb51/transmission_mcp-1.0.1-py3-none-any.whl";
hash = "sha256-1TKb75iNKgMqw0YVZ+rDEac4IyCuj94y1OMzqQROCrI=";
url = "https://files.pythonhosted.org/packages/7e/81/fb2a2f2073d22b0a18c4c96b9c9ff386c3d0b49b6263097bf646d8b72800/transmission_mcp-1.1.0-py3-none-any.whl";
hash = "sha256-J22L3lY+XVdLdZeu8KuFdly0BkFUoAbX4GE/9a5kKSU=";
};
in
python3Packages.buildPythonApplication rec {
pname = "transmission-mcp";
version = "1.0.1";
version = "1.1.0";
format = "wheel";
src = wheel;
+29
View File
@@ -0,0 +1,29 @@
{
lib,
stdenv,
fetchzip,
}:
stdenv.mkDerivation rec {
pname = "yarr";
version = "2.2.2";
src = fetchzip {
url = "https://github.com/dinglebear-ai/yarr/releases/download/v${version}/yarr-x86_64.tar.gz";
hash = "sha256-2L1slCN/zigS4eMIXK7vexAyLNQZs8Q4BMdA7GHIIiM=";
};
installPhase = ''
mkdir -p $out/bin
cp yarr $out/bin/
chmod +x $out/bin/yarr
'';
meta = with lib; {
description = "Rust MCP server for media automation fleets - Sonarr, Radarr, Prowlarr, Jellyfin, SABnzbd, qBittorrent, Plex";
homepage = "https://github.com/dinglebear-ai/yarr";
license = licenses.agpl3Only;
mainProgram = "yarr";
platforms = [ "x86_64-linux" ];
};
}
+41 -16
View File
@@ -3,13 +3,14 @@
python3Packages,
fetchFromGitHub,
fetchPypi,
fetchurl,
}:
let
# Internal dependency: pyzotero (not in nixpkgs)
pyzotero = python3Packages.buildPythonPackage rec {
pname = "pyzotero";
version = "1.11.0";
version = "1.14.0";
format = "wheel";
src = fetchPypi {
@@ -17,7 +18,7 @@ let
format = "wheel";
dist = "py3";
python = "py3";
hash = "sha256-VDSMczLHnNGs9THyVI/I2MbqMeiemMQgIy2XoZOtlbI=";
hash = "sha256-OUoU8HTEFwVfzqopcLWUzpJaYJTJ09zIpzTgdCbs9BU=";
};
propagatedBuildInputs = with python3Packages; [
@@ -36,46 +37,67 @@ let
license = licenses.blueOak100;
};
};
# pdf-inspector: Rust with prebuilt abi3 wheels, not in nixpkgs.
# Pinned exactly (pre-1.0); no Python dependencies of its own.
pdf-inspector = python3Packages.buildPythonPackage rec {
pname = "pdf-inspector";
version = "0.2.6";
format = "wheel";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/59/af/be72ab2bd310b6532e4311cf06175eb722802ccea29dbd9281f66c645bd8/pdf_inspector-0.2.6-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";
hash = "sha256-33bdEAUEtwXOku8sZo8VLwUnfZQqvZSn0/JSy1RI1W0=";
};
doCheck = false;
pythonImportsCheck = [ "pdf_inspector" ];
meta = with lib; {
description = "PDF text extraction (Rust, abi3 wheels)";
homepage = "https://github.com/54yyyu/pdf-inspector";
license = licenses.mit;
};
};
in
python3Packages.buildPythonApplication rec {
pname = "zotero-mcp";
version = "0.5.0";
version = "0.13.0";
pyproject = true;
src = fetchFromGitHub {
owner = "54yyyu";
repo = "zotero-mcp";
rev = "v${version}";
hash = "sha256-ioy6bdP+jFioUGBKiiYtD4nbdFe6v2E3nCi6s9+dTT0=";
hash = "sha256-xL54SbaAczkwk4tkan+wVVTv9ACKIC6hcAADI2GTnxk=";
};
build-system = with python3Packages; [
hatchling
];
# Core dependencies
# Core dependencies (from pyproject.toml v0.13.0)
dependencies = with python3Packages; [
pyzotero
mcp
python-dotenv
markitdown
pdf-inspector
markdownify
pydantic
requests
fastmcp
httpx
unidecode
# PDF support
bibtexparser
# Runtime deps for the annotation/layout/read tools (upstream "pdf" extra).
# nix's optional-dependencies is passthru-only and installs nothing, so
# anything needed at runtime must live in this list.
pymupdf
ebooklib
pdfplumber
# Semantic search
chromadb
sentence-transformers
openai
google-genai
tiktoken
];
# Optional: semantic search dependencies
# Optional extras (semantic search, PDF, scite).
# NOTE: buildPythonApplication stores these in passthru only and does NOT
# install them; adding an extra here has no runtime effect.
optional-dependencies = with python3Packages; {
semantic = [
chromadb
@@ -88,6 +110,9 @@ python3Packages.buildPythonApplication rec {
pymupdf
ebooklib
];
scite = [
requests
];
};
pythonImportsCheck = [ "zotero_mcp" ];