Skip to content

Pin httpx < 1.0 and simplify beta install docs#2975

Merged
jlowin merged 5 commits intomainfrom
pin-httpx-below-1.0
Jan 22, 2026
Merged

Pin httpx < 1.0 and simplify beta install docs#2975
jlowin merged 5 commits intomainfrom
pin-httpx-below-1.0

Conversation

@jlowin
Copy link
Copy Markdown
Member

@jlowin jlowin commented Jan 21, 2026

When installing fastmcp with pre-release resolution enabled, pip/uv can pull HTTPX 1.0.dev3, which breaks imports because httpx-sse (a dependency of mcp) uses httpx.TransportError which no longer exists in HTTPX 1.0:

AttributeError: module 'httpx' has no attribute 'TransportError'

This adds an upper bound to keep HTTPX below 1.0 until the ecosystem catches up.

Also simplifies the beta install docs - specifying >=3.0.0b1 in the version allows pip/uv to install the prerelease without needing --pre or --prerelease=allow flags, which avoids pulling prerelease versions of dependencies.

Closes #2973

@marvin-context-protocol marvin-context-protocol Bot added bug Something isn't working. Reports of errors, unexpected behavior, or broken functionality. dependencies Updates to project dependencies. Automatically applied to dependabot PRs. labels Jan 21, 2026
@jlowin jlowin changed the title Pin httpx < 1.0 to prevent import error with pre-release versions Pin httpx < 1.0 and simplify beta install docs Jan 22, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jan 22, 2026

Warning

Rate limit exceeded

@jlowin has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 11 minutes and 35 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

Walkthrough

This pull request updates installation documentation across two files by changing package version specifiers from exact pinning format to minimum-version range format. The main installation guide was updated from fastmcp==3.0.0b1 to fastmcp>=3.0.0b1, with corresponding updates to alternative installation methods. The tasks documentation was similarly updated to use >= instead of == for the fastmcp[tasks] dependency specification.

Possibly related PRs

🚥 Pre-merge checks | ✅ 3 | ❌ 2
❌ Failed checks (2 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive The PR description explains the issue, rationale, and solutions, but the contributors checklist has no checkmarks and appears incomplete. Complete the contributors checklist by marking completed items and ensuring self-review is confirmed before merging.
Linked Issues check ❓ Inconclusive The PR addresses the main objective from issue #2973 to add upper-bound constraints to httpx, though the summary doesn't explicitly confirm the pyproject.toml changes. Verify that pyproject.toml was modified to change httpx from '>=0.28.1' to '>=0.28.1,<1.0' as specified in issue #2973.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The PR title mentions two changes: pinning httpx < 1.0 and simplifying beta install docs, both present in the changeset, but prioritizes the httpx fix as primary.
Out of Scope Changes check ✅ Passed The documentation updates to installation instructions are complementary to the httpx pinning and directly support the primary objective of simplifying beta install guidance.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/getting-started/installation.mdx (1)

10-16: Update the beta install note to match the new version range.

The note says to specify the version explicitly, but the command now uses a minimum range. Align the wording so it matches the command.

✏️ Suggested wording
- FastMCP 3.0 is currently in beta. Install by specifying the version explicitly.
+ FastMCP 3.0 is currently in beta. You should install it by specifying the minimum beta version.

Comment on lines +18 to +21
Or with uv:

```bash
uv add fastmcp --prerelease=allow
uv add "fastmcp>=3.0.0b1"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

uv prerelease allow flag behavior version specifiers beta

💡 Result:

Short answer: uv only accepts pre-release versions when you explicitly request them in a version specifier (e.g., >=1.0.0b1 / 2.0.0rc1) or when a package only has pre-release releases. Using --prerelease=allow (or prerelease = "allow" in config) forces the resolver to consider pre-releases for all dependencies (including transitive ones), and uv will prompt you to re-run with --prerelease=allow if resolution fails due to an otherwise-blocked transitive pre-release. [1][2]

Examples / notes:

  • Explicit specifier: flask>=2.0.0rc1 will allow that release without other flags. [1][2]
  • All-PRs case: if every published version is a pre-release, uv will consider them by default. [1][3]
  • --prerelease=allow: opt-in that permits pre-releases globally (useful for alpha/beta installs). [2][4]

Sources: uv docs (pre-release behavior and CLI flag), uv PyPI description. [1][2][3][4]


🌐 Web query:

uv add prerelease version constraint >=3.0.0b1

💡 Result:

Use Poetry's allow-prereleases flag and the inequality specifier. For example:

poetry add @">=3.0.0b1" --allow-prereleases

This tells Poetry to accept the prerelease (b1) and any later versions >= 3.0.0b1. Poetry's prerelease handling and the --allow-prereleases option are documented in the dependency spec docs and PEP 440. [1][2]

Sources:
[1] Poetry — Dependency specification (pre-releases / allow-prereleases).
[2] PEP 440 — Handling of pre-releases.


Rephrase the label using second person to align with documentation style guidelines, which require second person for instructions and procedures.

The command uv add "fastmcp>=3.0.0b1" is correct without --prerelease=allow. When you explicitly include a prerelease version in the specifier (e.g., >=3.0.0b1), uv accepts it directly without requiring the flag.

Change "Or with uv:" to "You can also use uv:" for consistency with the docs style guide.

@jlowin jlowin merged commit 41c5648 into main Jan 22, 2026
12 checks passed
@jlowin jlowin deleted the pin-httpx-below-1.0 branch January 22, 2026 02:08
gfortaine pushed a commit to gfortaine/fastmcp that referenced this pull request Jan 30, 2026
gfortaine pushed a commit to gfortaine/fastmcp that referenced this pull request Feb 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working. Reports of errors, unexpected behavior, or broken functionality. dependencies Updates to project dependencies. Automatically applied to dependabot PRs.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pin httpx < 1.0 to prevent import error with pre-release versions

1 participant