Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
fix: downgrade mcp pin to 1.29.0 and fix CI lockfiles and unit tests
The CI requirements lock files pinned mcp==2.0.0 and mcp-types==2.0.0,
which conflicts with the pyproject.toml constraint mcp>=1.0,<2 added in
a recent change. This caused integration tests and the feature server to
fail with:

  TypeError: Server.__init__() takes 2 positional arguments but 3 were given

This commit:
- Downgrades mcp to 1.29.0 across all nine py3.{10,11,12}-{ci,minimal,minimal-sdist}-requirements.txt lock files.
- Adds httpx-sse==0.4.0 with sha256 hashes to all nine lock files (required by mcp==1.29.0).
- Removes mcp-types from all lock files; mcp==1.29.0 declares no dependency on it.
- Updates unit tests in sdk/python/tests/unit/infra/feature_servers/test_mcp_server.py to isolate RestRegistryServer from unmocked RegistryServer gRPC handlers.

Fixes #6706

Signed-off-by: Nithin <kumbam.nithingoud@gmail.com>
  • Loading branch information
nithin42 committed Aug 14, 2026
commit 4362125b6ff59388e15bddb5a4902d57cd6f5451
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.10-ci-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2796,14 +2796,12 @@ matplotlib-inline==0.2.2 \
# via
# ipykernel
# ipython
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -7568,3 +7566,8 @@ zstandard==0.25.0 \
# via
# pyiceberg
# trino

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.10-minimal-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1367,14 +1367,12 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -3398,3 +3396,8 @@ zipp==4.1.0 \
--hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \
--hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602
# via importlib-metadata

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.10-minimal-sdist-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1544,14 +1544,12 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -3675,6 +3673,11 @@ zipp==4.1.0 \
--hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602
# via importlib-metadata

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp

# The following packages were excluded from the output:
# milvus-lite
# pymilvus
Expand Down
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.11-ci-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2896,14 +2896,12 @@ matplotlib-inline==0.2.2 \
# via
# ipykernel
# ipython
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -7799,3 +7797,8 @@ zstandard==0.25.0 \
# via
# pyiceberg
# trino

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.11-minimal-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1361,14 +1361,12 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -3401,3 +3399,8 @@ zipp==4.1.0 \
--hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \
--hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602
# via importlib-metadata

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.11-minimal-sdist-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1536,14 +1536,12 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -3670,6 +3668,11 @@ zipp==4.1.0 \
--hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602
# via importlib-metadata

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp

# The following packages were excluded from the output:
# milvus-lite
# pymilvus
Expand Down
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.12-ci-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2905,14 +2905,12 @@ matplotlib-inline==0.2.2 \
# via
# ipykernel
# ipython
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -7779,3 +7777,8 @@ zstandard==0.25.0 \
# via
# pyiceberg
# trino

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.12-minimal-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1353,14 +1353,12 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -3361,3 +3359,8 @@ yarl==1.24.5 \
--hash=sha256:ff405d91509d88e8d44129cd87b18d70acd1f0c1aeabd7bc3c46792b1fe2acba \
--hash=sha256:ffcd54362564dc1a30fb74d8b8a6e5a6b11ebd5e27266adc3b7427a21a6c9104
# via aiohttp

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp
19 changes: 11 additions & 8 deletions sdk/python/requirements/py3.12-minimal-sdist-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1528,14 +1528,12 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
mcp==2.0.0 \
--hash=sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728 \
--hash=sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
# via fastapi-mcp
mcp-types==2.0.0 \
--hash=sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0 \
--hash=sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379
# via mcp
mcp==1.29.0 \
--hash=sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36 \
--hash=sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7
# via
# feast (pyproject.toml)
# fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
Expand Down Expand Up @@ -3630,6 +3628,11 @@ yarl==1.24.5 \
--hash=sha256:ffcd54362564dc1a30fb74d8b8a6e5a6b11ebd5e27266adc3b7427a21a6c9104
# via aiohttp

httpx-sse==0.4.0 \
--hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \
--hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
# via mcp

# The following packages were excluded from the output:
# milvus-lite
# pymilvus
Expand Down
12 changes: 9 additions & 3 deletions sdk/python/tests/unit/infra/feature_servers/test_mcp_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from pydantic import ValidationError

import feast.api.registry.rest.rest_registry_server # noqa: F401
from feast.feature_store import FeatureStore
from feast.infra.mcp_servers.mcp_config import McpFeatureServerConfig
from feast.infra.mcp_servers.mcp_server import _resolve_schema_references_safe
Expand Down Expand Up @@ -394,12 +395,13 @@ class TestRestRegistryServerMCP(unittest.TestCase):
"""Test MCP integration in RestRegistryServer."""

@patch("fastapi_mcp.FastApiMCP")
@patch("feast.api.registry.rest.rest_registry_server.RegistryServer")
@patch("feast.api.registry.rest.rest_registry_server.RestRegistryServer._init_auth")
@patch(
"feast.api.registry.rest.rest_registry_server.RestRegistryServer._register_routes"
)
def test_mcp_mounted_when_enabled(
self, mock_register, mock_auth, mock_fast_api_mcp
self, mock_register, mock_auth, mock_grpc, mock_fast_api_mcp
):
"""Test that MCP is mounted on RestRegistryServer when registry.mcp.enabled is True."""
from feast.api.registry.rest.rest_registry_server import RestRegistryServer
Expand All @@ -418,11 +420,12 @@ def test_mcp_mounted_when_enabled(
mock_fast_api_mcp.assert_called_once_with(server.app, name="feast-registry-mcp")
mock_mcp_instance.mount_sse.assert_called_once()

@patch("feast.api.registry.rest.rest_registry_server.RegistryServer")
@patch("feast.api.registry.rest.rest_registry_server.RestRegistryServer._init_auth")
@patch(
"feast.api.registry.rest.rest_registry_server.RestRegistryServer._register_routes"
)
def test_mcp_not_mounted_when_disabled(self, mock_register, mock_auth):
def test_mcp_not_mounted_when_disabled(self, mock_register, mock_auth, mock_grpc):
"""Test that MCP is not mounted when registry.mcp.enabled is False."""
from feast.api.registry.rest.rest_registry_server import RestRegistryServer

Expand All @@ -436,11 +439,14 @@ def test_mcp_not_mounted_when_disabled(self, mock_register, mock_auth):
RestRegistryServer(mock_store)
mock_fast_api_mcp.assert_not_called()

@patch("feast.api.registry.rest.rest_registry_server.RegistryServer")
@patch("feast.api.registry.rest.rest_registry_server.RestRegistryServer._init_auth")
@patch(
"feast.api.registry.rest.rest_registry_server.RestRegistryServer._register_routes"
)
def test_mcp_not_mounted_when_mcp_config_absent(self, mock_register, mock_auth):
def test_mcp_not_mounted_when_mcp_config_absent(
self, mock_register, mock_auth, mock_grpc
):
"""Test that MCP is not mounted when registry.mcp is None."""
from feast.api.registry.rest.rest_registry_server import RestRegistryServer

Expand Down
Loading