Skip to content

chore(deps): bump mcp from 1.29.0 to 2.0.0 - #115

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/mcp-2.0.0
Closed

chore(deps): bump mcp from 1.29.0 to 2.0.0#115
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/mcp-2.0.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 5, 2026

Copy link
Copy Markdown
Contributor

Bumps mcp from 1.29.0 to 2.0.0.

Release notes

Sourced from mcp's releases.

v2.0.0

MCP Python SDK v2 Stable Release

This is v2.0.0, the stable v2 release of the MCP Python SDK. It supports the 2026-07-28 revision of the Model Context Protocol and serves every earlier revision from the same server. pip install mcp now installs 2.x.

pip install "mcp[cli]"
# or
uv add "mcp[cli]"

Documentation Rewrite

The documentation has the full tutorial and API reference. Coming from v1? What's new in v2 is the tour of what changed and why, and the migration guide lists every breaking change with before-and-after code.

V1 Maintenance mode

v1.x is in maintenance mode and will only receive security fixes from now on The 1.x line lives on the v1.x branch, continues to receive critical bug fixes and security patches, and is documented at https://py.sdk.modelcontextprotocol.io/v1/. If your project is not ready to migrate, keep a <2 upper bound on your requirement (for example mcp>=1.28,<2).

Highlights

One SDK, both protocol eras

v2 speaks the 2026-07-28 revision (stateless requests with no handshake, server/discover, subscriptions/listen, multi-round-trip requests) and still serves every 2025-era client from the same MCPServer, over Streamable HTTP and stdio, with nothing to configure. Client(target) negotiates the version automatically.

FastMCP is now MCPServer, and there is a first-class Client

The decorator API is unchanged; the low-level Server is rebuilt around a shared dispatcher engine, and one Client object replaces v1's transport-plus-ClientSession-plus-initialize() layering. It connects to a URL, a stdio subprocess, a custom transport, or straight to a server object in memory for tests.

Multi-round-trip requests and resolver dependency injection

At 2026-07-28 the server can no longer call the client, so tools return the question instead. A Resolve(fn) parameter is filled by your function invisibly to the model and can put a question to the user; one tool body serves both eras.

Extension APIs, OpenTelemetry, and a standalone types package

Servers and clients compose protocol extensions through pluggable extension APIs (MCP Apps built in); OpenTelemetry tracing ships on by default; every protocol type is its own package, mcp-types (imported as mcp_types), published in lock-step with mcp.

Hardened stdio and auth

stdio servers keep handler subprocesses and stray prints off the wire, and stdout is diverted to stderr while serving. OAuth adds RFC 9207 issuer validation, the SEP-990 identity-assertion flow, and the client-credentials extension.

Coming from a v2 pre-release

Since the last release candidate: the per-version wire packages are private (mcp_types._v*), mcp.types is a permanent alias for mcp_types, the auth registration request model is split from the registered-client record, cancelled requests are no longer answered, and log notifications are gated on the per-request log-level opt-in at 2026-07-28. Since the betas: Client(cache=False) is now cache=None with CacheConfig() the default; Context.client_id, RFC7523OAuthClientProvider, and OAuthClientProvider(timeout=) are removed; the client-credentials providers take scope=; message_handler receives notifications and exceptions only; FileResource(is_binary=) becomes encoding; MCP_* env vars are gone with pydantic-settings; Streamable HTTP servers reject bodies over 4 MiB with HTTP 413. The migration guide covers all of it.

Known gaps

The tasks extension (SEP-2663) is not part of this release. On the client, the DPoP proof binding (SEP-1932) and the workload-identity jwt-bearer grant are not implemented; both are additive and can land in 2.x.

Feedback

... (truncated)

Commits
  • 6f69a37 Present v2 as the stable release across the README, docs, and policies (#3178)
  • 78e6fbb Serve v2 docs at the site root, with permanent per-major paths (#3176)
  • af06330 Remove unused StreamableHTTPTransport.get_session_id() (#3205)
  • 68ca87e Document the two-line release process for stable v2 (#3179)
  • c9c431b Expose the middleware chain on MCPServer and stop sending unrequested change ...
  • 528e366 Fail fast on server-to-client requests in JSON-response mode instead of hangi...
  • 27f5cc7 Remove unused mcpserver.exceptions.ValidationError (#3199)
  • 89c5e70 Gate log notifications on the per-request log-level opt-in at 2026-07-28 (#3198)
  • b61ce38 docs: fix off-by-one hl_lines in apps.md (#3196)
  • b7c9a91 Add mcp.types as a permanent alias for mcp_types (#3190)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [mcp](https://github.com/modelcontextprotocol/python-sdk) from 1.29.0 to 2.0.0.
- [Release notes](https://github.com/modelcontextprotocol/python-sdk/releases)
- [Changelog](https://github.com/modelcontextprotocol/python-sdk/blob/main/RELEASE.md)
- [Commits](modelcontextprotocol/python-sdk@v1.29.0...v2.0.0)

---
updated-dependencies:
- dependency-name: mcp
  dependency-version: 2.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update python code labels Aug 5, 2026
@dgokeeffe

Copy link
Copy Markdown
Collaborator

Closing: this makes requirements.txt unsatisfiable, so pip install -r requirements.txt — and therefore every Databricks Apps deploy — would fail.

Because httpx2>=2.5.0 depends on idna>=3.18 and mcp>=2.0.0 depends on
httpx2>=2.5.0, we can conclude that mcp>=2.0.0 depends on idna>=3.18.
And because you require idna==3.17 and mcp==2.0.0, we can conclude that
your requirements are unsatisfiable.

mcp 2.0.0 switches to httpx2, which needs idna>=3.18, but we hold an idna>=3.17 security floor pinned at 3.17 (GHSA-65pc-fj4g-8rjx).

This is the same failure mode as #84, which did land and broke main until #110 repaired it: requirements.txt is compiled from pyproject.toml, so editing one pin without re-running the resolver can produce a file that no longer resolves. Note GitHub still reported this PR as MERGEABLE — mergeable is not installable.

To actually take mcp 2.0.0: raise the idna floor in pyproject.toml (3.18 must first age past the exclude-newer cooldown), then recompile. Worth doing deliberately as a major-version bump, not as an unreviewed pin edit.

@dgokeeffe dgokeeffe closed this Aug 5, 2026
@dgokeeffe
dgokeeffe deleted the dependabot/pip/mcp-2.0.0 branch August 5, 2026 09:25
@dependabot @github

dependabot Bot commented on behalf of github Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

dgokeeffe added a commit that referenced this pull request Aug 5, 2026
#120)

CI has never run the test suite on this repo. The Tests workflow has exactly one
run in its history — a manual workflow_dispatch in May — and that run has zero
jobs. Dependency Audit and Update Lockfile have never produced a run at all.

Cause: all three target `databrickslabs-protected-runner-group`. That group is
granted per-repo across the org (ucx, dqx, dlt-meta and others use it
successfully) and this repo was never granted it, so jobs targeting it are
never scheduled — silently, with no failure anywhere to notice.

Consequences already observed:

- #84 bumped pydantic-core to 2.47.0 while pydantic==2.13.4 pins
  pydantic-core==2.46.4 exactly. requirements.txt became unsatisfiable, so
  every Databricks Apps deploy from main failed until #110 repaired it. GitHub
  reported the PR MERGEABLE; nothing installed requirements.txt.
- #115 and #116 were the same failure and were caught only by resolving them
  by hand.
- requirements.lock had drifted from requirements.txt, because Update Lockfile
  never ran. Regenerated here.

## Runners

test.yml, dependency-audit.yml and update-lockfile.yml move to ubuntu-latest.
None of them need org secrets — the first two are read-only, and the third uses
only the repo-scoped GITHUB_TOKEN. GitHub-hosted runners are free for public
repos. release.yml is left on the protected group: it signs release artifacts,
so it deserves a deliberate decision rather than a drive-by change (it also
means releases stay blocked until the repo is granted the group — noted in the
PR).

## New gates, each tied to a failure that actually happened

1. requirements.txt must be installable — catches the #84/#115/#116 class.
2. requirements.lock must match requirements.txt — catches the drift above.
3. App modules must import — 13 modules whose failure takes the app down at
   boot, most with no direct unit test.
4. A floor on tests that actually ran — a suite reporting "all skipped" passes
   vacuously, which is exactly what #106 fixed (465 skipped).

## Two bugs found while verifying the workflow locally

- tests/e2e/conftest.py raised an uncaught FileNotFoundError when the
  databricks CLI is absent. That surfaces as a pytest INTERNALERROR which kills
  the entire session — so this workflow would have failed on its first run on a
  hosted runner, where the CLI isn't installed. A missing CLI is now treated as
  "prerequisite absent" and skips.
- tests/integration is excluded from the PR gate. It gates on Docker, and
  Docker *is* present on ubuntu-latest, so it would really run: building an
  apps-like image and executing the full setup pipeline. Confirmed locally that
  including it produces failures. It stays runnable on demand.

## Verification

Every step was run locally, including with PATH stripped of the databricks CLI
to simulate a hosted runner: 535 passed, 3 skipped. Each of the four gates was
then confirmed to fail when its bug is reintroduced — the #84 pin, a truncated
lockfile, and the #106 whole-session skip.
dgokeeffe added a commit that referenced this pull request Aug 5, 2026
#120)

CI has never run the test suite on this repo. The Tests workflow has exactly one
run in its history — a manual workflow_dispatch in May — and that run has zero
jobs. Dependency Audit and Update Lockfile have never produced a run at all.

Cause: all three target `databrickslabs-protected-runner-group`. That group is
granted per-repo across the org (ucx, dqx, dlt-meta and others use it
successfully) and this repo was never granted it, so jobs targeting it are
never scheduled — silently, with no failure anywhere to notice.

Consequences already observed:

- #84 bumped pydantic-core to 2.47.0 while pydantic==2.13.4 pins
  pydantic-core==2.46.4 exactly. requirements.txt became unsatisfiable, so
  every Databricks Apps deploy from main failed until #110 repaired it. GitHub
  reported the PR MERGEABLE; nothing installed requirements.txt.
- #115 and #116 were the same failure and were caught only by resolving them
  by hand.
- requirements.lock had drifted from requirements.txt, because Update Lockfile
  never ran. Regenerated here.

## Runners

test.yml, dependency-audit.yml and update-lockfile.yml move to ubuntu-latest.
None of them need org secrets — the first two are read-only, and the third uses
only the repo-scoped GITHUB_TOKEN. GitHub-hosted runners are free for public
repos. release.yml is left on the protected group: it signs release artifacts,
so it deserves a deliberate decision rather than a drive-by change (it also
means releases stay blocked until the repo is granted the group — noted in the
PR).

## New gates, each tied to a failure that actually happened

1. requirements.txt must be installable — catches the #84/#115/#116 class.
2. requirements.lock must match requirements.txt — catches the drift above.
3. App modules must import — 13 modules whose failure takes the app down at
   boot, most with no direct unit test.
4. A floor on tests that actually ran — a suite reporting "all skipped" passes
   vacuously, which is exactly what #106 fixed (465 skipped).

## Two bugs found while verifying the workflow locally

- tests/e2e/conftest.py raised an uncaught FileNotFoundError when the
  databricks CLI is absent. That surfaces as a pytest INTERNALERROR which kills
  the entire session — so this workflow would have failed on its first run on a
  hosted runner, where the CLI isn't installed. A missing CLI is now treated as
  "prerequisite absent" and skips.
- tests/integration is excluded from the PR gate. It gates on Docker, and
  Docker *is* present on ubuntu-latest, so it would really run: building an
  apps-like image and executing the full setup pipeline. Confirmed locally that
  including it produces failures. It stays runnable on demand.

## Verification

Every step was run locally, including with PATH stripped of the databricks CLI
to simulate a hosted runner: 535 passed, 3 skipped. Each of the four gates was
then confirmed to fail when its bug is reintroduced — the #84 pin, a truncated
lockfile, and the #106 whole-session skip.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant