Skip to content

fix: Downgrade CI requirements mcp pin to satisfy pyproject constraint - #6713

Open
nithin42 wants to merge 1 commit into
feast-dev:masterfrom
nithin42:fix/ci-mcp-pin-mismatch
Open

fix: Downgrade CI requirements mcp pin to satisfy pyproject constraint#6713
nithin42 wants to merge 1 commit into
feast-dev:masterfrom
nithin42:fix/ci-mcp-pin-mismatch

Conversation

@nithin42

@nithin42 nithin42 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

What this PR does / why we need it

A recent change added the mcp>=1.0,<2 constraint to pyproject.toml but the CI dependencies requirements lock files still pinned mcp==2.0.0 and mcp-types==2.0.0. This version mismatch broke integration tests and crashed the feature server with a TypeError: Server.__init__() takes 2 positional arguments but 3 were given during CI runs.
This PR downgrades mcp to 1.29.0 (with updated hashes) and removes mcp-types from all requirements files. We also loosen psutil dependency in pyproject.toml to allow prebuilt binary wheels on Windows Python 3.11.

Which issue(s) this PR fixes

Fixes #6706

Checks

  • I've made sure the tests are passing.
  • My commits are signed off (git commit -s)
  • My PR title follows conventional commits format

@larrysingleton007

Copy link
Copy Markdown
Contributor

@nithin42 thanks for picking this up. I verified the fix locally, since the job it repairs can't run here yet: this PR shows 1 check passing and 4 skipped, so mcp-feature-server-runtime hasn't fired. That job only runs on PRs carrying ok-to-test, which is the same reason the breakage went five days unnoticed.

Both halves of the change hold up under mcp==1.29.0 with fastapi-mcp==0.4.0:

The exact call that fails today is accepted. Server.__init__ in 1.29.0 is (self, name, version=None, instructions=None, ...), so Server(self.name, self.description) at fastapi_mcp/server.py:144 binds fine. I also ran the real failing path end to end, constructing FastApiMCP(app, name=..., description=...) against a FastAPI app, and it builds cleanly where it currently raises TypeError.

Dropping mcp-types is right too, not just harmless. mcp==1.29.0 declares no dependency on it and it isn't installed transitively, so it was only ever there because mcp 2.0.0 pulled it in.

One incidental note, no action needed: fastapi_mcp is passing a description into what 1.29.0 names version. That's been true all along and is fastapi-mcp's business, but it's probably why mcp 2.x tightened the signature and why this surfaced as a positional-count error rather than a type error.

@ntkathole @franciscojavierarceo this needs ok-to-test to prove itself, and it unblocks the integration suite for every labelled PR.

@nithin42

Copy link
Copy Markdown
Contributor Author

@ntkathole @franciscojavierarceo — could you please approve the 16 pending workflow runs on this PR?

The ok-to-test label has been added by @jyejare but since this PR is from a fork, the pull_request_target workflows require explicit maintainer approval to execute. The checks are currently failing instantly at the approval gate — not due to any code issue.

This fix unblocks the mcp-feature-server-runtime and registration integration suite for all labelled PRs. @larrysingleton007 has already verified the fix locally. Would appreciate a quick approve on the workflow runs. 🙏

@jyejare
jyejare force-pushed the fix/ci-mcp-pin-mismatch branch from 9507eae to 05c5218 Compare August 10, 2026 11:46
@codecov-commenter

codecov-commenter commented Aug 10, 2026

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 46.81%. Comparing base (b8dfcb0) to head (4362125).
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##           master    #6713   +/-   ##
=======================================
  Coverage   46.81%   46.81%           
=======================================
  Files         415      415           
  Lines       50399    50399           
  Branches     7214     7214           
=======================================
  Hits        23592    23592           
  Misses      25157    25157           
  Partials     1650     1650           
Flag Coverage Δ
go-feature-server 30.58% <ø> (ø)
python-unit 48.13% <ø> (ø)

Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b8dfcb0...4362125. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@larrysingleton007

Copy link
Copy Markdown
Contributor

@nithin42 the workflows are running now, and two have already failed for a reason unrelated to the mcp fix. Both integration-test-duckdb-offline and integration-test-ray die about one second in, at the Setup pixi step, before any test runs:

Error:   × lock file not up-to-date with the workspace
##[error]The process '/home/runner/.pixi/bin/pixi' failed with exit code 1

The cause is the psutil==5.9.0psutil>=5.9.0 change in pyproject.toml. CI runs pixi install --locked, which hard-fails whenever the manifest and pixi.lock disagree, and the PR doesn't include a regenerated lock. Three more jobs use the same setup step and will fail identically once they run: integration-test-registration-ci, -registration-local, and mcp-feature-server-runtime. That last one is the job this PR is meant to fix, so it can't go green until the lock is regenerated.

Fix is pixi lock, committing pixi.lock alongside pyproject.toml.

Two things that cost me time when I hit this on #6683, in case they save you some:

Nothing local catches it. Unit tests, ruff and mypy all run under uv, not pixi, so a fully green local run tells you nothing about this.

pixi lock --check is not read-only. It rewrites the lock as a side effect before reporting the error, leaving your tree dirty. Use plain pixi lock.

If you don't have pixi installed, this container invocation works:

docker run --rm --platform linux/amd64 \
  -e SETUPTOOLS_SCM_PRETEND_VERSION_FOR_FEAST=<version> \
  -v <repo>:/src -w /src ghcr.io/prefix-dev/pixi:latest pixi lock

--platform linux/amd64 is required on Apple Silicon, since linux-arm64 isn't among the lock's platforms. The SETUPTOOLS_SCM_PRETEND_VERSION_FOR_FEAST value is safe to fake, because the lock records feast as a path dependency with no version of its own.

Worth noting the psutil loosening is what triggers this, and it's incidental to the mcp fix. Dropping it would avoid the lock regeneration entirely, if you'd rather keep this PR narrow and handle the Windows wheels separately.

@nithin42
nithin42 force-pushed the fix/ci-mcp-pin-mismatch branch from 05c5218 to 32a3619 Compare August 10, 2026 11:59
@nithin42

nithin42 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @larrysingleton007 — reverted the psutil loosening in 32a3619. It was incidental to the mcp fix and was causing pixi install --locked to fail before tests even ran.

This PR is now narrowly focused on the mcp pin only:

  • mcp 2.0.0 → 1.29.0 across all nine requirements lock files
  • mcp-types removed (not needed by 1.29.0)
  • pyproject.toml unchanged

The psutil Windows-wheel change can follow in a separate PR with a pixi lock regeneration.

@jyejare — force-pushed to revert the incidental psutil change. The PR is now clean and narrowly focused on the mcp pin. Please approve the workflow runs again. Thanks!

@nithin42
nithin42 force-pushed the fix/ci-mcp-pin-mismatch branch from 32a3619 to 0f1d8d4 Compare August 10, 2026 12:02
@jyejare

jyejare commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

@nithin42 Did you run make lock-python-dependencies-all ? if not please run.

@nithin42

Copy link
Copy Markdown
Contributor Author

@jyejare yes, I successfully ran make lock-python-dependencies-all inside Docker to compile all 15 lock files.

However, doing so required adding a greenlet!=3.5.5 constraint in pyproject.toml (since greenlet==3.5.5 lacks a source distribution on PyPI and crashes pybuild-deps compile).

Because we modified pyproject.toml but did not update pixi.lock, the CI runs are currently failing at the Setup pixi step with:
Error: lock file not up-to-date with the workspace

Would you prefer that we:

  1. Revert the pyproject.toml change to keep this PR narrow (since the greenlet compilation failure only affects running dependency lock generation locally, not regular CI/runtime)?
  2. Keep the greenlet workaround in pyproject.toml and regenerate/commit the updated pixi.lock alongside it?

@jyejare

jyejare commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

I would go for option 2.

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 feast-dev#6706

Signed-off-by: Nithin <kumbam.nithingoud@gmail.com>
@nithin42
nithin42 force-pushed the fix/ci-mcp-pin-mismatch branch from 1a298ab to 4362125 Compare August 14, 2026 20:50
@nithin42

Copy link
Copy Markdown
Contributor Author

Hi @jyejare @ntkathole @franciscojavierarceo @larrysingleton007,

Quick update: I have rebased on the latest master and squashed the branch into a single clean commit.

Key changes included:

All 23 CI checks (unit tests on Python 3.10/3.11/3.12 across Ubuntu & macOS, integration tests, and linters) are now fully green.

The PR is ready for your review and merge if everything looks good to you (LGTM). Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

4 participants