{ lib, python3Packages, fetchFromGitHub, fetchPypi, }: let # Internal dependency: pyzotero (not in nixpkgs) pyzotero = python3Packages.buildPythonPackage rec { pname = "pyzotero"; version = "1.9.0"; format = "wheel"; src = fetchPypi { inherit pname version; format = "wheel"; dist = "py3"; python = "py3"; hash = "sha256-vbbqhotDQlsQjho/JaFywriPb3XgnmydcNG38/Qq8xE="; }; propagatedBuildInputs = with python3Packages; [ feedparser bibtexparser httpx whenever ]; doCheck = false; pythonImportsCheck = [ "pyzotero" ]; meta = with lib; { description = "Python wrapper for the Zotero API"; homepage = "https://github.com/urschrei/pyzotero"; license = licenses.blueOak100; }; }; in python3Packages.buildPythonApplication rec { pname = "zotero-mcp"; version = "0.1.2-unstable"; pyproject = true; src = fetchFromGitHub { owner = "54yyyu"; repo = "zotero-mcp"; rev = "372da10a3fbf56332eed4547fd40032de45593b8"; hash = "sha256-nYtuADZVFAJjnl0Gejnd0dK/VVL+XHttHC3zc2avG8s="; }; build-system = with python3Packages; [ hatchling ]; dependencies = with python3Packages; [ pyzotero mcp python-dotenv markitdown pydantic requests fastmcp chromadb sentence-transformers openai google-genai ]; pythonImportsCheck = [ "zotero_mcp" ]; meta = with lib; { description = "MCP server connecting Zotero with AI assistants for research library access"; homepage = "https://github.com/54yyyu/zotero-mcp"; license = licenses.mit; mainProgram = "zotero-mcp"; platforms = platforms.all; }; }