Skip to content

fix: bump MCP and Pillow security pins - #72587

Closed
christopherrobin88 wants to merge 1 commit into
NousResearch:mainfrom
christopherrobin88:fix/security-mcp-pillow-pins
Closed

christopherrobin88 wants to merge 1 commit into
NousResearch:mainfrom
christopherrobin88:fix/security-mcp-pillow-pins

Conversation

@christopherrobin88

Copy link
Copy Markdown

Summary

  • Bump MCP from 1.26.0 to 1.28.1 across project extras, lazy dependency pins, and uv.lock.
  • Bump Pillow from 12.2.0 to 12.3.0 across core metadata, lazy vision fallback, and uv.lock.
  • Update the computer-use lazy MCP pin contract test so runtime lazy installs cannot revert the patched MCP version.

Why

A direct pip install of MCP/Pillow is not durable in Hermes because tools/lazy_deps.py can reassert pinned optional dependency versions on first real tool use. This keeps pyproject metadata, lazy dependency allowlist, tests, and lockfile in sync.

Verification

  • scripts/run_tests.sh tests/test_project_metadata.py tests/tools/test_lazy_deps.py tests/tools/test_lazy_deps_durable_target.py tests/tools/test_vision_tools.py tests/tools/test_vision_native_fast_path.py → 204 passed, 0 failed.
  • scripts/run_tests.sh tests/tools/test_computer_use.py::TestLazyMcpInstall::test_feature_registered_in_allowlist → 1 passed, 0 failed.
  • Local runtime smoke test: computer_use capture succeeded after the MCP bump and MCP remained at 1.28.1.
  • Local Pillow smoke test: PNG/JPEG resize, filter, save and load passed with Pillow 12.3.0.
  • pip check → no broken requirements.
  • Local hermes security audit --json → 0 findings across 147 components.

Notes

An unrelated existing Linux GNOME window-selection test in tests/tools/test_computer_use.py still fails when the whole file is run. It touches code outside this dependency bump and is not addressed here.

Update MCP and Pillow pins across project metadata, lazy dependency allowlist, and uv.lock so runtime lazy installs cannot revert the patched versions. Update the computer-use pin contract test accordingly.

Verified with targeted project metadata, lazy dependency, vision, and computer-use pin tests; Python security audit reports zero findings.
@christopherrobin88
christopherrobin88 requested a review from a team July 27, 2026 09:38
@alt-glitch alt-glitch added type/security Security vulnerability or hardening dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code comp/tools Tool registry, model_tools, toolsets tool/vision Vision analysis and image generation tool/mcp MCP client and OAuth area/install-update Installer, updater, packaging, wheels, doctor sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades P3 Low — cosmetic, nice to have needs-decision Awaiting maintainer decision before any implementation labels Jul 27, 2026
@alt-glitch

Copy link
Copy Markdown
Contributor

This was generated by AI during triage.

Related: this combines the live Pillow update in #63942 and MCP update in #65926. The shared manifest/lock paths will conflict, so please consolidate on one remediation path for #60841.

@sycamoregroupltd

Copy link
Copy Markdown
Contributor

Superseded for the MCP 1.28.1 security package-owner lane by canonical survivor PR #73219 at head 91d3644fc43fe827f67a1915454afb33889beca5. Closing this duplicate candidate to keep exactly one reviewable MCP survivor; no merge/deploy/runtime sync performed.

@sycamoregroupltd

Copy link
Copy Markdown
Contributor

MCP package-owner lane note: canonical survivor is #73219 at head 91d3644fc43fe827f67a1915454afb33889beca5. This PR remains open because this account is not authorized to close it (GraphQL ClosePullRequest permission denied), but it is superseded for jarvis-os/t_9a6eac24 / t_44d6ed91 MCP 1.28.1 review routing. No merge/deploy/runtime sync performed.

@teknium1 teknium1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for identifying that the manifest, lazy installer, and lockfile must move together. The underlying issue remains present on current main: pyproject.toml:125, pyproject.toml:165, pyproject.toml:230, pyproject.toml:241, tools/lazy_deps.py:280, and tools/lazy_deps.py:287 still use Pillow 12.2.0 / MCP 1.26.0.

Problems

  • The changed test_feature_registered_in_allowlist hunk no longer has a current-main target: rg finds no such test on HEAD, while the current computer-use lazy-install tests are at tests/tools/test_computer_use.py:762-792. GitHub reports this PR as CONFLICTING.
  • The MEMBER discussion identifies overlapping remediation paths in #63942 and the MCP survivor route. These changes share pyproject.toml, tools/lazy_deps.py, and uv.lock, so they need one consolidated current-main resolution.

Suggested changes

  • Salvage the pin changes against current main and regenerate the lock there. tests/test_project_metadata.py:196-238 already enforces that exact lazy pins match the committed lock resolution.
  • Recreate any desired feature-specific computer-use assertion in the current test layout rather than applying the removed test hunk.

Automated hermes-sweeper review.

from tools import lazy_deps
assert lazy_deps.feature_specs("tool.computer_use") == (
"mcp==1.26.0",
"mcp==1.28.1",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test target no longer exists on current main (rg finds no test_feature_registered_in_allowlist), while the current lazy-MCP tests are at tests/tools/test_computer_use.py:762-792. Recreate the assertion in the current test layout during consolidation.

@teknium1 teknium1 added the sweeper:blast-broad Sweeper blast radius: broad — a core path most sessions hit label Jul 30, 2026
@sycamoregroupltd

Copy link
Copy Markdown
Contributor

Closing as superseded/redundant: main now carries the full security floor for both lanes — mcp==1.28.1 across [dev]/[mcp]/[computer-use] and Pillow==12.3.0 (commits a7efeb0 'fix(sec): update mcp to 1.28.1' and abcd213 'fix(sec): update pillow to 12.3.0', landed 2026-07-30). Maintainer teknium1 confirmed the same for the MCP lane when closing #73219 (2026-08-01). No merge/deploy/runtime mutation performed.

@sycamoregroupltd

Copy link
Copy Markdown
Contributor

Maintainer closure request: this PR is fully redundant — its entire diff (Pillow==12.3.0 + mcp==1.28.1) is already on main via commits a7efeb0 ('fix(sec): update mcp to 1.28.1') and abcd213 ('fix(sec): update pillow to 12.3.0'), both landed 2026-07-30. Verified live today: main pyproject.toml pins mcp==1.28.1 in [dev]/[mcp]/[computer-use] and Pillow==12.3.0 as a core dep; uv.lock resolves pillow 12.3.0. The sycamoregroupltd account lacks ClosePullRequest permission (GraphQL closePullRequest denied), so please close this PR as superseded/redundant — same disposition teknium1 applied to #73219 on 2026-08-01. No merge/deploy/runtime mutation performed.

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

Labels

area/install-update Installer, updater, packaging, wheels, doctor comp/tools Tool registry, model_tools, toolsets dependencies Pull requests that update a dependency file needs-decision Awaiting maintainer decision before any implementation P3 Low — cosmetic, nice to have python:uv Pull requests that update python:uv code sweeper:blast-broad Sweeper blast radius: broad — a core path most sessions hit sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades tool/mcp MCP client and OAuth tool/vision Vision analysis and image generation type/security Security vulnerability or hardening

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants