Add yarr: Rust MCP server for media automation fleets #12

Merged
luis merged 4 commits from feat/yarr into main 2026-08-17 14:03:39 +02:00
5 changed files with 67 additions and 7 deletions
Generated
+18 -1
View File
@@ -18,7 +18,24 @@
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
"nixpkgs": "nixpkgs",
"rust-nixpkgs": "rust-nixpkgs"
}
},
"rust-nixpkgs": {
"locked": {
"lastModified": 1786599213,
"narHash": "sha256-yNJd40f11EzXBjSByCB7IPpeFFAdeoSKKM67dGkfFoU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0e251e24a4f24e036a084b6b4b2d2491af4167f4",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0e251e24a4f24e036a084b6b4b2d2491af4167f4",
"type": "github"
}
}
},
+11 -3
View File
@@ -12,10 +12,14 @@
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# Newer nixpkgs for yarr: the pinned nixpkgs has rustc 1.95 but yarr
# needs 1.97.1. Bumping the main nixpkgs input breaks aioimaplib
# (email server dep), so use a separate input just for yarr's rust.
rust-nixpkgs.url = "github:NixOS/nixpkgs/0e251e24a4f24e036a084b6b4b2d2491af4167f4";
};
outputs =
{ self, nixpkgs, ... }:
{ self, nixpkgs, rust-nixpkgs, ... }:
let
supportedSystems = [
"x86_64-linux"
@@ -36,7 +40,10 @@
inherit system;
overlays = [ self.overlays.default ];
};
mcpPackages = import ./packages { inherit pkgs; };
# yarr needs rustc 1.97.1; the main nixpkgs input only has 1.95.
# Build its rust toolchain from the newer rust-nixpkgs input.
rustPkgs = import rust-nixpkgs { inherit system; };
mcpPackages = import ./packages { inherit pkgs rustPkgs; };
in
mcpPackages // {
default = pkgs.symlinkJoin {
@@ -53,7 +60,8 @@
inherit system;
overlays = [ self.overlays.default ];
};
mcpPackages = import ./packages { inherit pkgs; };
rustPkgs = import rust-nixpkgs { inherit system; };
mcpPackages = import ./packages { inherit pkgs rustPkgs; };
in
{
default = pkgs.mkShell {
+4 -1
View File
@@ -16,8 +16,11 @@
# };
# }
#
# Note: yarr is excluded from the overlay because it needs rustc 1.97.1
# from a specific nixpkgs input. Build it via nix build .#yarr on the
# flake directly.
final: prev:
let
mcpPackages = import ../packages { pkgs = final; };
in
mcpPackages
builtins.removeAttrs mcpPackages [ "yarr" ]
+3 -2
View File
@@ -1,4 +1,4 @@
{ pkgs }:
{ pkgs, rustPkgs ? pkgs }:
{
manim-mcp-server = pkgs.callPackage ./manim-mcp-server/package.nix { };
@@ -28,5 +28,6 @@
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 = rustPkgs.callPackage ./yarr/package.nix { };
# example-mcp-server = pkgs.callPackage ./example-mcp-server/package.nix { };
}
}
+31
View File
@@ -0,0 +1,31 @@
{
lib,
rustPlatform,
fetchFromGitHub,
}:
rustPlatform.buildRustPackage rec {
pname = "yarr";
version = "2.2.2";
src = fetchFromGitHub {
owner = "dinglebear-ai";
repo = "yarr";
rev = "15a599bab38a";
hash = "sha256-PlD2NYK06rVdKirUq2dw04WL9yFrM2TB1d67Weero0k=";
};
cargoHash = "sha256-e89uYPLqwhh1epedUvVEDTT4y35nuwLWlco4AVvKoK4=";
# The cargo test phase hangs (0% CPU, no rustc procs) — likely a test
# blocking on network. Skip tests; we only need the binary.
doCheck = false;
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 = platforms.all;
};
}