OpenHands / OpenHands/software-agent-sdk

Unlocked installs resolve browser-use 0.11.13 with mcp 2.x — browser tools silently disappear

Open
#5,152 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug dependencies mcp priority:high ready-for-dev tools
Dominant language
Python
Stars
1.1k
Forks
539
Avg merge
1d 19h
Merged PRs (30d)
137

Description

Is there an existing issue for the same bug?
  • I have searched existing issues and this is not a duplicate.
Bug Description

Any install of the SDK that resolves dependencies without uv.lockuvx, pip install openhands-agent-server, Agent Canvas's npm run dev:minimal — gets browser-use 0.11.13 together with mcp 2.x. browser-use 0.11.13 predates mcp 2, so its MCP server raises at import/startup and the agent ends up with no browser tools, reported only as a log warning.

Locked installs (the Docker image, CI, uv sync) are unaffected: uv.lock holds fastmcp 3.2.0 → mcp 1.28.1.

Expected Behavior

An unlocked install of openhands-agent-server / openhands-tools resolves a dependency set where browser_tool_set actually starts, or fails loudly if it cannot.

Actual Behavior

The resolver picks a combination that cannot work:

printf 'openhands-agent-server==1.49.1\nopenhands-tools==1.49.1\n' > req.txt
uv pip compile --python-version 3.12 req.txt | grep -E '^(browser-use|mcp|fastmcp)=='
# browser-use==0.11.13
# fastmcp==4.0.5
# mcp==2.2.0

In that environment the browser executor cannot start:

uv run --python 3.12 --with openhands-agent-server==1.49.1 --with openhands-tools==1.49.1 \
  python -c "from openhands.tools.browser_use.impl import BrowserToolExecutor; BrowserToolExecutor()"
# AttributeError: 'Server' object has no attribute 'list_tools'
#   browser_use/mcp/server.py:215  ->  @self.server.list_tools()

BrowserToolSet.create() catches it and returns no tools with WARNING Browser tools are unavailable: the browser executor failed to start. Because chromium is installed, is_tool_usable("browser_tool_set") stays True, so the agent-server still injects the tool set on a profile launch and the agent silently runs without browser tools.

Steps to Reproduce
  1. Run the uv pip compile above, or start Agent Canvas with npm run dev:minimal.
  2. Launch a conversation with an OpenHands profile that has tools: null.
  3. The resolved agent lists browser_tool_set, but no browser_* tool reaches the LLM.
Root cause

Two unbounded ranges of ours, plus browser-use's habit of pinning its dependencies exactly:

  1. openhands-sdk declares fastmcp>=3.2.0 with no upper bound. fastmcp 4.0 (2026-08-31) restructured into fastmcp-slim, which requires mcp>=2.0.0,<3.0.0, so an unlocked resolve now installs mcp 2.x.

  2. openhands-tools declares browser-use>=0.8.0 with no upper bound, but openhands-agent-server requires openai>=2.33.0,<3 (added in #3545). Every browser-use from 0.12 on pins an older exact openai, so all of them are excluded:

    browser-use openai mcp
    0.11.13 (2026-02-25) >=2.7.2,<3 >=1.10.1
    0.12.0 – 0.13.8 ==2.16.0 ==1.26.0
    0.13.9 ==2.26.0 ==1.28.1
    0.13.10 (2026-09-04) ==2.26.0 ==2.1.1

    Forcing the newest says so directly: "Because browser-use==0.13.10 depends on openai==2.26.0 and openhands-agent-server depends on openai>=2.33.0,<3 …"

So the newest browser-use our openai floor allows is too old for the mcp major that fastmcp 4 forces. Before fastmcp 4.0 an unlocked install got mcp 1.x and 0.11.13 was fine.

Acceptance Criteria
  • An unlocked resolve of openhands-agent-server + openhands-tools produces a dependency set whose BrowserToolExecutor() constructs successfully.
  • uv.lock still resolves and the existing browser tests pass.
  • A failure to start the browser is visible to a user or client, not only in server logs (today is_tool_usable reports True while the tool set resolves to zero tools).
  • CI catches this class of drift: a check that resolves the published dependencies without the lockfile and imports the browser executor.
Installation Method

Other

If you selected "Other", please specify

uvx / pip (unlocked resolution), including Agent Canvas npm run dev:minimal

SDK Version

1.49.1

Version Confirmation
  • I have confirmed this bug exists on the LATEST version of OpenHands SDK
Python Version

3.12

Operating System

macOS (resolution is platform-independent)

Logs and Error Messages
WARNING  Browser tools are unavailable: the browser executor failed to start. Continuing without them.
  File ".../browser_use/mcp/server.py", line 215, in _setup_handlers
    @self.server.list_tools()
AttributeError: 'Server' object has no attribute 'list_tools'

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the unlocked resolution with the provided uv pip compile command, then run the BrowserToolExecutor import shown in the issue. Inspect the dependency declarations for openhands-sdk and openhands-tools, along with BrowserToolSet.create() and is_tool_usable(). Done means unlocked and locked resolutions work, browser startup failures are visible, and CI checks an unlocked published dependency set.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, build-system, testing-qa
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.