feat: add nextcloud-mcp-server with 20 inlined Python deps #1

Merged
luis merged 29 commits from :main into main 2026-05-28 08:55:26 +02:00
Showing only changes of commit 256a9b025c - Show all commits

View File

@@ -6,285 +6,173 @@
}:
let
# ── OpenTelemetry Python monorepo (api, sdk, proto, exporter-otlp-*) ──
otelPythonSrc = fetchFromGitHub {
owner = "open-telemetry";
repo = "opentelemetry-python";
rev = "v1.39.1";
hash = "sha256-GEcGADUdci6W2vfeXt/rjQOL/7r4RBxgyq+vy6tivBc=";
};
# Helper: fetch a wheel from PyPI (avoids sdist 404s, build-system issues, monorepo complexity)
fetchWheel = { pname, version, hash, propagatedBuildInputs ? [ ], meta ? { } }:
python3Packages.buildPythonPackage {
inherit pname version;
format = "wheel";
src = fetchPypi {
inherit pname version hash;
format = "wheel";
dist = "py3";
python = "py3";
};
inherit propagatedBuildInputs;
doCheck = false;
inherit meta;
};
# ── OpenTelemetry Contrib monorepo (instrumentation-*, util-http) ──
otelContribSrc = fetchFromGitHub {
owner = "open-telemetry";
repo = "opentelemetry-python-contrib";
rev = "v0.60b1";
hash = "sha256-IDTSGsHQ8cCFvgSO7pDbSSHVNV0OIjjoEN9ZfkaPAvk=";
};
# ── Tier 1: leaf packages ──
pythonvcard4 = python3Packages.buildPythonPackage rec {
pythonvcard4 = fetchWheel {
pname = "pythonvcard4";
version = "0.2.0";
pyproject = true;
build-system = [ python3Packages.setuptools python3Packages.wheel ];
src = fetchPypi { inherit pname version; hash = "sha256-I2u6J2nkWWRc+ndkB/8HhWrO1FtDcRa/QN2zm7zv220="; };
doCheck = false;
hash = lib.fakeHash;
meta = with lib; { description = "vCard parsing library"; homepage = "https://github.com/GNOME/python-vcard4"; license = licenses.gpl3Plus; };
};
prometheus-client = python3Packages.buildPythonPackage rec {
prometheus-client = fetchWheel {
pname = "prometheus_client";
version = "0.25.0";
pyproject = true;
build-system = [ python3Packages.setuptools python3Packages.wheel ];
src = fetchPypi { inherit pname version; hash = "sha256-Xjc7dcMa+zyG8aUvoa1HDJqs4YCC057A0vkY0RzJuig="; };
doCheck = false;
hash = lib.fakeHash;
meta = with lib; { description = "Prometheus monitoring system client"; homepage = "https://github.com/prometheus/client_python"; license = licenses.asl20; };
};
python-json-logger = python3Packages.buildPythonPackage rec {
python-json-logger = fetchWheel {
pname = "python-json-logger";
version = "4.1.0";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = fetchFromGitHub {
owner = "nhairs";
repo = "python-json-logger";
rev = "v${version}";
hash = "sha256-hJ29rDP04apLf1zaP1vQrYF5xm4GtKZlvno97b7g+hg=";
};
doCheck = false;
hash = lib.fakeHash;
meta = with lib; { description = "JSON formatter for python logging"; homepage = "https://github.com/nhairs/python-json-logger"; license = licenses.bsd2; };
};
importlib-metadata = python3Packages.buildPythonPackage rec {
importlib-metadata = fetchWheel {
pname = "importlib_metadata";
version = "8.7.1";
pyproject = true;
build-system = [ python3Packages.setuptools python3Packages.wheel ];
src = fetchPypi { inherit pname version; hash = "sha256-Sf7xrmRAwYIFL0B8jTSmj3Lvw225ypDcARM5jy/d6Ls="; };
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ zipp ];
doCheck = false;
meta = with lib; { description = "Read metadata from Python packages"; homepage = "https://github.com/python/importlib_metadata"; license = licenses.asl20; };
};
googleapis-common-protos = python3Packages.buildPythonPackage rec {
googleapis-common-protos = fetchWheel {
pname = "googleapis-common-protos";
version = "1.75.0";
pyproject = true;
build-system = [ python3Packages.setuptools python3Packages.wheel ];
src = fetchFromGitHub {
owner = "googleapis";
repo = "python-api-common-protos";
rev = "v${version}";
hash = lib.fakeHash;
};
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ protobuf ];
doCheck = false;
meta = with lib; { description = "Common protobufs used in Google APIs"; homepage = "https://github.com/googleapis/python-api-common-protos"; license = licenses.asl20; };
};
opentelemetry-api = python3Packages.buildPythonPackage rec {
opentelemetry-api = fetchWheel {
pname = "opentelemetry-api";
version = "1.39.1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelPythonSrc;
sourceRoot = "${src.name}/opentelemetry-api";
propagatedBuildInputs = with python3Packages; [ deprecated importlib-metadata ];
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ deprecated ];
meta = with lib; { description = "OpenTelemetry Python API"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; };
};
opentelemetry-proto = python3Packages.buildPythonPackage rec {
opentelemetry-proto = fetchWheel {
pname = "opentelemetry-proto";
version = "1.39.1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelPythonSrc;
sourceRoot = "${src.name}/opentelemetry-proto";
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ protobuf ];
doCheck = false;
meta = with lib; { description = "OpenTelemetry Python Proto"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; };
};
# ── Tier 2 ──
opentelemetry-semantic-conventions = python3Packages.buildPythonPackage rec {
opentelemetry-semantic-conventions = fetchWheel {
pname = "opentelemetry-semantic-conventions";
version = "0.60b1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = fetchFromGitHub {
owner = "open-telemetry";
repo = "semantic-conventions";
rev = "v${version}";
hash = lib.fakeHash;
};
sourceRoot = "${src.name}/model";
propagatedBuildInputs = [ opentelemetry-api ] ++ (with python3Packages; [ deprecated ]);
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ deprecated ];
meta = with lib; { description = "OpenTelemetry Semantic Conventions"; homepage = "https://github.com/open-telemetry/semantic-conventions"; license = licenses.asl20; };
};
opentelemetry-sdk = python3Packages.buildPythonPackage rec {
opentelemetry-sdk = fetchWheel {
pname = "opentelemetry-sdk";
version = "1.39.1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelPythonSrc;
sourceRoot = "${src.name}/opentelemetry-sdk";
propagatedBuildInputs = [ opentelemetry-api opentelemetry-semantic-conventions ] ++ (with python3Packages; [ typing-extensions ]);
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ typing-extensions ];
meta = with lib; { description = "OpenTelemetry Python SDK"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; };
};
x-wr-timezone = python3Packages.buildPythonPackage rec {
x-wr-timezone = fetchWheel {
pname = "x_wr_timezone";
version = "2.0.1";
pyproject = true;
build-system = [ python3Packages.setuptools python3Packages.wheel ];
src = fetchPypi { inherit pname version; hash = "sha256-kWbEDm/9TA7eurw1ThoeLP/Bu0c/iAB2lHk3V2hcyMM="; };
propagatedBuildInputs = with python3Packages; [ icalendar ];
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ icalendar click ];
meta = with lib; { description = "X-WR-TIMEZONE iCalendar property handling"; homepage = "https://github.com/niccokunzmann/x-wr-timezone"; license = licenses.lgpl3Plus; };
};
opentelemetry-util-http = python3Packages.buildPythonPackage rec {
opentelemetry-util-http = fetchWheel {
pname = "opentelemetry-util-http";
version = "0.60b1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelContribSrc;
sourceRoot = "${src.name}/util/opentelemetry-util-http";
doCheck = false;
hash = lib.fakeHash;
meta = with lib; { description = "OpenTelemetry HTTP utilities"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; };
};
opentelemetry-exporter-otlp-proto-common = python3Packages.buildPythonPackage rec {
opentelemetry-exporter-otlp-proto-common = fetchWheel {
pname = "opentelemetry-exporter-otlp-proto-common";
version = "1.39.1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelPythonSrc;
sourceRoot = "${src.name}/exporter/opentelemetry-exporter-otlp-proto-common";
propagatedBuildInputs = [ opentelemetry-proto ];
doCheck = false;
hash = lib.fakeHash;
meta = with lib; { description = "OpenTelemetry OTLP exporter proto common"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; };
};
# ── Tier 3 ──
opentelemetry-instrumentation = python3Packages.buildPythonPackage rec {
opentelemetry-instrumentation = fetchWheel {
pname = "opentelemetry-instrumentation";
version = "0.60b1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelContribSrc;
sourceRoot = "${src.name}/opentelemetry-instrumentation";
propagatedBuildInputs = [ opentelemetry-api opentelemetry-semantic-conventions ] ++ (with python3Packages; [ wrapt packaging ]);
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ wrapt packaging ];
meta = with lib; { description = "OpenTelemetry instrumentation base"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; };
};
recurring-ical-events = python3Packages.buildPythonPackage rec {
recurring-ical-events = fetchWheel {
pname = "recurring-ical-events";
version = "3.8.2";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = fetchFromGitHub {
owner = "niccokunzmann";
repo = "python-recurring-ical-events";
rev = "v${version}";
hash = "sha256-/xTv/JovC8IVZz14ygnEL5vg/W8xR4Ie78hTi+gG58M=";
};
propagatedBuildInputs = [ x-wr-timezone ] ++ (with python3Packages; [ icalendar python-dateutil ]);
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ icalendar python-dateutil ];
meta = with lib; { description = "Recurring iCalendar event expander"; homepage = "https://github.com/niccokunzmann/python-recurring-ical-events"; license = licenses.lgpl3Plus; };
};
opentelemetry-exporter-otlp-proto-grpc = python3Packages.buildPythonPackage rec {
opentelemetry-exporter-otlp-proto-grpc = fetchWheel {
pname = "opentelemetry-exporter-otlp-proto-grpc";
version = "1.39.1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelPythonSrc;
sourceRoot = "${src.name}/exporter/opentelemetry-exporter-otlp-proto-grpc";
propagatedBuildInputs = [ opentelemetry-api opentelemetry-sdk opentelemetry-proto opentelemetry-exporter-otlp-proto-common googleapis-common-protos ] ++ (with python3Packages; [ grpcio deprecated ]);
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ grpcio deprecated ];
meta = with lib; { description = "OpenTelemetry OTLP gRPC exporter"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; };
};
qdrant-client = python3Packages.buildPythonPackage rec {
qdrant-client = fetchWheel {
pname = "qdrant-client";
version = "1.18.0";
pyproject = true;
build-system = [ python3Packages.poetry-core ];
src = fetchFromGitHub {
owner = "qdrant";
repo = "qdrant-client";
rev = "v${version}";
hash = "sha256-ZBP1D67u+KZmBi614nuToauI+xhdH1PKD3g6xRfFQxk=";
};
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ grpcio httpx numpy portalocker protobuf pydantic urllib3 ];
doCheck = false;
meta = with lib; { description = "Qdrant vector search engine client"; homepage = "https://github.com/qdrant/qdrant-client"; license = licenses.asl20; };
};
# ── Tier 4 ──
opentelemetry-instrumentation-asgi = python3Packages.buildPythonPackage rec {
opentelemetry-instrumentation-asgi = fetchWheel {
pname = "opentelemetry-instrumentation-asgi";
version = "0.60b1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelContribSrc;
sourceRoot = "${src.name}/instrumentation/opentelemetry-instrumentation-asgi";
propagatedBuildInputs = [ opentelemetry-api opentelemetry-instrumentation opentelemetry-semantic-conventions opentelemetry-util-http ] ++ (with python3Packages; [ asgiref ]);
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ asgiref ];
meta = with lib; { description = "OpenTelemetry ASGI instrumentation"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; };
};
opentelemetry-instrumentation-httpx = python3Packages.buildPythonPackage rec {
opentelemetry-instrumentation-httpx = fetchWheel {
pname = "opentelemetry-instrumentation-httpx";
version = "0.60b1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelContribSrc;
sourceRoot = "${src.name}/instrumentation/opentelemetry-instrumentation-httpx";
propagatedBuildInputs = [ opentelemetry-api opentelemetry-instrumentation opentelemetry-semantic-conventions opentelemetry-util-http ] ++ (with python3Packages; [ httpx wrapt ]);
doCheck = false;
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ httpx wrapt ];
meta = with lib; { description = "OpenTelemetry HTTPX instrumentation"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; };
};
opentelemetry-instrumentation-logging = python3Packages.buildPythonPackage rec {
opentelemetry-instrumentation-logging = fetchWheel {
pname = "opentelemetry-instrumentation-logging";
version = "0.60b1";
pyproject = true;
build-system = [ python3Packages.hatchling ];
src = otelContribSrc;
sourceRoot = "${src.name}/instrumentation/opentelemetry-instrumentation-logging";
propagatedBuildInputs = [ opentelemetry-api opentelemetry-instrumentation ];
doCheck = false;
hash = lib.fakeHash;
meta = with lib; { description = "OpenTelemetry logging instrumentation"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; };
};
langchain-text-splitters = python3Packages.buildPythonPackage rec {
langchain-text-splitters = fetchWheel {
pname = "langchain-text-splitters";
version = "1.1.2";
pyproject = true;
build-system = [ python3Packages.poetry-core ];
src = fetchFromGitHub {
owner = "langchain-ai";
repo = "langchain";
rev = "langchain-text-splitters==${version}";
hash = "sha256-AiRl8N2V2UfYLZfqxM8DHZmT76rH19I1gFyOYc/mpYY=";
};
sourceRoot = "${src.name}/libs/text-splitters";
hash = lib.fakeHash;
propagatedBuildInputs = with python3Packages; [ langchain-core ];
doCheck = false;
meta = with lib; { description = "LangChain text splitting utilities"; homepage = "https://github.com/langchain-ai/langchain"; license = licenses.mit; };
};
@@ -304,11 +192,13 @@ python3Packages.buildPythonApplication rec {
build-system = [ python3Packages.hatchling ];
dependencies = with python3Packages; [
# ── nixpkgs packages ──
mcp httpx pillow icalendar pydantic click caldav pyjwt
aiosqlite alembic authlib fastembed anthropic boto3 starlette
jinja2 markdownify pymupdf pymupdf4llm openai dynaconf
mistralai sqlalchemy
# ── Inlined wheel packages ──
pythonvcard4 prometheus-client python-json-logger importlib-metadata
googleapis-common-protos opentelemetry-api opentelemetry-proto
opentelemetry-semantic-conventions opentelemetry-sdk
@@ -326,7 +216,7 @@ python3Packages.buildPythonApplication rec {
--replace-fail '"mcp[cli]>=1.27,<1.28"' '"mcp"' \
--replace-fail '"pymupdf4llm>=0.2.2"' '"pymupdf4llm"' \
--replace-fail '"pymupdf>=1.26.6"' '"pymupdf"' \
--replace-fail '"qrant-client>=1.17.0"' '"qdrant-client"' \
--replace-fail '"qdrant-client>=1.17.0"' '"qdrant-client"' \
--replace-fail '"opentelemetry-api>=1.28.2"' '"opentelemetry-api"' \
--replace-fail '"opentelemetry-sdk>=1.28.2"' '"opentelemetry-sdk"' \
--replace-fail '"opentelemetry-instrumentation-asgi>=0.49b2"' '"opentelemetry-instrumentation-asgi"' \