diff --git a/dev-python/fastmcp/Manifest b/dev-python/fastmcp/Manifest index ed4a6dcdea..23fde4792e 100644 --- a/dev-python/fastmcp/Manifest +++ b/dev-python/fastmcp/Manifest @@ -1 +1,2 @@ DIST fastmcp-3.2.4.tar.gz 28746127 BLAKE2B 7e4c674372e575b4a33c53ae3ebac82b3f937c19e383f8ee9089e64998d795e5423f9a425d9b69de8a36ac1e8c40fe2f8e97dbc2a9b11c79b13d774419b4f059 SHA512 95a2952a061473bd631752f6d9a45dfd128fa453b4a3c6895a1c216ef4104311a4e6e55c898acb9e5c699f89397a8611e6df8d289dc2ce7fbbc9ac7f7fab7e2c +DIST fastmcp-3.4.3.gh.tar.gz 28827501 BLAKE2B 3a54ff0a33315c4a8a1cff37239c9e938171f443479e67792089cb2ab911fdf095ca348c5953c7e8033c720fed4fcbe39e1b5a04c0b8489629d5d6dd4474f3a3 SHA512 1dbd1b5ef9eacdca3d0c8384cb36f539596e83bafcbf4878d59609770799ec88b39783540b1699d4085f93da4179a1d4e5a3933c7e8a3ce02a7ec9158ba16a2d diff --git a/dev-python/fastmcp/fastmcp-3.4.3.ebuild b/dev-python/fastmcp/fastmcp-3.4.3.ebuild new file mode 100644 index 0000000000..22c10df051 --- /dev/null +++ b/dev-python/fastmcp/fastmcp-3.4.3.ebuild @@ -0,0 +1,158 @@ +# Copyright 2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=hatchling +PYTHON_COMPAT=( python3_{12..14} ) + +inherit distutils-r1 + +DESCRIPTION="The fast, Pythonic way to build MCP servers and clients" +HOMEPAGE=" + https://gofastmcp.com/ + https://github.com/PrefectHQ/fastmcp + https://pypi.org/project/fastmcp/ +" +SRC_URI=" + https://github.com/PrefectHQ/${PN}/archive/refs/tags/v${PV}.tar.gz + -> ${P}.gh.tar.gz +" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" + +# email-validator via pydantic[email] +BASE_DEPS=" + dev-python/email-validator[${PYTHON_USEDEP}] + >=dev-python/platformdirs-4.0.0[${PYTHON_USEDEP}] + >=dev-python/pydantic-2.11.7[${PYTHON_USEDEP}] + >=dev-python/pydantic-settings-2.0.0[${PYTHON_USEDEP}] + >=dev-python/python-dotenv-1.1.0[${PYTHON_USEDEP}] + >=dev-python/rich-13.9.4[${PYTHON_USEDEP}] + >=dev-python/typing-extensions-4.0.0[${PYTHON_USEDEP}] +" + +MCP_DEPS=" + >=dev-python/exceptiongroup-1.2.2[${PYTHON_USEDEP}] + >=dev-python/httpx-0.28.1[${PYTHON_USEDEP}] + >=dev-python/mcp-1.24.0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-api-1.20.0[${PYTHON_USEDEP}] + >=dev-python/starlette-1.0.1[${PYTHON_USEDEP}] +" + +# >=aiofile-3.5.0, >=anyio-4.4.0 via py-key-value-aio[filetree] +# >=keyring-25.6.0 via py-key-value-aio[keyring] +# >=cachetools-5.0.0 via py-key-value-aio[memory] +CLIENT_DEPS=" + ${MCP_DEPS} + >=dev-python/aiofile-3.5.0[${PYTHON_USEDEP}] + >=dev-python/anyio-4.4.0[${PYTHON_USEDEP}] + >=dev-python/authlib-1.6.11[${PYTHON_USEDEP}] + >=dev-python/cachetools-5.0.0[${PYTHON_USEDEP}] + >=dev-python/keyring-25.6.0[${PYTHON_USEDEP}] + >=dev-python/py-key-value-aio-0.4.4[${PYTHON_USEDEP}] +" + +# py-key-value-aio[filetree,keyring,memory] from CLIENT_DEPS +SERVER_DEPS=" + ${MCP_DEPS} + >=dev-python/authlib-1.6.11[${PYTHON_USEDEP}] + >=dev-python/cyclopts-4.0.0[${PYTHON_USEDEP}] + >=dev-python/griffelib-2.0.0[${PYTHON_USEDEP}] + >=dev-python/joserfc-1.1.0[${PYTHON_USEDEP}] + >=dev-python/jsonref-1.1.0[${PYTHON_USEDEP}] + >=dev-python/jsonschema-path-0.3.4[${PYTHON_USEDEP}] + >=dev-python/openapi-pydantic-0.5.1[${PYTHON_USEDEP}] + >=dev-python/packaging-24.0[${PYTHON_USEDEP}] + >=dev-python/pyperclip-1.9.0[${PYTHON_USEDEP}] + >=dev-python/python-multipart-0.0.26[${PYTHON_USEDEP}] + >=dev-python/pyyaml-6.0[${PYTHON_USEDEP}] + >=dev-python/uncalled-for-0.2.0[${PYTHON_USEDEP}] + >=dev-python/uvicorn-0.35[${PYTHON_USEDEP}] + >=dev-python/watchfiles-1.0.0[${PYTHON_USEDEP}] + >=dev-python/websockets-15.0.1[${PYTHON_USEDEP}] +" + +RDEPEND=" + ${BASE_DEPS} + ${CLIENT_DEPS} + ${SERVER_DEPS} +" + +# TODO fastmcp[anthropic,apps,azure,code-mode,gemini,openai,tasks] +# missing: [azure,code-mode,gemini] +# TODO pydantic-monty==0.0.17 +BDEPEND=" + >=dev-python/uv-dynamic-versioning-0.7.0[${PYTHON_USEDEP}] + test? ( + >=dev-python/anthropic-0.48.0[${PYTHON_USEDEP}] + >=dev-python/dirty-equals-0.9.0[${PYTHON_USEDEP}] + >=dev-python/fastapi-0.115.12[${PYTHON_USEDEP}] + >=dev-python/openai-1.102.0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-exporter-otlp-proto-grpc-1.39.0[${PYTHON_USEDEP}] + >=dev-python/opentelemetry-sdk-1.20.0[${PYTHON_USEDEP}] + >=dev-python/prefab-ui-0.18.0[${PYTHON_USEDEP}] + >=dev-python/psutil-7.0.0[${PYTHON_USEDEP}] + >=dev-python/pydocket-0.20.0[${PYTHON_USEDEP}] + ) +" + +# raise default timeout +# https://bugs.gentoo.org/978150 +: ${EPYTEST_TIMEOUT:=10} +EPYTEST_PLUGINS=( + inline-snapshot + pytest-{asyncio,env,httpx,timeout} +) +EPYTEST_XDIST=1 +distutils_enable_tests pytest + +src_prepare() { + distutils-r1_src_prepare + + # raise timeouts for slower CI systems + # https://bugs.gentoo.org/977930 + sed -i -e 's/@pytest.mark.timeout(15)/@pytest.mark.timeout(60)/' \ + tests/client/test_stdio.py || die + sed -i -e 's/INIT_TIMEOUT = 3/INIT_TIMEOUT = 10/' \ + tests/client/test_stdio.py || die +} + +python_compile() { + local -x UV_DYNAMIC_VERSIONING_BYPASS=${PV} + for d in fastmcp_{slim,remote}; do + pushd ${d} >/dev/null || die + distutils-r1_python_compile + popd >/dev/null || die + done +} + +python_test() { + local EPYTEST_IGNORE=( + # requires pytest-examples + tests/docs/test_doc_examples.py + + # requires pydantic-monty + tests/experimental/transforms/test_code_mode.py + + # require network + tests/client/transports/test_uv_transport.py + tests/server/providers/openapi/test_openapi_performance.py + + # requires npm package @modelcontextprotocol/conformance@latest + tests/conformance/test_conformance.py + ) + local EPYTEST_DESELECT=() + + if [[ ${EPYTHON} == python3.14 ]]; then + EPYTEST_DESELECT+=( + # fails on Python 3.14 due to changes in functools.partial type hint resolution + tests/server/tasks/test_task_tools.py::test_resolve_param_hints_handles_partials + ) + fi + + rm -rf fastmcp_{slim,remote} || die + epytest +}