Skip to content

CI requirements pin mcp==2.0.0 while pyproject declares mcp>=1.0,<2, breaking mcp-feature-server-runtime #6706

Closed

Description

@larrysingleton007

Expected Behavior

mcp-feature-server-runtime passes on PRs carrying ok-to-test, and the installed mcp respects the bound pyproject.toml declares.

Current Behavior

The job fails and the feature server starts without MCP:

ERROR:feast.infra.mcp_servers.mcp_server:Failed to initialize MCP integration: Server.__init__() takes 2 positional arguments but 3 were given
  File "sdk/python/feast/infra/mcp_servers/mcp_server.py", line 113, in add_mcp_support_to_app
    mcp = FastApiMCP(
  File ".venv/lib/python3.11/site-packages/fastapi_mcp/server.py", line 144, in setup_server
    mcp_server: Server = Server(self.name, self.description)
TypeError: Server.__init__() takes 2 positional arguments but 3 were given
WARNING:fastapi:MCP support was requested but could not be enabled

The server then comes up without MCP and the job's subsequent curl probes against 127.0.0.1:6566 fail.

Steps to reproduce

Any PR with ok-to-test. It is not branch-specific:

run branch
30977195488 feat/operator-jwks-tunables
30890414540 credentials

Both fail identically, and they are the only two non-skipped runs of pr_integration_tests.yml in the recent list.

Specifications

  • Version: master (4efb86c68 and later)
  • Platform: ubuntu-latest, Python 3.11, as run by pr_integration_tests.yml

Possible Solution

pyproject.toml:144 declares mcp = ["fastapi_mcp", "mcp>=1.0,<2"], but sdk/python/requirements/py3.10-ci-requirements.txt, py3.11-… and py3.12-… all pin mcp==2.0.0. The manifest forbids what CI installs.

Two commits on 2026-07-31 explain it:

  • 4f6b82109 ("chore: Remove upper version bound for uvicorn (chore: Remove upper version bound for uvicorn #6662)") regenerated the requirement sets as a side effect, taking mcp from 1.28.0 to 2.0.0.
  • faf85e06f ("fix: Use correct image name in multi-arch imagetools push step") added the mcp>=1.0,<2 bound about five hours later, without regenerating the requirements.

So the guard exists but is not applied. Neither commit title mentions mcp, which is probably why the two were never connected.

The resolver picking 2.0.0 is reasonable on the metadata: fastapi-mcp==0.4.0 requires mcp>=1.12.0 with no upper bound, so mcp 2.x satisfies it while breaking its code. fastapi-mcp 0.4.0 is the latest release, so bumping it is not an option. Feast's own <2 bound is the right defence; it just needs to reach the lock. Latest 1.x is 1.29.0.

Happy to open the PR. One question first, since it changes the diff considerably: would you prefer a minimal change pinning just mcp (plus its hashes) in the three files, or a full make lock-python-dependencies-all regeneration? A full relock will move unrelated packages, which is how this was introduced.

This is separate from #6252, which proposes replacing fastapi_mcp with the MCP Python SDK for unrelated reasons and would also dissolve this. I am not trying to pre-empt that; this is just an interim unblock while CI is red.

Activity

  1. nithin42 commented on Aug 9, 2026

    @nithin42
    Contributor

    Hi! I've opened PR #6713 to downgrade the lock pins to satisfy the pyproject.toml version bound and unblock the integration tests.

  2. added a commit that references this issue on Aug 10, 2026
    05c5218
  3. added 5 commits that reference this issue on Aug 10, 2026
    32a3619
    0f1d8d4
    010e108
    805c05e
    4362125
  4. added a commit that references this issue on Aug 15, 2026
    98e5bca
  5. added a commit that references this issue on Aug 22, 2026
    b6ce991
  6. added 2 commits that reference this issue on Aug 31, 2026
    f4e58d4
    a29c923
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions