fixes deterministic CI failure on main with MCP <g...
# proj-agent
s
fixes deterministic CI failure on main with MCP github.com/OpenHands/software-agent-sdk/pull/4301/changes
Copy code
a loose dependency outside the repository lock.

  The test ran:

  uvx mcp-server-fetch

  uvx creates a separate environment, so the SDK's uv.lock does not apply. Inside that environment, mcp-server-fetch declared:

  mcp>=1.1.3

  with no <2 upper bound.

  13:22 UTC  PR CI:   mcp>=1.1.3 resolves to MCP 1.x → green
  13:45 UTC           MCP 2.0 appears on PyPI
  16:51 UTC  main CI: mcp>=1.1.3 resolves to MCP 2.0 → red

  The PR was legitimately green when approved and merged. The dependency universe changed between its PR run and the post-merge run—even though the repository code and lockfile did not.

  That is the underlying test bug: it was not hermetic. PR #4301 removes the floating external environment and runs a local server using the repository's locked Python environment.
l
We should pin all dependencies and upgrade through dependabot to prevent these failures and supply chain attacks, I’ll work on that. But ✅ for now
Actually gpt-sol found the issue independently and beat me to the punch 😂 github.com/OpenHands/software-agent-sdk/pull/4303
c
Ah, I’m just seeing MCP new version here too https://claude.com/blog/bringing-mcp-2026-07-28-to-claude
✅ 1
s
@limited-student-10747 I made those 3 issues to list loose ends - github.com/OpenHands/software-agent-sdk/issues/4304 - github.com/OpenHands/OpenHands/issues/16161 - github.com/OpenHands/enterprise/issues/96 Looking for a solid way of preventing all of them in CI
🙏 1
@limited-student-10747 higher level issue for hardening our CI github.com/OpenHands/software-agent-sdk/issues/4308 it has a table to list available tools and list big oss repos using them
l
Thanks Simon! I think pinning everything and then using dependabot should be good for now?